diff --git a/.github/workflows/issue_to_jira.yml b/.github/workflows/issue_to_jira.yml
index 1401104b..057d0782 100644
--- a/.github/workflows/issue_to_jira.yml
+++ b/.github/workflows/issue_to_jira.yml
@@ -1,5 +1,3 @@
-# This workflow will create a JIRA issue upon creation of a GitHub issue
-
name: Create JIRA issue
on:
@@ -7,30 +5,8 @@ on:
types: [opened]
jobs:
- new_jira_issue:
- runs-on: ubuntu-latest
-
- steps:
- - name: JIRA Login
- uses: atlassian/gajira-login@v3.0.1
- env:
- JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
- JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
- JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
- - name: Jira Create issue
- id: create_jira_issue
- uses: atlassian/gajira-create@v3.0.1
- with:
- project: GEOPY
- issuetype: Story
- summary: ${{ github.event.issue.title }}
- description: "_from [GitHub issue #${{ github.event.issue.number }}|${{ github.event.issue.html_url }}]_"
- # Additional fields in JSON format
- #fields: '{"components": [{"name": "my-app"}]}'
- - name: Post JIRA link
- uses: peter-evans/create-or-update-comment@v3
- with:
- # The number of the issue or pull request in which to create a comment.
- issue-number: ${{ github.event.issue.number }}
- # The comment body.
- body: "JIRA issue [${{ steps.create_jira_issue.outputs.issue }}] was created."
+ call-workflow-create-jira-issue:
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-jira-issue_to_jira.yml@main
+ secrets: inherit
+ with:
+ project-key: 'GEOPY'
diff --git a/.github/workflows/pr_add_jira_summary.yml b/.github/workflows/pr_add_jira_summary.yml
index f0c8a8dd..794bf3f0 100644
--- a/.github/workflows/pr_add_jira_summary.yml
+++ b/.github/workflows/pr_add_jira_summary.yml
@@ -1,6 +1,3 @@
-# This workflow will comment the PR with the JIRA issue summary
-# if a JIRA issue number is detected in the branch name or title
-
name: Add JIRA issue summary
on:
@@ -8,57 +5,6 @@ on:
types: [opened]
jobs:
- add_jira_summary:
- runs-on: ubuntu-latest
-
- steps:
- - name: Find JIRA issue key
- id: find_jira_key
- env:
- HEAD_REF: ${{ github.head_ref}}
- PR_TITLE: ${{ github.event.pull_request.title }}
- run: >
- echo $HEAD_REF $PR_TITLE
- | 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 }}
- env:
- JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
- JIRA_BASIC_AUTH: ${{ secrets.JIRA_BASIC_AUTH }}
- run: >
- curl -sS -X GET
- -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 // 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 '{"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"
- "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/pulls/${{ github.event.pull_request.number }}"
- > /dev/null
+ call-workflow-add-jira-issue-summary:
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-jira-pr_add_jira_summary.yml@main
+ secrets: inherit
diff --git a/.github/workflows/pytest-unix-os.yml b/.github/workflows/pytest-unix-os.yml
deleted file mode 100644
index 2798e6ea..00000000
--- a/.github/workflows/pytest-unix-os.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: pytest on Unix OS
-
-on:
- pull_request:
- types: [opened, synchronize, reopened, ready_for_review]
- branches:
- - develop
- - main
- - release/**
- - feature/**
- - hotfix/**
- push:
- branches:
- - develop
- - main
- - release/**
- - feature/**
- - hotfix/**
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-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.10']
- os: [ubuntu-latest]
- runs-on: ${{ matrix.os }}
- defaults:
- run:
- shell: bash -l {0}
- env:
- PYTHONUTF8: 1
- 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:
- lfs: true
- - name: Setup conda env
- uses: mamba-org/setup-micromamba@v1
- with:
- environment-file: ${{ env.CONDA_LOCK_ENV_FILE }}
- environment-name: test_env
- cache-downloads: true
- - name: pytest
- run: pytest --cov --cov-report=xml
diff --git a/.github/workflows/pytest-windows.yml b/.github/workflows/pytest-windows.yml
deleted file mode 100644
index 5fd797e6..00000000
--- a/.github/workflows/pytest-windows.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: pytest on Windows
-
-on:
- pull_request:
- types: [opened, synchronize, reopened, ready_for_review]
- branches:
- - develop
- - main
- - release/**
- - feature/**
- - hotfix/**
- push:
- branches:
- - develop
- - main
- - release/**
- - feature/**
- - hotfix/**
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-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.10']
- defaults:
- run:
- shell: powershell
- runs-on: windows-latest
- env:
- PYTHONUTF8: 1
- 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:
- lfs: true
- - name: Setup conda env
- uses: mamba-org/setup-micromamba@v1
- with:
- environment-file: ${{ env.CONDA_LOCK_ENV_FILE }}
- environment-name: test_env
- init-shell: powershell
- cache-downloads: true
- - name: pytest
- run: pytest --cov --cov-report=xml
- - name: Codecov
- 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/python_analysis.yml b/.github/workflows/python_analysis.yml
new file mode 100644
index 00000000..4f9d4ed7
--- /dev/null
+++ b/.github/workflows/python_analysis.yml
@@ -0,0 +1,44 @@
+name: Python analysis
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review]
+ branches:
+ - develop
+ - main
+ - release/**
+ - feature/**
+ - hotfix/**
+ push:
+ branches:
+ - develop
+ - main
+ - release/**
+ - feature/**
+ - hotfix/**
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ call-workflow-static-analysis:
+ name: Static analysis
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-python-static_analysis.yml@main
+ with:
+ package-manager: 'conda'
+ app-name: 'simpeg_drivers'
+ python-version: '3.10'
+ call-workflow-pytest:
+ name: Pytest
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-python-pytest.yml@main
+ with:
+ package-manager: 'conda'
+ python-versions: '["3.10", "3.11"]'
+ os: '["ubuntu-latest", "windows-latest"]'
+ cache-number: 1
+ codecov-reference-python-version: '3.10'
+ codecov-reference-os: '["windows-latest"]'
+ timeout-minutes: 40
+ secrets:
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/python_deploy_dev.yml b/.github/workflows/python_deploy_dev.yml
new file mode 100644
index 00000000..e27f17e7
--- /dev/null
+++ b/.github/workflows/python_deploy_dev.yml
@@ -0,0 +1,35 @@
+name: Deploy python package in development
+
+on:
+ push:
+ tags:
+ - 'v*' # Push events to every version tag (eg. v1.0.0)
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ call-workflow-conda-publish:
+ name: Publish development conda package on JFrog Artifactory
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-python-publish_conda_package.yml@main
+ with:
+ package-name: 'simpeg-drivers'
+ python-version: '3.10'
+ virtual-repo-names: '["public-conda-dev"]'
+ secrets:
+ JFROG_ARTIFACTORY_URL: ${{ secrets.JFROG_ARTIFACTORY_URL }}
+ JFROG_ARTIFACTORY_TOKEN: ${{ secrets.JFROG_ARTIFACTORY_TOKEN }}
+ call-workflow-pypi-publish:
+ name: Publish development pypi package (JFrog Artifactory, TestPyPI)
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-python-publish_pypi_package.yml@main
+ with:
+ package-manager: 'poetry'
+ package-name: 'simpeg-drivers'
+ version-tag: ${{ github.ref_name }}
+ python-version: '3.10'
+ virtual-repo-names: '["public-pypi-dev", "test-pypi"]'
+ secrets:
+ JFROG_ARTIFACTORY_URL: ${{ secrets.JFROG_ARTIFACTORY_URL }}
+ JFROG_ARTIFACTORY_TOKEN: ${{ secrets.JFROG_ARTIFACTORY_TOKEN }}
+ PYPI_TOKEN: ${{ secrets.TEST_PYPI_TOKEN }}
diff --git a/.github/workflows/python_deploy_prod.yml b/.github/workflows/python_deploy_prod.yml
new file mode 100644
index 00000000..64a5cda1
--- /dev/null
+++ b/.github/workflows/python_deploy_prod.yml
@@ -0,0 +1,46 @@
+name: Deploy python package in production
+
+on:
+ release:
+ types: [published]
+ workflow_dispatch:
+ inputs:
+ release-tag:
+ description: 'Tag for the existing (draft) release to publish assets from'
+ required: true
+ publish-conda:
+ description: 'Publish Conda package'
+ required: false
+ default: true
+ publish-pypi:
+ description: 'Publish PyPI package'
+ required: false
+ default: true
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.release.tag_name || github.event.inputs.release-tag || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ call-workflow-conda-release:
+ name: Publish production Conda package on JFrog Artifactory
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-python-release_conda_assets.yml@main
+ if: ${{ github.event_name == 'release' || github.event.inputs.publish-conda == 'true' }}
+ with:
+ virtual-repo-names: '["public-conda-prod"]'
+ release-tag: ${{ github.event.release.tag_name || github.event.inputs.release-tag }}
+ secrets:
+ JFROG_ARTIFACTORY_URL: ${{ secrets.JFROG_ARTIFACTORY_URL }}
+ JFROG_ARTIFACTORY_TOKEN: ${{ secrets.JFROG_ARTIFACTORY_TOKEN }}
+ call-workflow-pypi-release:
+ name: Publish production PyPI package (JFrog Artifactory, PyPI)
+ if: ${{ github.event_name == 'release' || github.event.inputs.publish-pypi == 'true' }}
+ uses: MiraGeoscience/CI-tools/.github/workflows/reusable-python-release_pypi_assets.yml@main
+ with:
+ package-name: 'simpeg-drivers'
+ virtual-repo-names: '["public-pypi-prod", "pypi"]'
+ release-tag: ${{ github.event.release.tag_name || github.event.inputs.release-tag }}
+ secrets:
+ JFROG_ARTIFACTORY_URL: ${{ secrets.JFROG_ARTIFACTORY_URL }}
+ JFROG_ARTIFACTORY_TOKEN: ${{ secrets.JFROG_ARTIFACTORY_TOKEN }}
+ PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml
deleted file mode 100644
index be479801..00000000
--- a/.github/workflows/static-analysis.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: static analysis
-
-on:
- pull_request:
- types: [opened, synchronize, reopened, ready_for_review]
- branches:
- - develop
- - main
- - release/**
- - feature/**
- - hotfix/**
- push:
- branches:
- - develop
- - main
- - release/**
- - feature/**
- - hotfix/**
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-env:
- source_dir: simpeg_drivers
-
-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_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
- uses: mamba-org/setup-micromamba@v1
- with:
- environment-file: ${{ env.CONDA_LOCK_ENV_FILE }}
- environment-name: linter_env
- cache-downloads: true
- - name: capture modified files
- if: github.event_name == 'pull_request'
- run: >-
- git fetch --deepen=500 origin ${{github.base_ref}}
- && echo "FILES_PARAM=$(
- git diff --diff-filter=AM --name-only refs/remotes/origin/${{github.base_ref}}... -- | grep -E "^(${source_dir}|tests)/.*\.py$" | xargs
- )" >> $GITHUB_ENV
- - name: Run pylint on modified files
- if: github.event_name == 'pull_request' && env.FILES_PARAM
- run: pylint $FILES_PARAM
- - name: Run pylint on all files
- if: github.event_name == 'push'
- run: pylint $source_dir tests
diff --git a/.idea/copyright/MiraGeoscience.xml b/.idea/copyright/MiraGeoscience.xml
index 6c1fafb5..4ecba321 100644
--- a/.idea/copyright/MiraGeoscience.xml
+++ b/.idea/copyright/MiraGeoscience.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 7c8bef69..e88ed244 100644
--- a/.idea/copyright/profiles_settings.xml
+++ b/.idea/copyright/profiles_settings.xml
@@ -8,12 +8,18 @@
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/.idea/scopes/sources.xml b/.idea/scopes/sources.xml
index f8b70747..3d5e04c2 100644
--- a/.idea/scopes/sources.xml
+++ b/.idea/scopes/sources.xml
@@ -1,3 +1,3 @@
-
-
+
+
\ No newline at end of file
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c732eb4d..019e63c8 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -2,7 +2,7 @@
default_language_version:
python: python3
exclude: ^docs/(conf.py|_ext/)
-default_stages: [commit,push]
+default_stages: [pre-commit,pre-push]
fail_fast: false
ci:
@@ -12,44 +12,46 @@ ci:
repos:
- repo: https://github.com/hadialqattan/pycln
- rev: v2.4.0
+ rev: v2.5.0
hooks:
- id: pycln
args: [--config=pyproject.toml]
-- repo: https://github.com/PyCQA/isort
- rev: 5.13.2
+- 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/psf/black
- rev: 24.4.2
- hooks:
- - id: black
-- repo: https://github.com/PyCQA/flake8
- rev: 7.0.0
- hooks:
- - id: flake8
-- repo: https://github.com/asottile/pyupgrade
- rev: v3.15.2
- hooks:
- - id: pyupgrade
- args: [--py310-plus]
-#- repo: https://github.com/pre-commit/mirrors-mypy # TODO: fix mypy errors
-# rev: v1.10.0
+ - id: ruff
+ args:
+ - --fix
+ - --exit-non-zero-on-fix
+# - --unsafe-fixes
+ - id: ruff-format
+# - repo: https://github.com/pre-commit/mirrors-mypy # TODO: fix mypy errors
+# rev: v1.11.0
# hooks:
# - id: mypy
# additional_dependencies: [
-# numpy==1.26.*, # pre-commit CI does not provide numpy 1.23.*
+# numpy==1.26.*,
# types-toml,
# types-PyYAML,
# tomli # to read config from pyproject.toml
# ]
# exclude: ^(docs|simpeg_drivers-assets)/
- repo: https://github.com/codingjoe/relint
- rev: 3.1.1
+ 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|^docs/intro\.md|\.py|\.pyi)$
+ exclude: (^\.|^docs/(?!intro\.md))
+ args:
+ - --full-scan-files
+ - intro.md
+ - id: prepare-commit-msg
+ - id: check-commit-msg
- repo: local
hooks:
- id: pylint
@@ -59,31 +61,14 @@ 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.6.0
+ rev: v5.0.0
hooks:
- id: trailing-whitespace
exclude: \.mdj$
@@ -91,7 +76,8 @@ repos:
exclude_types: [jupyter]
- id: check-toml
- id: check-yaml
-# - id: check-added-large-files # crashing on some configuration. To be investigated
+ exclude: ^meta.yaml$
+ - id: check-added-large-files
- id: check-case-conflict
- id: check-merge-conflict
- id: debug-statements
@@ -111,7 +97,7 @@ repos:
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/.readthedocs.yml b/.readthedocs.yml
index 8504fe27..eebdf2c0 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -26,5 +26,10 @@ build:
- "jupyter-book config sphinx docs/"
- "pip install . --no-deps"
+sphinx:
+ builder: html
+ configuration: docs/conf.py
+ fail_on_warning: false
+
conda:
- environment: environments/py-3.10-linux-64-dev.conda.lock.yml
+ environment: docs/environment.yml
diff --git a/LICENSE b/LICENSE
index 81481380..63c947ce 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2024 Mira Geoscience
+Copyright (c) 2023-2025 Mira Geoscience Ltd.
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
index 9a90fd67..33ca8a68 100644
--- a/README-dev.rst
+++ b/README-dev.rst
@@ -1,4 +1,3 @@
-
Setup for development
=====================
@@ -335,4 +334,4 @@ Here is a suggestion for some plugins you can install in PyCharm.
Copyright
^^^^^^^^^
-Copyright (c) 2024 Mira Geoscience Ltd.
+Copyright (c) 2023-2025 Mira Geoscience Ltd.
diff --git a/README.rst b/README.rst
index b2dcf0f5..e8947396 100644
--- a/README.rst
+++ b/README.rst
@@ -1,9 +1,9 @@
|coverage| |maintainability| |precommit_ci| |docs| |style| |version| |status| |pyversions|
-.. |docs| image:: https://readthedocs.org/projects/simpeg-drivers/badge/
+.. |docs| image:: https://readthedocs.com/projects/mirageoscience-simpeg-drivers/badge/?version=latest
:alt: Documentation Status
- :target: https://simpeg-drivers.readthedocs.io/en/latest/?badge=latest
+ :target: https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/?badge=latest
.. |coverage| image:: https://codecov.io/gh/MiraGeoscience/simpeg-drivers/branch/develop/graph/badge.svg
:alt: Code coverage
@@ -34,9 +34,12 @@
:alt: Maintainability
-simpeg-drivers: # TODO: SHORT DESCRIPTION
-=========================================================================
-The **simpeg-drivers** library # TODO: PACKAGE DESCRIPTION
+simpeg-drivers: run SimPEG inversions on GEOH5 files
+====================================================
+Application to run `SimPEG `_ inversions
+on `GEOH5 files `_.
+Users will be able to directly leverage the powerful visualization
+capabilities of `Geoscience ANALYST `_.
.. contents:: Table of Contents
:local:
@@ -44,7 +47,7 @@ The **simpeg-drivers** library # TODO: PACKAGE DESCRIPTION
Documentation
^^^^^^^^^^^^^
-`Online documentation `_
+`Online documentation `_
Installation
@@ -133,18 +136,36 @@ To configure the development environment and tools, please see `README-dev.rst`_
License
^^^^^^^
-# TODO: ADD LICENSE TERMS
+MIT License
+
+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 simpeg-drivers Software may provide links to third party libraries or code (collectively “Third Party Software”)
+The simpeg-drivers 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
+.. _THIRD_PARTY_SOFTWARE.rst: .docs/THIRD_PARTY_SOFTWARE.rst
Copyright
^^^^^^^^^
-Copyright (c) 2024 Mira Geoscience Ltd.
+Copyright (c) 2023-2025 Mira Geoscience Ltd.
diff --git a/THIRD_PARTY_SOFTWARE.rst b/THIRD_PARTY_SOFTWARE.rst
deleted file mode 100644
index 313c6c20..00000000
--- a/THIRD_PARTY_SOFTWARE.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-The simpeg_drivers repository and source distributions bundle several libraries that are
-compatibly licensed. We list these here.
-
-# TODO
-
-+---------+--------------+----------------------------------+-------------------------------------------------------------------+
-| Name | License | URL | Description |
-+---------+--------------+----------------------------------+-------------------------------------------------------------------+
-| | | | |
-+---------+--------------+----------------------------------+-------------------------------------------------------------------+
diff --git a/deps-lock-config.yaml b/deps-lock-config.yaml
new file mode 100644
index 00000000..9980f23a
--- /dev/null
+++ b/deps-lock-config.yaml
@@ -0,0 +1,4 @@
+include_dev: True
+py_versions:
+ - "3.10"
+ - "3.11"
diff --git a/devtools/check-copyright.py b/devtools/check-copyright.py
deleted file mode 100644
index 5456eedb..00000000
--- a/devtools/check-copyright.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python3
-
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-#
-# This file is part of simpeg_drivers package.
-#
-# All rights reserved.
-
-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")
- sys.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 9eeec259..00000000
--- a/devtools/git_message_hook.py
+++ /dev/null
@@ -1,236 +0,0 @@
-#!/usr/bin/env python3
-
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-#
-# This file is part of simpeg_drivers package.
-#
-# All rights reserved.
-
-"""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|DEVOPS|QA|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, check=False
- )
-
- # 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+", encoding="utf-8") 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/sync_files.py b/devtools/sync_files.py
index 4420b6a7..ad5c6829 100644
--- a/devtools/sync_files.py
+++ b/devtools/sync_files.py
@@ -1,4 +1,12 @@
-# Copyright (c) 2024 Mira Geoscience Ltd.
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2024-2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 python-training.
@@ -6,6 +14,7 @@
import sys
from pathlib import Path
+
CONVERT = {"ipynb": ".py", "py": ".ipynb"}
diff --git a/docs/THIRD_PARTY_SOFTWARE.rst b/docs/THIRD_PARTY_SOFTWARE.rst
new file mode 100644
index 00000000..75e658dd
--- /dev/null
+++ b/docs/THIRD_PARTY_SOFTWARE.rst
@@ -0,0 +1,46 @@
+Third Party Software
+====================
+
+The simpeg-drivers 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
+ * - `discretize `_
+ - MIT
+ - Discretization tools for finite volume and inverse problems
+ * - `geoh5py `_
+ - LGPL-3.0-or-later
+ - Python API for geoh5, an open file format for geoscientific data
+ * - `numpy `_
+ - BSD-3-Clause
+ - Fundamental package for array computing in Python
+ * - `param-sweeps `_
+ - MIT
+ - Parameter sweeper for ui.json powered applications.
+ * - `pydantic `_
+ - MIT
+ - Data validation using Python type hints.
+ * - `pymatsolver `_
+ - MIT
+ - Matrix Solvers for 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/_toc.yml b/docs/_toc.yml
index b46fd75b..92c31edb 100644
--- a/docs/_toc.yml
+++ b/docs/_toc.yml
@@ -9,11 +9,15 @@ chapters:
- file: inversion/fundamentals
- file: inversion/data_misfit
- file: inversion/regularization
+ - file: inversion/mesh_design
- file: inversion/joint_inversion
- file: case_study/introduction
sections:
- file: case_study/background
- - file: case_study/data
- - file: case_study/mesh_design
- - file: case_study/unconstrained_inversion
+ - file: case_study/magnetic
+ - file: case_study/gravity
+ - file: case_study/dc_resistivity
+ - file: case_study/tipper
+ - file: case_study/airborne_tem
- file: case_study/joint_inversion
+- file: THIRD_PARTY_SOFTWARE
diff --git a/docs/case_study/airborne_tem.ipynb b/docs/case_study/airborne_tem.ipynb
new file mode 100644
index 00000000..234ac726
--- /dev/null
+++ b/docs/case_study/airborne_tem.ipynb
@@ -0,0 +1,212 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "271792c3",
+ "metadata": {},
+ "source": [
+ "\n",
+ "\n",
+ "# Airborne Time-Domain EM (ATEM) Inversion\n",
+ "\n",
+ "\n",
+ "This section focuses on the inversion of airborne time-domain data generated from the Flin Flon conductivity model.\n",
+ "\n",
+ "```{figure} ./images/atem/atem_model.png\n",
+ "---\n",
+ "scale: 25%\n",
+ "---\n",
+ "[Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)\n",
+ "```\n",
+ "\n",
+ "```{note}\n",
+ "Runtime and memory usage increases rapidly with the mesh size and number of sources. It is strongly recommended to downsize this example to a few lines if the training is done on a standard computer. The full inversion presented below was performed on an Azure HC44rs node (44 CPUs, 315 Gb RAM) in ~2.0 h.\n",
+ "```\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "73928eb7",
+ "metadata": {},
+ "source": [
+ "(atem-data)=\n",
+ "\n",
+ "## ATEM data\n",
+ "\n",
+ "Time-domain systems come in many configurations, but they are generally made up of\n",
+ "\n",
+ "- an horizontal transmitter loop\n",
+ "- a receiver coil.\n",
+ "\n",
+ "The transmitter emits an EM pulse that propagates and interacts with conductive structures. During the off-time, the receiver(s) records either components of the magnetic field ($H_x,\\;H_y,\\;H_z$), or more commonly the time-derivative ($\\frac{\\delta B_z}{\\delta t}$) of the field over a range of time channels.\n",
+ "For more background information about airborne EM methods, see [em.geosci](https://em.geosci.xyz/content/geophysical_surveys/airborne_tdem/index.html#airborne-tdem)\n",
+ "\n",
+ "```{figure} ./images/atem/atem_configs.jpg\n",
+ "---\n",
+ "name: atem_forward\n",
+ "---\n",
+ "Various ATEM source-receiver configurations. Borrowed from [em.geosci](https://em.geosci.xyz/content/geophysical_surveys/airborne_tdem/index.html#airborne-tdem).\n",
+ "```\n",
+ "\n",
+ "For this tutorial, we generated an airborne time-domain EM survey over the main ore body. The survey lines are spaced at 400 m, oriented East-West, at a drape height of 60 m. The configuration used in this tutorial is a simplified version of typical airborne systems, with only five time channels measuring $\\frac{\\delta B_z}{\\delta t}$ between 1 to 10 milli-seconds.\n",
+ "\n",
+ "### Waveform\n",
+ "\n",
+ "In order to properly model the EM fields, it is necessary to specify the EM source - commonly known as the **waveform**. Most contractors will provide an ASCII file containing times and currents describing the waveform, which can be loaded directly in ANALYST ([Download example](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/waveform.txt)). For the purpose of this tutorial we are using a simple theoretical trapezoidal function.\n",
+ "\n",
+ "```{figure} ./images/atem/waveform.png\n",
+ "---\n",
+ "---\n",
+ "(red) Trapezoidal waveform with 5 msec pulse with, 20 Hz duty cycle and (blue) time channels recording data during the off-time.\n",
+ "```\n",
+ "\n",
+ "As part of the numerical simulation, this waveform must be *discretized*. That is, the theoretical waveform must be sampled at discrete time intervals. The **forward simulation** uses those steps to simulate the EM field over time.\n",
+ "A few important details must be taken into account to preserve good numerical accuracy while optimizing runtime and memory usage:\n",
+ "\n",
+ "- Discrete intervals must cover the entire wave cycle, from start of the pulse to past the last recording.\n",
+ "\n",
+ "```{figure} ./images/atem/waveform_discrete.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "- Time steps should only contain at most one time channel\n",
+ "\n",
+ "```{figure} ./images/atem/time_gates.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "**Optimization**\n",
+ "\n",
+ "- Minimizing the total number of time steps will speed up the the forward simulation.\n",
+ "\n",
+ "```{figure} ./images/atem/time_steps.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "- The direct solver used by the forward simulation requires a matrix factorization for each unique time step width. Whenever possible, reuse time step intervals to reduce memory requirements.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/atem/time_spacing.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: atem_forward\n",
+ "---\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a66aea32",
+ "metadata": {
+ "lines_to_next_cell": 2
+ },
+ "source": [
+ "## Mesh creation\n",
+ "\n",
+ "In preparation for the inversion, we create an octree mesh optimized for the airborne TEM survey. The mesh parameters are base on the original Flin Flon model.\n",
+ "\n",
+ "```{figure} ./images/atem/atem_core.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: atem_core\n",
+ "---\n",
+ "Core mesh parameters.\n",
+ "```\n",
+ "\n",
+ "Note that the padding distances are set substantially further than for the magnetics, gravity or dc-resistivity (1 km) inversions. This is because the [diffusion distance](diffusion-distance) for a background resistivity of $1000 \\; \\Omega .m$ for the last time channel (10 msec) is roughly 3.3 km. This distance is important to satisfy the [boundary conditions](https://em.geosci.xyz/content/maxwell1_fundamentals/solving_maxwells_equations.html?highlight=boundary%20conditions#boundary-and-initial-conditions) of the underlying differential equations.\n",
+ "\n",
+ "\n",
+ "### Refinements\n",
+ "\n",
+ "- For the first refinement, we insert 4 cells for the first three octree levels along the flight path. The refinement is done radially around the segments of the flight path curve to assure good numerical accuracy near the receiver locations. This is especially important for EM methods with low frequencies.\n",
+ "\n",
+ "- We use a second refinement along topography to get a coarse but continuous air-ground interface outside the area or interest.\n",
+ "\n",
+ "- Lastly, we refine a \"horizon\" to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influenced by the data.\n",
+ "\n",
+ "```{figure} ./images/atem/atem_refinement.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: atem_refinement\n",
+ "---\n",
+ "Refinement strategy used for the atem modeling.\n",
+ "```\n",
+ "\n",
+ "See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07b14d8b",
+ "metadata": {},
+ "source": [
+ "### Forward simulation\n",
+ "\n",
+ "Having defined the TEM survey, we can proceed with the forward simulation using the conductivity Flin Flon model.\n",
+ "\n",
+ "```{figure} ./images/atem/atem_data.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "(Top) ATEM $\\frac{\\delta B_z}{\\delta t}$ data displayed by the 2D Profiler at all 5 time channels. (Bottom) Survey lines relative to (left) the ore body and (right) the discrete conductivity model.\n",
+ "```\n",
+ "\n",
+ "Note that the position of the known conductor correlates with large amplitude in the ATEM data .\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1ef7a082",
+ "metadata": {},
+ "source": [
+ "## Unconstrained inversion\n",
+ "\n",
+ "**Runtime: ~2.0 h**\n",
+ "\n",
+ "Time-domain EM data involves data measured over a wide range of time channels that decays over several orders of magnitude. Balancing all this data can be challenging and time consuming. Here we adopt a percentage and floor uncertainty strategy.\n",
+ "\n",
+ "```{figure} ./images/atem/atem_uncerts.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: atem_uncerts\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "This approach is a good starting point, but experimentation is generally required.\n",
+ "\n",
+ "After running the inversion we recover the following solution:\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/atem/atem_unconstrained.png\n",
+ "---\n",
+ "name: atem_unconstrained\n",
+ "---\n",
+ "(Left) Horizontal section at 120 m elevation after reaching target misfit (iteration 5).\n",
+ "\n",
+ "(Right)(top) 2D profiles of (red) observed versus (black) predicted data for all 5 time channels. (bottom) Vertical section through the conductivity model below the same line.\n",
+ "```\n",
+ "\n",
+ "Despite our simplistic floor uncertainties, the inversion managed to converge fairly quickly to a reasonable model that fits our data well. We have recovered a clear conductor at depth that overlaps with the ore body. The inversion could resolve the conductive overburden layer, although the thickness is overestimated."
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/case_study/airborne_tem.py b/docs/case_study/airborne_tem.py
new file mode 100644
index 00000000..e75c7a62
--- /dev/null
+++ b/docs/case_study/airborne_tem.py
@@ -0,0 +1,181 @@
+# ---
+# jupyter:
+# jupytext:
+# text_representation:
+# extension: .py
+# format_name: light
+# format_version: '1.5'
+# jupytext_version: 1.16.2
+# kernelspec:
+# display_name: Python 3 (ipykernel)
+# language: python
+# name: python3
+# ---
+
+#
+#
+# # Airborne Time-Domain EM (ATEM) Inversion
+#
+#
+# This section focuses on the inversion of airborne time-domain data generated from the Flin Flon conductivity model.
+#
+# ```{figure} ./images/atem/atem_model.png
+# ---
+# scale: 25%
+# ---
+# [Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)
+# ```
+#
+# ```{note}
+# Runtime and memory usage increases rapidly with the mesh size and number of sources. It is strongly recommended to downsize this example to a few lines if the training is done on a standard computer. The full inversion presented below was performed on an Azure HC44rs node (44 CPUs, 315 Gb RAM) in ~2.0 h.
+# ```
+#
+#
+
+# (atem-data)=
+#
+# ## ATEM data
+#
+# Time-domain systems come in many configurations, but they are generally made up of
+#
+# - an horizontal transmitter loop
+# - a receiver coil.
+#
+# The transmitter emits an EM pulse that propagates and interacts with conductive structures. During the off-time, the receiver(s) records either components of the magnetic field ($H_x,\;H_y,\;H_z$), or more commonly the time-derivative ($\frac{\delta B_z}{\delta t}$) of the field over a range of time channels.
+# For more background information about airborne EM methods, see [em.geosci](https://em.geosci.xyz/content/geophysical_surveys/airborne_tdem/index.html#airborne-tdem)
+#
+# ```{figure} ./images/atem/atem_configs.jpg
+# ---
+# name: atem_forward
+# ---
+# Various ATEM source-receiver configurations. Borrowed from [em.geosci](https://em.geosci.xyz/content/geophysical_surveys/airborne_tdem/index.html#airborne-tdem).
+# ```
+#
+# For this tutorial, we generated an airborne time-domain EM survey over the main ore body. The survey lines are spaced at 400 m, oriented East-West, at a drape height of 60 m. The configuration used in this tutorial is a simplified version of typical airborne systems, with only five time channels measuring $\frac{\delta B_z}{\delta t}$ between 1 to 10 milli-seconds.
+#
+# ### Waveform
+#
+# In order to properly model the EM fields, it is necessary to specify the EM source - commonly known as the **waveform**. Most contractors will provide an ASCII file containing times and currents describing the waveform, which can be loaded directly in ANALYST ([Download example](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/waveform.txt)). For the purpose of this tutorial we are using a simple theoretical trapezoidal function.
+#
+# ```{figure} ./images/atem/waveform.png
+# ---
+# ---
+# (red) Trapezoidal waveform with 5 msec pulse with, 20 Hz duty cycle and (blue) time channels recording data during the off-time.
+# ```
+#
+# As part of the numerical simulation, this waveform must be *discretized*. That is, the theoretical waveform must be sampled at discrete time intervals. The **forward simulation** uses those steps to simulate the EM field over time.
+# A few important details must be taken into account to preserve good numerical accuracy while optimizing runtime and memory usage:
+#
+# - Discrete intervals must cover the entire wave cycle, from start of the pulse to past the last recording.
+#
+# ```{figure} ./images/atem/waveform_discrete.png
+# ---
+# scale: 50%
+# ---
+# ```
+#
+# - Time steps should only contain at most one time channel
+#
+# ```{figure} ./images/atem/time_gates.png
+# ---
+# scale: 50%
+# ---
+# ```
+#
+# **Optimization**
+#
+# - Minimizing the total number of time steps will speed up the the forward simulation.
+#
+# ```{figure} ./images/atem/time_steps.png
+# ---
+# scale: 50%
+# ---
+# ```
+#
+# - The direct solver used by the forward simulation requires a matrix factorization for each unique time step width. Whenever possible, reuse time step intervals to reduce memory requirements.
+#
+#
+# ```{figure} ./images/atem/time_spacing.png
+# ---
+# scale: 50%
+# name: atem_forward
+# ---
+# ```
+
+# ## Mesh creation
+#
+# In preparation for the inversion, we create an octree mesh optimized for the airborne TEM survey. The mesh parameters are base on the original Flin Flon model.
+#
+# ```{figure} ./images/atem/atem_core.png
+# ---
+# scale: 50%
+# name: atem_core
+# ---
+# Core mesh parameters.
+# ```
+#
+# Note that the padding distances are set substantially further than for the magnetics, gravity or dc-resistivity (1 km) inversions. This is because the [diffusion distance](diffusion-distance) for a background resistivity of $1000 \; \Omega .m$ for the last time channel (10 msec) is roughly 3.3 km. This distance is important to satisfy the [boundary conditions](https://em.geosci.xyz/content/maxwell1_fundamentals/solving_maxwells_equations.html?highlight=boundary%20conditions#boundary-and-initial-conditions) of the underlying differential equations.
+#
+#
+# ### Refinements
+#
+# - For the first refinement, we insert 4 cells for the first three octree levels along the flight path. The refinement is done radially around the segments of the flight path curve to assure good numerical accuracy near the receiver locations. This is especially important for EM methods with low frequencies.
+#
+# - We use a second refinement along topography to get a coarse but continuous air-ground interface outside the area or interest.
+#
+# - Lastly, we refine a "horizon" to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influenced by the data.
+#
+# ```{figure} ./images/atem/atem_refinement.png
+# ---
+# scale: 50%
+# name: atem_refinement
+# ---
+# Refinement strategy used for the atem modeling.
+# ```
+#
+# See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.
+
+
+# ### Forward simulation
+#
+# Having defined the TEM survey, we can proceed with the forward simulation using the conductivity Flin Flon model.
+#
+# ```{figure} ./images/atem/atem_data.png
+# ---
+# scale: 50%
+# ---
+# (Top) ATEM $\frac{\delta B_z}{\delta t}$ data displayed by the 2D Profiler at all 5 time channels. (Bottom) Survey lines relative to (left) the ore body and (right) the discrete conductivity model.
+# ```
+#
+# Note that the position of the known conductor correlates with large amplitude in the ATEM data .
+#
+#
+
+# ## Unconstrained inversion
+#
+# **Runtime: ~2.0 h**
+#
+# Time-domain EM data involves data measured over a wide range of time channels that decays over several orders of magnitude. Balancing all this data can be challenging and time consuming. Here we adopt a percentage and floor uncertainty strategy.
+#
+# ```{figure} ./images/atem/atem_uncerts.png
+# ---
+# scale: 50%
+# name: atem_uncerts
+# ---
+# ```
+#
+# This approach is a good starting point, but experimentation is generally required.
+#
+# After running the inversion we recover the following solution:
+#
+#
+# ```{figure} ./images/atem/atem_unconstrained.png
+# ---
+# name: atem_unconstrained
+# ---
+# (Left) Horizontal section at 120 m elevation after reaching target misfit (iteration 5).
+#
+# (Right)(top) 2D profiles of (red) observed versus (black) predicted data for all 5 time channels. (bottom) Vertical section through the conductivity model below the same line.
+# ```
+#
+# Despite our simplistic floor uncertainties, the inversion managed to converge fairly quickly to a reasonable model that fits our data well. We have recovered a clear conductor at depth that overlaps with the ore body. The inversion could resolve the conductive overburden layer, although the thickness is overestimated.
diff --git a/docs/case_study/background.ipynb b/docs/case_study/background.ipynb
index 886e2590..6de05e50 100644
--- a/docs/case_study/background.ipynb
+++ b/docs/case_study/background.ipynb
@@ -2,36 +2,40 @@
"cells": [
{
"cell_type": "markdown",
- "id": "ed54d1db",
+ "id": "194d2401",
"metadata": {},
"source": [
"\n",
"\n",
- "# Background\n",
+ "# Introduction\n",
"\n",
- "The processing and inversion work focuses on ground and airborne datasets simulated over the Flin Flon model. Extensive drilling has been done over the deposit, as shown in [Figure 2](global_map).\n",
"\n",
- "```{figure} ./images/map_flinflon.png\n",
+ "This tutorial on geophysical inversion is framed around a well-known copper-zinc VMS deposit - the Flin Flon mine in northern Manitoba, Canada. Our goal is to provide a step-by-step process to invert data from various geophysical methods and to test their resolving capabilities within a semi-realistic exploration context.\n",
+ "\n",
+ "```{figure} ./images/setup_flinflon.png\n",
"---\n",
"height: 400px\n",
- "name: global_map\n",
+ "name: setup_flinflon\n",
"---\n",
- "Geological map and drillholes of the Flin Flon deposit. Outline of the main ore body (red) is shown for reference.\n",
+ "Discrete geological and physical properties for the simplified [Flin Flon model](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/inversion_demo.geoh5).\n",
+ "\n",
"```\n",
"\n",
- "The synthetic block model was generated from open-source data made available by [Natural Resources Canada (NRCan)](https://ostrnrcan-dostrncan.canada.ca/entities/publication/73d767d8-ee1c-4bab-a2da-52dcf83faa06). The VMS deposit is hosted in rhyolite unit as indicated by yellow voxels [Figure 3](ore_body).\n",
+ "The local geology of Flin Flon consists mainly of basalt and mafic volcanic formations (green and blue), with discrete occurrences of rhyolite units (yellow) that host the mineralization as shown in [Figure 6](setup_flinflon).\n",
+ "The entire region was later deformed by large tectonic events that over-thrusted, folded and faulted the stratigraphy into its current form. The mineralization occurs along thin lenses dipping steeply towards the South-East.\n",
"\n",
- "```{figure} ./images/ore_body.png\n",
+ "The area has been studied extensively over the years, yielding large amount of petrophysical data made available by [Natural Resources Canada (NRCan)](https://ostrnrcan-dostrncan.canada.ca/entities/publication/73d767d8-ee1c-4bab-a2da-52dcf83faa06), as shown in [Figure 7](global_map).\n",
+ "\n",
+ "```{figure} ./images/map_flinflon.png\n",
"---\n",
"height: 400px\n",
- "name: ore_body\n",
+ "name: global_map\n",
"---\n",
- "Discrete geological model of the ore deposit and host units.\n",
+ "Geological map and drillholes of the Flin Flon deposit. Outline of the main ore body (red) is shown for reference.\n",
"```\n",
"\n",
- " [Table 1](phys_prop) summarizes the relative physical properties of the main rock units in the area.\n",
- "The VMS ore is expected to be more conductive, dense and magnetic than host rhyolite unit. The background mafic rocks are generally non-magnetic and have moderate densities and resistivities. A thick (40 m) overburden layer of relatively low density and low resistivity covers the survey area.\n",
- "\n",
+ "[Table 1](phys_prop) summarizes the physical property contrasts of the main rock units in the area.\n",
+ "The mineralization is expected to be much more conductive, dense and magnetic than the host rhyolite unit. The background mafic rocks are generally non-magnetic and moderately dense and resistive. We omitted all late-stage intrusives from the modeling for simplicity.\n",
"\n",
"```{table} Summary of expected physical properties\n",
":name: phys_prop\n",
@@ -43,10 +47,22 @@
"| Mafic Dykes | moderate | low | moderate |\n",
"| Host Mafic | moderate | low | moderate |\n",
"| Basalt | moderate | moderate | low |\n",
- "| Ore | high | high | low |\n",
+ "| Ore | high | high | very low |\n",
"| Overburden | low | low | moderate |\n",
"| Tailings | low | low | low |\n",
- "```"
+ "\n",
+ "```\n",
+ "\n",
+ "From this simplified (conceptual) model of Flin Flon, we created a 3D petrophysical model around the mineralization [Figure 8](ore_body). We added a thick (40 m) overburden layer (tailings) of relatively low density and low resistivity to test the depth of penetration of the various survey types.\n",
+ "```{figure} ./images/ore_body.png\n",
+ "---\n",
+ "height: 400px\n",
+ "name: ore_body\n",
+ "---\n",
+ "Discrete geological and physical properties for the simplified [Flin Flon model](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/inversion_demo.geoh5).\n",
+ "```\n",
+ "\n",
+ "This model was used to generate all the synthetic data used in this tutorial.\n"
]
}
],
diff --git a/docs/case_study/background.py b/docs/case_study/background.py
index 9f6507bd..873e3fa9 100644
--- a/docs/case_study/background.py
+++ b/docs/case_study/background.py
@@ -5,7 +5,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
@@ -14,31 +14,35 @@
#
#
-# # Background
+# # Introduction
#
-# The processing and inversion work focuses on ground and airborne datasets simulated over the Flin Flon model. Extensive drilling has been done over the deposit, as shown in [Figure 2](global_map).
#
-# ```{figure} ./images/map_flinflon.png
+# This tutorial on geophysical inversion is framed around a well-known copper-zinc VMS deposit - the Flin Flon mine in northern Manitoba, Canada. Our goal is to provide a step-by-step process to invert data from various geophysical methods and to test their resolving capabilities within a semi-realistic exploration context.
+#
+# ```{figure} ./images/setup_flinflon.png
# ---
# height: 400px
-# name: global_map
+# name: setup_flinflon
# ---
-# Geological map and drillholes of the Flin Flon deposit. Outline of the main ore body (red) is shown for reference.
+# Discrete geological and physical properties for the simplified [Flin Flon model](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/inversion_demo.geoh5).
+#
# ```
#
-# The synthetic block model was generated from open-source data made available by [Natural Resources Canada (NRCan)](https://ostrnrcan-dostrncan.canada.ca/entities/publication/73d767d8-ee1c-4bab-a2da-52dcf83faa06). The VMS deposit is hosted in rhyolite unit as indicated by yellow voxels [Figure 3](ore_body).
+# The local geology of Flin Flon consists mainly of basalt and mafic volcanic formations (green and blue), with discrete occurrences of rhyolite units (yellow) that host the mineralization as shown in [Figure 6](setup_flinflon).
+# The entire region was later deformed by large tectonic events that over-thrusted, folded and faulted the stratigraphy into its current form. The mineralization occurs along thin lenses dipping steeply towards the South-East.
#
-# ```{figure} ./images/ore_body.png
+# The area has been studied extensively over the years, yielding large amount of petrophysical data made available by [Natural Resources Canada (NRCan)](https://ostrnrcan-dostrncan.canada.ca/entities/publication/73d767d8-ee1c-4bab-a2da-52dcf83faa06), as shown in [Figure 7](global_map).
+#
+# ```{figure} ./images/map_flinflon.png
# ---
# height: 400px
-# name: ore_body
+# name: global_map
# ---
-# Discrete geological model of the ore deposit and host units.
+# Geological map and drillholes of the Flin Flon deposit. Outline of the main ore body (red) is shown for reference.
# ```
#
-# [Table 1](phys_prop) summarizes the relative physical properties of the main rock units in the area.
-# The VMS ore is expected to be more conductive, dense and magnetic than host rhyolite unit. The background mafic rocks are generally non-magnetic and have moderate densities and resistivities. A thick (40 m) overburden layer of relatively low density and low resistivity covers the survey area.
-#
+# [Table 1](phys_prop) summarizes the physical property contrasts of the main rock units in the area.
+# The mineralization is expected to be much more conductive, dense and magnetic than the host rhyolite unit. The background mafic rocks are generally non-magnetic and moderately dense and resistive. We omitted all late-stage intrusives from the modeling for simplicity.
#
# ```{table} Summary of expected physical properties
# :name: phys_prop
@@ -50,7 +54,20 @@
# | Mafic Dykes | moderate | low | moderate |
# | Host Mafic | moderate | low | moderate |
# | Basalt | moderate | moderate | low |
-# | Ore | high | high | low |
+# | Ore | high | high | very low |
# | Overburden | low | low | moderate |
# | Tailings | low | low | low |
+#
# ```
+#
+# From this simplified (conceptual) model of Flin Flon, we created a 3D petrophysical model around the mineralization [Figure 8](ore_body). We added a thick (40 m) overburden layer (tailings) of relatively low density and low resistivity to test the depth of penetration of the various survey types.
+# ```{figure} ./images/ore_body.png
+# ---
+# height: 400px
+# name: ore_body
+# ---
+# Discrete geological and physical properties for the simplified [Flin Flon model](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/inversion_demo.geoh5).
+# ```
+#
+# This model was used to generate all the synthetic data used in this tutorial.
+#
diff --git a/docs/case_study/data.ipynb b/docs/case_study/data.ipynb
deleted file mode 100644
index f61b9da2..00000000
--- a/docs/case_study/data.ipynb
+++ /dev/null
@@ -1,137 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "39c48a45",
- "metadata": {},
- "source": [
- "\n",
- "\n",
- "# Data\n",
- "\n",
- "This section provides details about the three datasets simulated for this tutorial:\n",
- "\n",
- "- [Direct-current resistivity (DCR)](dc-data)\n",
- "- [Magnetic total field (HeliTEM)](magnetic-data)\n",
- "- [Airborne full-tensor gravity gradiometry (FTG)](ftg-data)\n",
- "\n",
- "\n",
- "```{figure} ./images/project_area.png\n",
- "---\n",
- "scale: 50%\n",
- "name: project_area\n",
- "---\n",
- "Data coverage for the ground gravity (black), airborne gravity gradiometry (red), airborne magnetics (green) and direct-current (blue) surveys. Outline of the ore shell (gray) is shown for reference.\n",
- "```\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "0e28c183",
- "metadata": {},
- "source": [
- "(dc-data)=\n",
- "\n",
- "## Direct-current resistivity (DCR)\n",
- "\n",
- "A ground dipole-dipole survey was simulated over the main ore body. The survey was acquired with 40 m dipole length, data measured on seven receivers per transmitter dipole. Line separation was set to 100 m ([Figure 5](dc_topo)).\n",
- "\n",
- "```{figure} ./images/DCR_data.png\n",
- "---\n",
- "scale: 50%\n",
- "name: dc_topo\n",
- "---\n",
- "Pseudo-sections of apparent resisitvity and topography from the SRTM elevation model.\n",
- "```\n",
- "\n",
- "Note the large contrast in apparent resistivity between the western and eastern regions of the survey. This can be explained by a conductive tailing layer West of the deposit.\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "38397ecb",
- "metadata": {},
- "source": [
- "(magnetic-data)=\n",
- "\n",
- "## Airborne magnetic survey (TMI)\n",
- "\n",
- "We simulated Residual Magnetic Intensity (RMI) data along East-West lines at a 40 m drape height above topography. The line spacing was set to 200 m, with along-line data downsampled to 10 m.\n",
- "\n",
- "The following inducing field parameters were used for the forward simulation:\n",
- "\n",
- "| Intensity | Declination | Inclination |\n",
- "| :--- | :--- | :---- |\n",
- "| $60000$ nT | $11^\\circ$ | $79^\\circ$ |\n",
- "\n",
- "\n",
- "```{figure} ./images/MAG_data.png\n",
- "---\n",
- "scale: 50%\n",
- "name: mag_data\n",
- "---\n",
- "Residual magnetic intensity (RMI) data measured over the zone of interest.\n",
- "```\n",
- "\n",
- "We can notice a strong correlation between the RMI data and the horizontal position of the ore body.\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "38687f97",
- "metadata": {},
- "source": [
- "(ftg-data)=\n",
- "\n",
- "## Airborne tensor gravity gradiometry (FTG)\n",
- "\n",
- "An airborne fixed-wing full-tensor gravity gradiometry (FTG) survey was simulated at a nominal drape height of 60 m above topography.\n",
- "\n",
- "The FTG system measures six independent components of the gradient tensor: $g_{xx},\\; g_{xy},\\; g_{xz},\\; g_{yy},\\; g_{yz}$ and $g_{zz}$. Data were leveled, free-air and terrain corrected with 2.67 g/cc reference density.\n",
- "\n",
- "\n",
- "```{figure} ./images/GG_data.png\n",
- "---\n",
- "scale: 50%\n",
- "name: ftg_data\n",
- "---\n",
- "(Top) Components of the gravity gradiometry data measured over the zone of interest. (Bottom) The green and red marker indicate the flight direction.\n",
- "```\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "68137185",
- "metadata": {},
- "source": [
- "## Ground gravity survey\n",
- "\n",
- "A ground gravity survey was simulated on sparsely sampled 200 m grid of stations. The data are provided a terrain corrected with\n",
- "reference density of 2.67 g/cc.\n",
- "\n",
- "```{figure} ./images/GZ_data.png\n",
- "---\n",
- "scale: 50%\n",
- "name: gz_data\n",
- "---\n",
- "Vertical component of the gravity field (gz) measured over the zone of interest.\n",
- "```\n"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/docs/case_study/data.py b/docs/case_study/data.py
deleted file mode 100644
index f38d3b50..00000000
--- a/docs/case_study/data.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# ---
-# jupyter:
-# jupytext:
-# text_representation:
-# extension: .py
-# format_name: light
-# format_version: '1.5'
-# jupytext_version: 1.16.1
-# kernelspec:
-# display_name: Python 3 (ipykernel)
-# language: python
-# name: python3
-# ---
-
-#
-#
-# # Data
-#
-# This section provides details about the three datasets simulated for this tutorial:
-#
-# - [Direct-current resistivity (DCR)](dc-data)
-# - [Magnetic total field (HeliTEM)](magnetic-data)
-# - [Airborne full-tensor gravity gradiometry (FTG)](ftg-data)
-#
-#
-# ```{figure} ./images/project_area.png
-# ---
-# scale: 50%
-# name: project_area
-# ---
-# Data coverage for the ground gravity (black), airborne gravity gradiometry (red), airborne magnetics (green) and direct-current (blue) surveys. Outline of the ore shell (gray) is shown for reference.
-# ```
-#
-#
-
-# (dc-data)=
-#
-# ## Direct-current resistivity (DCR)
-#
-# A ground dipole-dipole survey was simulated over the main ore body. The survey was acquired with 40 m dipole length, data measured on seven receivers per transmitter dipole. Line separation was set to 100 m ([Figure 5](dc_topo)).
-#
-# ```{figure} ./images/DCR_data.png
-# ---
-# scale: 50%
-# name: dc_topo
-# ---
-# Pseudo-sections of apparent resisitvity and topography from the SRTM elevation model.
-# ```
-#
-# Note the large contrast in apparent resistivity between the western and eastern regions of the survey. This can be explained by a conductive tailing layer West of the deposit.
-#
-#
-
-# (magnetic-data)=
-#
-# ## Airborne magnetic survey (TMI)
-#
-# We simulated Residual Magnetic Intensity (RMI) data along East-West lines at a 40 m drape height above topography. The line spacing was set to 200 m, with along-line data downsampled to 10 m.
-#
-# The following inducing field parameters were used for the forward simulation:
-#
-# | Intensity | Declination | Inclination |
-# | :--- | :--- | :---- |
-# | $60000$ nT | $11^\circ$ | $79^\circ$ |
-#
-#
-# ```{figure} ./images/MAG_data.png
-# ---
-# scale: 50%
-# name: mag_data
-# ---
-# Residual magnetic intensity (RMI) data measured over the zone of interest.
-# ```
-#
-# We can notice a strong correlation between the RMI data and the horizontal position of the ore body.
-#
-#
-
-# (ftg-data)=
-#
-# ## Airborne tensor gravity gradiometry (FTG)
-#
-# An airborne fixed-wing full-tensor gravity gradiometry (FTG) survey was simulated at a nominal drape height of 60 m above topography.
-#
-# The FTG system measures six independent components of the gradient tensor: $g_{xx},\; g_{xy},\; g_{xz},\; g_{yy},\; g_{yz}$ and $g_{zz}$. Data were leveled, free-air and terrain corrected with 2.67 g/cc reference density.
-#
-#
-# ```{figure} ./images/GG_data.png
-# ---
-# scale: 50%
-# name: ftg_data
-# ---
-# (Top) Components of the gravity gradiometry data measured over the zone of interest. (Bottom) The green and red marker indicate the flight direction.
-# ```
-#
-
-# ## Ground gravity survey
-#
-# A ground gravity survey was simulated on sparsely sampled 200 m grid of stations. The data are provided a terrain corrected with
-# reference density of 2.67 g/cc.
-#
-# ```{figure} ./images/GZ_data.png
-# ---
-# scale: 50%
-# name: gz_data
-# ---
-# Vertical component of the gravity field (gz) measured over the zone of interest.
-# ```
-#
diff --git a/docs/case_study/dc_resistivity.ipynb b/docs/case_study/dc_resistivity.ipynb
new file mode 100644
index 00000000..87b54c4a
--- /dev/null
+++ b/docs/case_study/dc_resistivity.ipynb
@@ -0,0 +1,166 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "6aac3c0c",
+ "metadata": {},
+ "source": [
+ "\n",
+ "\n",
+ "# Direct-current (DC) Resistivity Inversion\n",
+ "\n",
+ "\n",
+ "This section focuses on the inversion of direct-current (DC) resistivity data generated from the Flin Flon resistivity model.\n",
+ "\n",
+ "```{figure} ./images/dc/dc_model.png\n",
+ "---\n",
+ "scale: 25%\n",
+ "\n",
+ "name: dc_model\n",
+ "---\n",
+ "[Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)\n",
+ "```\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "845f344c",
+ "metadata": {},
+ "source": [
+ "(dc-data)=\n",
+ "\n",
+ "## Data\n",
+ "\n",
+ "A ground dipole-dipole survey was simulated over the main ore body. The survey was acquired with 40 m dipole length, data measured on seven receivers per transmitter dipole. Line separation was set to 100 m ([Figure 5](dc_topo)).\n",
+ "\n",
+ "The following parameters were used for the forward simulation:\n",
+ "\n",
+ "```{figure} ./images/dc/dc_forward.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: dc_forward\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "Note the large contrast in apparent resistivity near surface between the western and eastern regions of the survey. This can be explained by a conductive alluvium layer West of the deposit. Lower apparent resistivities are also measured on the longer offsets over the ore body, hinting at a buried conductor.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/dc/dc_data.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: dc_data\n",
+ "---\n",
+ "Pseudo-sections of apparent resisitvity. Ore shell is shown in reference.\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6a0d1c0d",
+ "metadata": {},
+ "source": [
+ "## Mesh creation\n",
+ "\n",
+ "In preparation for the inversion, we create an octree mesh optimized for the DC resistivity survey. The survey is made of two objects: a `Currents` (sources) and a `Potentials` (receivers). In order to have good discretization around all pole locations, we first need to create an object that includes both components.\n",
+ "\n",
+ "```{figure} ./images/dc/dc_poles.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: dc_poles\n",
+ "```\n",
+ "\n",
+ "In the case of electric methods, the finest cell dimension should be at least half the dipole separation to guarantee that no two poles fall within the same mesh cell. This is important to assure good accuracy when computing voltage differences.\n",
+ "We define our core param are as follow:\n",
+ "\n",
+ "```{figure} ./images/dc/dc_core.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: dc_core\n",
+ "---\n",
+ "Core mesh parameters.\n",
+ "```\n",
+ "\n",
+ "### Refinements\n",
+ "\n",
+ "- The first refinement adds more cells around each pole location, radially outward. This assures good numerical accuracy, espatially on the outer boundary of the survey area.\n",
+ "\n",
+ "- A second refinement is used along topography to get a coarse but continuous air-ground interface outside the area or interest.\n",
+ "\n",
+ "- The third refinement \"horizon\" is used to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influence by the data. We use a maximum distance of 100 m to limit the refinement away from the survey lines. In the case of remote electrodes, this parameter prevents from discretization finely everywhere in between.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/dc/dc_refinement.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: dc_refinement\n",
+ "---\n",
+ "Refinement strategy used for the direct-current modeling.\n",
+ "```\n",
+ "\n",
+ "See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c419f35c",
+ "metadata": {},
+ "source": [
+ "## Unconstrained Inversion\n",
+ "\n",
+ "The direct-current data are inverted with uncertainties assigned based on a background resistivity value, then converted to potentials. This strategy is effective in scaling uncertainties relative to the dipole offsets.\n",
+ "\n",
+ "1 - Create a constant resistivity value, set empirically in this case to 100 Ohm.m\n",
+ "\n",
+ "```{figure} ./images/dc/dc_floor_res.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "2- Convert the \"floor resistivity\" to voltages. The result needs to be absolute valued in order to be assigned as data uncertainties.\n",
+ "\n",
+ "```{figure} ./images/dc/dc_floor_voltage.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "Having defined our uncertainties, we can proceed with the inversion.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/dc/dc_input.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "The following figure shows the data fit and models recovered after convergence.\n",
+ "\n",
+ "```{figure} ./images/dc/dc_no_ref.png\n",
+ "---\n",
+ "name: dc_no_ref.png\n",
+ "---\n",
+ "(Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 11).\n",
+ "\n",
+ "(Bottom) Slices through the recovered conductivity model: (left) at 175 m elevation and (right) at 6072150 m N.\n",
+ "```\n",
+ "The data is generally explained well, although some correlated residuals are visible. This could warrant a second run with a slightly lower target `Chi factor` to push the data fit further.\n",
+ "\n",
+ "On the modelling side, we note a large conductivity anomaly correlated with the ore body. The survey is able to define well the depth to top of the conductor but not the vertical extent. The inversion did identify the near-surface layers related to the conductive alluvium layer (West), which is slightly more conductive than the overburden layer (East).\n",
+ "\n",
+ ""
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/case_study/dc_resistivity.py b/docs/case_study/dc_resistivity.py
new file mode 100644
index 00000000..ff712ca3
--- /dev/null
+++ b/docs/case_study/dc_resistivity.py
@@ -0,0 +1,143 @@
+# ---
+# jupyter:
+# jupytext:
+# text_representation:
+# extension: .py
+# format_name: light
+# format_version: '1.5'
+# jupytext_version: 1.16.2
+# kernelspec:
+# display_name: Python 3 (ipykernel)
+# language: python
+# name: python3
+# ---
+
+#
+#
+# # Direct-current (DC) Resistivity Inversion
+#
+#
+# This section focuses on the inversion of direct-current (DC) resistivity data generated from the Flin Flon resistivity model.
+#
+# ```{figure} ./images/dc/dc_model.png
+# ---
+# scale: 25%
+#
+# name: dc_model
+# ---
+# [Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)
+# ```
+#
+#
+
+# (dc-data)=
+#
+# ## Data
+#
+# A ground dipole-dipole survey was simulated over the main ore body. The survey was acquired with 40 m dipole length, data measured on seven receivers per transmitter dipole. Line separation was set to 100 m ([Figure 5](dc_topo)).
+#
+# The following parameters were used for the forward simulation:
+#
+# ```{figure} ./images/dc/dc_forward.png
+# ---
+# scale: 50%
+# name: dc_forward
+# ---
+# ```
+#
+# Note the large contrast in apparent resistivity near surface between the western and eastern regions of the survey. This can be explained by a conductive alluvium layer West of the deposit. Lower apparent resistivities are also measured on the longer offsets over the ore body, hinting at a buried conductor.
+#
+#
+# ```{figure} ./images/dc/dc_data.png
+# ---
+# scale: 50%
+# name: dc_data
+# ---
+# Pseudo-sections of apparent resisitvity. Ore shell is shown in reference.
+# ```
+
+# ## Mesh creation
+#
+# In preparation for the inversion, we create an octree mesh optimized for the DC resistivity survey. The survey is made of two objects: a `Currents` (sources) and a `Potentials` (receivers). In order to have good discretization around all pole locations, we first need to create an object that includes both components.
+#
+# ```{figure} ./images/dc/dc_poles.png
+# ---
+# scale: 50%
+# name: dc_poles
+# ```
+#
+# In the case of electric methods, the finest cell dimension should be at least half the dipole separation to guarantee that no two poles fall within the same mesh cell. This is important to assure good accuracy when computing voltage differences.
+# We define our core param are as follow:
+#
+# ```{figure} ./images/dc/dc_core.png
+# ---
+# scale: 50%
+# name: dc_core
+# ---
+# Core mesh parameters.
+# ```
+#
+# ### Refinements
+#
+# - The first refinement adds more cells around each pole location, radially outward. This assures good numerical accuracy, espatially on the outer boundary of the survey area.
+#
+# - A second refinement is used along topography to get a coarse but continuous air-ground interface outside the area or interest.
+#
+# - The third refinement "horizon" is used to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influence by the data. We use a maximum distance of 100 m to limit the refinement away from the survey lines. In the case of remote electrodes, this parameter prevents from discretization finely everywhere in between.
+#
+#
+# ```{figure} ./images/dc/dc_refinement.png
+# ---
+# scale: 50%
+# name: dc_refinement
+# ---
+# Refinement strategy used for the direct-current modeling.
+# ```
+#
+# See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.
+#
+
+# ## Unconstrained Inversion
+#
+# The direct-current data are inverted with uncertainties assigned based on a background resistivity value, then converted to potentials. This strategy is effective in scaling uncertainties relative to the dipole offsets.
+#
+# 1 - Create a constant resistivity value, set empirically in this case to 100 Ohm.m
+#
+# ```{figure} ./images/dc/dc_floor_res.png
+# ---
+# scale: 50%
+# ---
+# ```
+#
+# 2- Convert the "floor resistivity" to voltages. The result needs to be absolute valued in order to be assigned as data uncertainties.
+#
+# ```{figure} ./images/dc/dc_floor_voltage.png
+# ---
+# scale: 50%
+# ---
+# ```
+#
+# Having defined our uncertainties, we can proceed with the inversion.
+#
+#
+# ```{figure} ./images/dc/dc_input.png
+# ---
+# scale: 50%
+# ---
+# ```
+#
+# The following figure shows the data fit and models recovered after convergence.
+#
+# ```{figure} ./images/dc/dc_no_ref.png
+# ---
+# name: dc_no_ref.png
+# ---
+# (Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 11).
+#
+# (Bottom) Slices through the recovered conductivity model: (left) at 175 m elevation and (right) at 6072150 m N.
+# ```
+# The data is generally explained well, although some correlated residuals are visible. This could warrant a second run with a slightly lower target `Chi factor` to push the data fit further.
+#
+# On the modelling side, we note a large conductivity anomaly correlated with the ore body. The survey is able to define well the depth to top of the conductor but not the vertical extent. The inversion did identify the near-surface layers related to the conductive alluvium layer (West), which is slightly more conductive than the overburden layer (East).
+#
+#
diff --git a/docs/case_study/gravity.ipynb b/docs/case_study/gravity.ipynb
new file mode 100644
index 00000000..fee7d79f
--- /dev/null
+++ b/docs/case_study/gravity.ipynb
@@ -0,0 +1,202 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "bdf3d5d2",
+ "metadata": {},
+ "source": [
+ "\n",
+ "\n",
+ "# Gravity Inversion\n",
+ "\n",
+ "This section focuses on the inversion of airborne tensor and ground gravity data generated from the Flin Flon density model.\n",
+ "\n",
+ "```{figure} ./images/gravity/grav_model.png\n",
+ "---\n",
+ "scale: 25%\n",
+ "name: grav_model\n",
+ "---\n",
+ "[Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)\n",
+ "```\n",
+ "\n",
+ "\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8e2881a0",
+ "metadata": {},
+ "source": [
+ "## Forward simulation\n",
+ "\n",
+ "A ground gravity survey was simulated on sparsely sampled 200 m grid of stations.\n",
+ "\n",
+ "The following parameters were used for the forward simulation:\n",
+ "\n",
+ "```{figure} ./images/gravity/grav_forward.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: grav_forward\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "After running the forward simulation, we obtain gravity corrected data as shown below. The gravity survey appears to be mostly influenced by the large formations, with little signal apparent from the ore body. Since we have used relative densities, the simulated data is equivalent to a terrain correction with reference density, of 2.67 g/cc in this case.\n",
+ "\n",
+ "```{figure} ./images/gravity/gz_data.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: gz_data\n",
+ "---\n",
+ "Vertical component of the gravity field (gz) measured over the zone of interest.\n",
+ "```\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3a04308",
+ "metadata": {},
+ "source": [
+ "## Mesh creation\n",
+ "\n",
+ "In preparation for the inversion, we create an octree mesh optimized for the gravity survey.\n",
+ "\n",
+ "The core param are as follow:\n",
+ "\n",
+ "```{figure} ./images/magnetics/mesh_core.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_core\n",
+ "---\n",
+ "Core mesh parameters.\n",
+ "```\n",
+ "\n",
+ "### Refinements\n",
+ "\n",
+ "- The first refinement \"horizon\" is used to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influence by the data. We use a maximum distance of 100 m to limit the refinement near each station.\n",
+ "\n",
+ "- A second refinement is used along topography to get a coarse but continuous air-ground interface outside the area or interest.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/magnetics/mesh_refinement.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_refinement\n",
+ "---\n",
+ "Refinement strategy used for the magnetic modeling.\n",
+ "```\n",
+ "\n",
+ "See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "47ba8fb2",
+ "metadata": {},
+ "source": [
+ "## Ground gravity\n",
+ "\n",
+ "The ground gravity data are assigned a constant floor uncertainty value of 0.1 mGal. We apply the the following inversion parameters:\n",
+ "\n",
+ "```{figure} ./images/gravity/gz_input.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: gz_input\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "After running the inversion we obtain:\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/gravity/gz_no_ref.png\n",
+ "---\n",
+ "name: gz_no_ref\n",
+ "\n",
+ "---\n",
+ "(Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 5).\n",
+ "\n",
+ "(Bottom) Slices through the recovered relative density model: (left) at 175 m elevation and (right) at 6072150 m N.\n",
+ "Ore shell is shown for reference.\n",
+ "```\n",
+ "\n",
+ "Notice that the inversion resolves the boundaries between the rhyolite unit and host mafic units, but poorly recovers the ore body. That is, the ore body does not generate a gravity anomaly strong enough within the host geology to be detected by the ground gravity survey."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f96511f7",
+ "metadata": {},
+ "source": [
+ "(ftg-data)=\n",
+ "\n",
+ "## Tensor gravity gradiometry (FTG)\n",
+ "\n",
+ "We now look at the airborne fixed-wing full-tensor gravity gradiometry (FTG) data. The FTG system measures six independent components of the gradient tensor: $g_{xx},\\; g_{xy},\\; g_{xz},\\; g_{yy},\\; g_{yz}$ and $g_{zz}$. We generate a survey flown at 45 degree azimuth, 200 m line spacing, at a nominal drape height of 60 m above topography.\n",
+ "\n",
+ "Using the same relative density model as previously, we run the forward simulation and obtain terrain-corrected data show below.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/gravity/gg_data.png\n",
+ "---\n",
+ "name: gg_data\n",
+ "\n",
+ "---\n",
+ "(Top) Components of the gravity gradiometry data measured over the zone of interest. (Bottom) Plan view of the density model and flight lines. The green and red marker indicate the flight direction.\n",
+ "```\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dd15a36f",
+ "metadata": {},
+ "source": [
+ "## Unconstrained FTG\n",
+ "\n",
+ "We repeat the same inverse process as for the ground gravity data, but this time with the airborne survey. A floor uncertainty value of 0.1 Eotvos was assigned to all the components. After running the inversion with obtain.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/gravity/gg_no_ref.png\n",
+ "---\n",
+ "name: gg_no_ref\n",
+ "\n",
+ "---\n",
+ "(Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 7).\n",
+ "\n",
+ "(Bottom) Slices through the recovered relative density model: (left) at 175 m elevation and (right) at 6072150 m N.\n",
+ "Ore shell is shown for reference.\n",
+ "```\n",
+ "\n",
+ "Just like the ground gravity result, the airborne inversion recovers well the boundary between the rhyolite and host mafic rocks. The ore body is also imaged on the top 200 m. In addition, we recover density structures within the Hidden Formation related to the overburden layer.\n",
+ "\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f0445a40",
+ "metadata": {},
+ "source": [
+ "## Detrending\n",
+ "\n",
+ "Section to explain different strategies for regional signal removal\n",
+ "\n",
+ "- Polynomial\n",
+ "\n",
+ "\n",
+ "- Scooping method"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/case_study/gravity.py b/docs/case_study/gravity.py
new file mode 100644
index 00000000..8a7f9766
--- /dev/null
+++ b/docs/case_study/gravity.py
@@ -0,0 +1,163 @@
+# ---
+# jupyter:
+# jupytext:
+# text_representation:
+# extension: .py
+# format_name: light
+# format_version: '1.5'
+# jupytext_version: 1.16.2
+# kernelspec:
+# display_name: Python 3 (ipykernel)
+# language: python
+# name: python3
+# ---
+
+#
+#
+# # Gravity Inversion
+#
+# This section focuses on the inversion of airborne tensor and ground gravity data generated from the Flin Flon density model.
+#
+# ```{figure} ./images/gravity/grav_model.png
+# ---
+# scale: 25%
+# name: grav_model
+# ---
+# [Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)
+# ```
+#
+#
+#
+#
+
+# ## Forward simulation
+#
+# A ground gravity survey was simulated on sparsely sampled 200 m grid of stations.
+#
+# The following parameters were used for the forward simulation:
+#
+# ```{figure} ./images/gravity/grav_forward.png
+# ---
+# scale: 50%
+# name: grav_forward
+# ---
+# ```
+#
+# After running the forward simulation, we obtain gravity corrected data as shown below. The gravity survey appears to be mostly influenced by the large formations, with little signal apparent from the ore body. Since we have used relative densities, the simulated data is equivalent to a terrain correction with reference density, of 2.67 g/cc in this case.
+#
+# ```{figure} ./images/gravity/gz_data.png
+# ---
+# scale: 50%
+# name: gz_data
+# ---
+# Vertical component of the gravity field (gz) measured over the zone of interest.
+# ```
+#
+
+# ## Mesh creation
+#
+# In preparation for the inversion, we create an octree mesh optimized for the gravity survey.
+#
+# The core param are as follow:
+#
+# ```{figure} ./images/magnetics/mesh_core.png
+# ---
+# scale: 50%
+# name: mag_core
+# ---
+# Core mesh parameters.
+# ```
+#
+# ### Refinements
+#
+# - The first refinement "horizon" is used to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influence by the data. We use a maximum distance of 100 m to limit the refinement near each station.
+#
+# - A second refinement is used along topography to get a coarse but continuous air-ground interface outside the area or interest.
+#
+#
+# ```{figure} ./images/magnetics/mesh_refinement.png
+# ---
+# scale: 50%
+# name: mag_refinement
+# ---
+# Refinement strategy used for the magnetic modeling.
+# ```
+#
+# See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.
+#
+
+# ## Ground gravity
+#
+# The ground gravity data are assigned a constant floor uncertainty value of 0.1 mGal. We apply the the following inversion parameters:
+#
+# ```{figure} ./images/gravity/gz_input.png
+# ---
+# scale: 50%
+# name: gz_input
+# ---
+# ```
+#
+# After running the inversion we obtain:
+#
+#
+# ```{figure} ./images/gravity/gz_no_ref.png
+# ---
+# name: gz_no_ref
+#
+# ---
+# (Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 5).
+#
+# (Bottom) Slices through the recovered relative density model: (left) at 175 m elevation and (right) at 6072150 m N.
+# Ore shell is shown for reference.
+# ```
+#
+# Notice that the inversion resolves the boundaries between the rhyolite unit and host mafic units, but poorly recovers the ore body. That is, the ore body does not generate a gravity anomaly strong enough within the host geology to be detected by the ground gravity survey.
+
+# (ftg-data)=
+#
+# ## Tensor gravity gradiometry (FTG)
+#
+# We now look at the airborne fixed-wing full-tensor gravity gradiometry (FTG) data. The FTG system measures six independent components of the gradient tensor: $g_{xx},\; g_{xy},\; g_{xz},\; g_{yy},\; g_{yz}$ and $g_{zz}$. We generate a survey flown at 45 degree azimuth, 200 m line spacing, at a nominal drape height of 60 m above topography.
+#
+# Using the same relative density model as previously, we run the forward simulation and obtain terrain-corrected data show below.
+#
+#
+# ```{figure} ./images/gravity/gg_data.png
+# ---
+# name: gg_data
+#
+# ---
+# (Top) Components of the gravity gradiometry data measured over the zone of interest. (Bottom) Plan view of the density model and flight lines. The green and red marker indicate the flight direction.
+# ```
+#
+#
+
+# ## Unconstrained FTG
+#
+# We repeat the same inverse process as for the ground gravity data, but this time with the airborne survey. A floor uncertainty value of 0.1 Eotvos was assigned to all the components. After running the inversion with obtain.
+#
+#
+# ```{figure} ./images/gravity/gg_no_ref.png
+# ---
+# name: gg_no_ref
+#
+# ---
+# (Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 7).
+#
+# (Bottom) Slices through the recovered relative density model: (left) at 175 m elevation and (right) at 6072150 m N.
+# Ore shell is shown for reference.
+# ```
+#
+# Just like the ground gravity result, the airborne inversion recovers well the boundary between the rhyolite and host mafic rocks. The ore body is also imaged on the top 200 m. In addition, we recover density structures within the Hidden Formation related to the overburden layer.
+#
+#
+#
+
+# ## Detrending
+#
+# Section to explain different strategies for regional signal removal
+#
+# - Polynomial
+#
+#
+# - Scooping method
diff --git a/docs/case_study/images/DCR_data.png b/docs/case_study/images/DCR_data.png
deleted file mode 100644
index cb82cf84..00000000
Binary files a/docs/case_study/images/DCR_data.png and /dev/null differ
diff --git a/docs/case_study/images/GG_data.png b/docs/case_study/images/GG_data.png
deleted file mode 100644
index c5d1d865..00000000
Binary files a/docs/case_study/images/GG_data.png and /dev/null differ
diff --git a/docs/case_study/images/GZ_data.png b/docs/case_study/images/GZ_data.png
deleted file mode 100644
index 05228fa1..00000000
Binary files a/docs/case_study/images/GZ_data.png and /dev/null differ
diff --git a/docs/case_study/images/MAG_data.png b/docs/case_study/images/MAG_data.png
deleted file mode 100644
index 1fe1a4ba..00000000
Binary files a/docs/case_study/images/MAG_data.png and /dev/null differ
diff --git a/docs/case_study/images/atem/atem_configs.jpg b/docs/case_study/images/atem/atem_configs.jpg
new file mode 100644
index 00000000..57a7b793
Binary files /dev/null and b/docs/case_study/images/atem/atem_configs.jpg differ
diff --git a/docs/case_study/images/atem/atem_core.png b/docs/case_study/images/atem/atem_core.png
new file mode 100644
index 00000000..8649453e
Binary files /dev/null and b/docs/case_study/images/atem/atem_core.png differ
diff --git a/docs/case_study/images/atem/atem_data.png b/docs/case_study/images/atem/atem_data.png
new file mode 100644
index 00000000..14e75e3f
Binary files /dev/null and b/docs/case_study/images/atem/atem_data.png differ
diff --git a/docs/case_study/images/atem/atem_forward.png b/docs/case_study/images/atem/atem_forward.png
new file mode 100644
index 00000000..a0f133e6
Binary files /dev/null and b/docs/case_study/images/atem/atem_forward.png differ
diff --git a/docs/case_study/images/atem/atem_model.png b/docs/case_study/images/atem/atem_model.png
new file mode 100644
index 00000000..9d512a49
Binary files /dev/null and b/docs/case_study/images/atem/atem_model.png differ
diff --git a/docs/case_study/images/atem/atem_optional.png b/docs/case_study/images/atem/atem_optional.png
new file mode 100644
index 00000000..371cd3bc
Binary files /dev/null and b/docs/case_study/images/atem/atem_optional.png differ
diff --git a/docs/case_study/images/atem/atem_refinement.png b/docs/case_study/images/atem/atem_refinement.png
new file mode 100644
index 00000000..fb1f89ad
Binary files /dev/null and b/docs/case_study/images/atem/atem_refinement.png differ
diff --git a/docs/case_study/images/atem/atem_uncerts.png b/docs/case_study/images/atem/atem_uncerts.png
new file mode 100644
index 00000000..e0b9403e
Binary files /dev/null and b/docs/case_study/images/atem/atem_uncerts.png differ
diff --git a/docs/case_study/images/atem/atem_unconstrained.png b/docs/case_study/images/atem/atem_unconstrained.png
new file mode 100644
index 00000000..ce3ff5c2
Binary files /dev/null and b/docs/case_study/images/atem/atem_unconstrained.png differ
diff --git a/docs/case_study/images/atem/time_gates.png b/docs/case_study/images/atem/time_gates.png
new file mode 100644
index 00000000..d81a009f
Binary files /dev/null and b/docs/case_study/images/atem/time_gates.png differ
diff --git a/docs/case_study/images/atem/time_spacing.png b/docs/case_study/images/atem/time_spacing.png
new file mode 100644
index 00000000..f6addfd0
Binary files /dev/null and b/docs/case_study/images/atem/time_spacing.png differ
diff --git a/docs/case_study/images/atem/time_steps.png b/docs/case_study/images/atem/time_steps.png
new file mode 100644
index 00000000..02650335
Binary files /dev/null and b/docs/case_study/images/atem/time_steps.png differ
diff --git a/docs/case_study/images/atem/waveform.png b/docs/case_study/images/atem/waveform.png
new file mode 100644
index 00000000..337d1ba6
Binary files /dev/null and b/docs/case_study/images/atem/waveform.png differ
diff --git a/docs/case_study/images/atem/waveform_discrete.png b/docs/case_study/images/atem/waveform_discrete.png
new file mode 100644
index 00000000..a7e9d3f2
Binary files /dev/null and b/docs/case_study/images/atem/waveform_discrete.png differ
diff --git a/docs/case_study/images/dc/dc_core.png b/docs/case_study/images/dc/dc_core.png
new file mode 100644
index 00000000..e167f250
Binary files /dev/null and b/docs/case_study/images/dc/dc_core.png differ
diff --git a/docs/case_study/images/dc/dc_data.png b/docs/case_study/images/dc/dc_data.png
new file mode 100644
index 00000000..ef236fdf
Binary files /dev/null and b/docs/case_study/images/dc/dc_data.png differ
diff --git a/docs/case_study/images/dc/dc_floor_res.png b/docs/case_study/images/dc/dc_floor_res.png
new file mode 100644
index 00000000..62bb75f1
Binary files /dev/null and b/docs/case_study/images/dc/dc_floor_res.png differ
diff --git a/docs/case_study/images/dc/dc_floor_voltage.png b/docs/case_study/images/dc/dc_floor_voltage.png
new file mode 100644
index 00000000..4e92079a
Binary files /dev/null and b/docs/case_study/images/dc/dc_floor_voltage.png differ
diff --git a/docs/case_study/images/dc/dc_forward.png b/docs/case_study/images/dc/dc_forward.png
new file mode 100644
index 00000000..e6457a50
Binary files /dev/null and b/docs/case_study/images/dc/dc_forward.png differ
diff --git a/docs/case_study/images/dc/dc_input.png b/docs/case_study/images/dc/dc_input.png
new file mode 100644
index 00000000..0e46f69c
Binary files /dev/null and b/docs/case_study/images/dc/dc_input.png differ
diff --git a/docs/case_study/images/dc/dc_model.png b/docs/case_study/images/dc/dc_model.png
new file mode 100644
index 00000000..7f27b28d
Binary files /dev/null and b/docs/case_study/images/dc/dc_model.png differ
diff --git a/docs/case_study/images/dc/dc_no_ref.png b/docs/case_study/images/dc/dc_no_ref.png
new file mode 100644
index 00000000..a916c362
Binary files /dev/null and b/docs/case_study/images/dc/dc_no_ref.png differ
diff --git a/docs/case_study/images/dc/dc_poles.png b/docs/case_study/images/dc/dc_poles.png
new file mode 100644
index 00000000..bf01e6a4
Binary files /dev/null and b/docs/case_study/images/dc/dc_poles.png differ
diff --git a/docs/case_study/images/dc/dc_refinement.png b/docs/case_study/images/dc/dc_refinement.png
new file mode 100644
index 00000000..23bef2e8
Binary files /dev/null and b/docs/case_study/images/dc/dc_refinement.png differ
diff --git a/docs/case_study/images/dc_model_TOP.png b/docs/case_study/images/dc_model_TOP.png
deleted file mode 100644
index 64d1f837..00000000
Binary files a/docs/case_study/images/dc_model_TOP.png and /dev/null differ
diff --git a/docs/case_study/images/grav_gradio_model_TOP.png b/docs/case_study/images/grav_gradio_model_TOP.png
deleted file mode 100644
index 3feb4a73..00000000
Binary files a/docs/case_study/images/grav_gradio_model_TOP.png and /dev/null differ
diff --git a/docs/case_study/images/gravity/gg_data.png b/docs/case_study/images/gravity/gg_data.png
new file mode 100644
index 00000000..ec647e37
Binary files /dev/null and b/docs/case_study/images/gravity/gg_data.png differ
diff --git a/docs/case_study/images/gravity/gg_no_ref.png b/docs/case_study/images/gravity/gg_no_ref.png
new file mode 100644
index 00000000..6ec31279
Binary files /dev/null and b/docs/case_study/images/gravity/gg_no_ref.png differ
diff --git a/docs/case_study/images/gravity/grav_core.png b/docs/case_study/images/gravity/grav_core.png
new file mode 100644
index 00000000..a0d208d9
Binary files /dev/null and b/docs/case_study/images/gravity/grav_core.png differ
diff --git a/docs/case_study/images/gravity/grav_forward.png b/docs/case_study/images/gravity/grav_forward.png
new file mode 100644
index 00000000..b2897c03
Binary files /dev/null and b/docs/case_study/images/gravity/grav_forward.png differ
diff --git a/docs/case_study/images/gravity/grav_model.png b/docs/case_study/images/gravity/grav_model.png
new file mode 100644
index 00000000..1c7671e2
Binary files /dev/null and b/docs/case_study/images/gravity/grav_model.png differ
diff --git a/docs/case_study/images/gravity/grav_refinement.png b/docs/case_study/images/gravity/grav_refinement.png
new file mode 100644
index 00000000..9825d4e6
Binary files /dev/null and b/docs/case_study/images/gravity/grav_refinement.png differ
diff --git a/docs/case_study/images/gravity/gz_data.png b/docs/case_study/images/gravity/gz_data.png
new file mode 100644
index 00000000..83195ada
Binary files /dev/null and b/docs/case_study/images/gravity/gz_data.png differ
diff --git a/docs/case_study/images/gravity/gz_input.png b/docs/case_study/images/gravity/gz_input.png
new file mode 100644
index 00000000..3d6aa152
Binary files /dev/null and b/docs/case_study/images/gravity/gz_input.png differ
diff --git a/docs/case_study/images/gravity/gz_no_ref.png b/docs/case_study/images/gravity/gz_no_ref.png
new file mode 100644
index 00000000..266909c9
Binary files /dev/null and b/docs/case_study/images/gravity/gz_no_ref.png differ
diff --git a/docs/case_study/images/ground_grav_model_TOP.png b/docs/case_study/images/ground_grav_model_TOP.png
deleted file mode 100644
index 3e6d542a..00000000
Binary files a/docs/case_study/images/ground_grav_model_TOP.png and /dev/null differ
diff --git a/docs/case_study/images/joint_gravity_TOP.png b/docs/case_study/images/joint_gravity_TOP.png
deleted file mode 100644
index 0b33c633..00000000
Binary files a/docs/case_study/images/joint_gravity_TOP.png and /dev/null differ
diff --git a/docs/case_study/images/mag_model_TOP.png b/docs/case_study/images/mag_model_TOP.png
deleted file mode 100644
index cef67c1d..00000000
Binary files a/docs/case_study/images/mag_model_TOP.png and /dev/null differ
diff --git a/docs/case_study/images/magnetics/MAG_data.png b/docs/case_study/images/magnetics/MAG_data.png
new file mode 100644
index 00000000..9e583716
Binary files /dev/null and b/docs/case_study/images/magnetics/MAG_data.png differ
diff --git a/docs/case_study/images/magnetics/base_reg.png b/docs/case_study/images/magnetics/base_reg.png
new file mode 100644
index 00000000..2d300fa3
Binary files /dev/null and b/docs/case_study/images/magnetics/base_reg.png differ
diff --git a/docs/case_study/images/magnetics/forward.png b/docs/case_study/images/magnetics/forward.png
new file mode 100644
index 00000000..e55f5923
Binary files /dev/null and b/docs/case_study/images/magnetics/forward.png differ
diff --git a/docs/case_study/images/magnetics/mag_model.png b/docs/case_study/images/magnetics/mag_model.png
new file mode 100644
index 00000000..c2e04fa0
Binary files /dev/null and b/docs/case_study/images/magnetics/mag_model.png differ
diff --git a/docs/case_study/images/magnetics/mag_model_default.png b/docs/case_study/images/magnetics/mag_model_default.png
new file mode 100644
index 00000000..bc359b18
Binary files /dev/null and b/docs/case_study/images/magnetics/mag_model_default.png differ
diff --git a/docs/case_study/images/magnetics/mag_model_no_ref.png b/docs/case_study/images/magnetics/mag_model_no_ref.png
new file mode 100644
index 00000000..decc4822
Binary files /dev/null and b/docs/case_study/images/magnetics/mag_model_no_ref.png differ
diff --git a/docs/case_study/images/magnetics/mesh_core.png b/docs/case_study/images/magnetics/mesh_core.png
new file mode 100644
index 00000000..b769e000
Binary files /dev/null and b/docs/case_study/images/magnetics/mesh_core.png differ
diff --git a/docs/case_study/images/magnetics/mesh_refinement.png b/docs/case_study/images/magnetics/mesh_refinement.png
new file mode 100644
index 00000000..61e5e9c7
Binary files /dev/null and b/docs/case_study/images/magnetics/mesh_refinement.png differ
diff --git a/docs/case_study/images/magnetics/mvi_input.png b/docs/case_study/images/magnetics/mvi_input.png
new file mode 100644
index 00000000..d9300f8d
Binary files /dev/null and b/docs/case_study/images/magnetics/mvi_input.png differ
diff --git a/docs/case_study/images/magnetics/mvi_log.png b/docs/case_study/images/magnetics/mvi_log.png
new file mode 100644
index 00000000..9859fd73
Binary files /dev/null and b/docs/case_study/images/magnetics/mvi_log.png differ
diff --git a/docs/case_study/images/magnetics/mvi_model.png b/docs/case_study/images/magnetics/mvi_model.png
new file mode 100644
index 00000000..889ec0d4
Binary files /dev/null and b/docs/case_study/images/magnetics/mvi_model.png differ
diff --git a/docs/case_study/images/magnetics/no_ref_input.png b/docs/case_study/images/magnetics/no_ref_input.png
new file mode 100644
index 00000000..1bd4c867
Binary files /dev/null and b/docs/case_study/images/magnetics/no_ref_input.png differ
diff --git a/docs/case_study/images/magnetics/susc_ew_section.png b/docs/case_study/images/magnetics/susc_ew_section.png
new file mode 100644
index 00000000..aba61df5
Binary files /dev/null and b/docs/case_study/images/magnetics/susc_ew_section.png differ
diff --git a/docs/case_study/images/magnetics/susc_ew_section_noref.png b/docs/case_study/images/magnetics/susc_ew_section_noref.png
new file mode 100644
index 00000000..54ef9b2e
Binary files /dev/null and b/docs/case_study/images/magnetics/susc_ew_section_noref.png differ
diff --git a/docs/case_study/images/ore_body.png b/docs/case_study/images/ore_body.png
index c6178154..bbaf80c0 100644
Binary files a/docs/case_study/images/ore_body.png and b/docs/case_study/images/ore_body.png differ
diff --git a/docs/case_study/images/project_area.png b/docs/case_study/images/project_area.png
deleted file mode 100644
index 845e8393..00000000
Binary files a/docs/case_study/images/project_area.png and /dev/null differ
diff --git a/docs/case_study/images/setup_flinflon.png b/docs/case_study/images/setup_flinflon.png
new file mode 100644
index 00000000..b2490d4a
Binary files /dev/null and b/docs/case_study/images/setup_flinflon.png differ
diff --git a/docs/case_study/images/tipper/tipper_core.png b/docs/case_study/images/tipper/tipper_core.png
new file mode 100644
index 00000000..87710163
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_core.png differ
diff --git a/docs/case_study/images/tipper/tipper_data.png b/docs/case_study/images/tipper/tipper_data.png
new file mode 100644
index 00000000..da23de56
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_data.png differ
diff --git a/docs/case_study/images/tipper/tipper_forward.png b/docs/case_study/images/tipper/tipper_forward.png
new file mode 100644
index 00000000..e0de5327
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_forward.png differ
diff --git a/docs/case_study/images/tipper/tipper_model.png b/docs/case_study/images/tipper/tipper_model.png
new file mode 100644
index 00000000..9d512a49
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_model.png differ
diff --git a/docs/case_study/images/tipper/tipper_refinement.png b/docs/case_study/images/tipper/tipper_refinement.png
new file mode 100644
index 00000000..82290f09
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_refinement.png differ
diff --git a/docs/case_study/images/tipper/tipper_uncerts.png b/docs/case_study/images/tipper/tipper_uncerts.png
new file mode 100644
index 00000000..e52ab117
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_uncerts.png differ
diff --git a/docs/case_study/images/tipper/tipper_unconstrained.png b/docs/case_study/images/tipper/tipper_unconstrained.png
new file mode 100644
index 00000000..1513487d
Binary files /dev/null and b/docs/case_study/images/tipper/tipper_unconstrained.png differ
diff --git a/docs/case_study/introduction.ipynb b/docs/case_study/introduction.ipynb
index 495ce337..c8179a2f 100644
--- a/docs/case_study/introduction.ipynb
+++ b/docs/case_study/introduction.ipynb
@@ -2,13 +2,20 @@
"cells": [
{
"cell_type": "markdown",
- "id": "a6ca88da",
+ "id": "ec2c4bb1",
"metadata": {},
"source": [
"\n",
"\n",
"# Tutorials\n",
"\n",
+ "This chapter demonstrates how to run standalone and joint inversions of geophysical data using SimPEG and the user-interface created for Geoscience ANALYST. We generated several synthetic surveys over the Flin Flon model to simulate an exploration program over a VMS deposit.\n",
+ "The goal is to use ground and airborne geophysics to characterize the physical property and shape of the ore body and host rocks. This case study focuses on the following three datasets and respective physical properties:\n",
+ "\n",
+ "In preparation for the joint inversion, we first inverted each dataset independently ([Figure 1](standalone)). It serves as a quality control step for data uncertainties estimation and mesh design. We can solve possible convergence issues before attempting to couple the physical property models in a joint process.\n",
+ "\n",
+ "The data is then jointly with a cross-gradient coupling constraint ([Figure 2](joint)).\n",
+ "\n",
"\n",
"```{figure} ./images/ore_body.png\n",
"---\n",
@@ -18,22 +25,14 @@
"Discrete geological model of the ore deposit and host units.\n",
"```\n",
"\n",
- "\n",
- "This chapter demonstrates how to run standalone and joint inversions of geophysical data using SimPEG and the user-interface created for Geoscience ANALYST. We generated several synthetic surveys over the Flin Flon model to simulate an exploration program over a VMS deposit.\n",
- "The goal is to use ground and airborne geophysics to characterize the physical property and shape of the ore body and host rocks. This case study focuses on the following three datasets and respective physical properties:\n",
- "\n",
- "- [Direct-current resistivity (DCR)](dc-data) -> resistivity\n",
- "- [Magnetic Total Field (TMI)](magnetic-data) -> magnetization\n",
- "- [Full-tensor gravity gradiometry (FTG)](ftg-data) -> density\n",
- "\n",
- "The datasets are first inverted independently ([Figure 1](standalone)), then jointly with a cross-gradient coupling constraint ([Figure 2](joint)).\n",
- "\n",
- "The following sections provide details about the processing and results. A compilation `geoh5` project can be found in the `simpeg-drivers-assets` folder.\n",
+ "The following sections provide details about the processing and results. A compilation `geoh5` project can be found in the `simpeg-drivers-assets` folder or [download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=).\n",
"\n",
"- [Background information](background.ipynb)\n",
- "- [Data](data.ipynb)\n",
- "- [Mesh design](mesh_design.ipynb)\n",
- "- [Unconstrained inversions](unconstrained_inversion.ipynb)\n",
+ "- [Magnetic Total Field (TMI)](magnetic)\n",
+ "- [Full-tensor gravity gradiometry (FTG)](gravity)\n",
+ "- [Direct-current resistivity (DCR)](dc_resistivity)\n",
+ "- [Airborne Tipper (NSEM)](tipper)\n",
+ "- [Airborne Time-Domain EM (ATEM)](airborne_tem)\n",
"- [Joint inversion](joint_inversion.ipynb)"
]
}
diff --git a/docs/case_study/introduction.py b/docs/case_study/introduction.py
index 840b79e9..d7555c0b 100644
--- a/docs/case_study/introduction.py
+++ b/docs/case_study/introduction.py
@@ -5,7 +5,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
@@ -16,6 +16,13 @@
#
# # Tutorials
#
+# This chapter demonstrates how to run standalone and joint inversions of geophysical data using SimPEG and the user-interface created for Geoscience ANALYST. We generated several synthetic surveys over the Flin Flon model to simulate an exploration program over a VMS deposit.
+# The goal is to use ground and airborne geophysics to characterize the physical property and shape of the ore body and host rocks. This case study focuses on the following three datasets and respective physical properties:
+#
+# In preparation for the joint inversion, we first inverted each dataset independently ([Figure 1](standalone)). It serves as a quality control step for data uncertainties estimation and mesh design. We can solve possible convergence issues before attempting to couple the physical property models in a joint process.
+#
+# The data is then jointly with a cross-gradient coupling constraint ([Figure 2](joint)).
+#
#
# ```{figure} ./images/ore_body.png
# ---
@@ -25,20 +32,12 @@
# Discrete geological model of the ore deposit and host units.
# ```
#
-#
-# This chapter demonstrates how to run standalone and joint inversions of geophysical data using SimPEG and the user-interface created for Geoscience ANALYST. We generated several synthetic surveys over the Flin Flon model to simulate an exploration program over a VMS deposit.
-# The goal is to use ground and airborne geophysics to characterize the physical property and shape of the ore body and host rocks. This case study focuses on the following three datasets and respective physical properties:
-#
-# - [Direct-current resistivity (DCR)](dc-data) -> resistivity
-# - [Magnetic Total Field (TMI)](magnetic-data) -> magnetization
-# - [Full-tensor gravity gradiometry (FTG)](ftg-data) -> density
-#
-# The datasets are first inverted independently ([Figure 1](standalone)), then jointly with a cross-gradient coupling constraint ([Figure 2](joint)).
-#
-# The following sections provide details about the processing and results. A compilation `geoh5` project can be found in the `simpeg-drivers-assets` folder.
+# The following sections provide details about the processing and results. A compilation `geoh5` project can be found in the `simpeg-drivers-assets` folder or [download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=).
#
# - [Background information](background.ipynb)
-# - [Data](data.ipynb)
-# - [Mesh design](mesh_design.ipynb)
-# - [Unconstrained inversions](unconstrained_inversion.ipynb)
+# - [Magnetic Total Field (TMI)](magnetic)
+# - [Full-tensor gravity gradiometry (FTG)](gravity)
+# - [Direct-current resistivity (DCR)](dc_resistivity)
+# - [Airborne Tipper (NSEM)](tipper)
+# - [Airborne Time-Domain EM (ATEM)](airborne_tem)
# - [Joint inversion](joint_inversion.ipynb)
diff --git a/docs/case_study/joint_inversion.ipynb b/docs/case_study/joint_inversion.ipynb
index e058e9b3..9b807f46 100644
--- a/docs/case_study/joint_inversion.ipynb
+++ b/docs/case_study/joint_inversion.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "id": "57159c74",
+ "id": "fd270354",
"metadata": {},
"source": [
"# Joint Inversion\n",
diff --git a/docs/case_study/joint_inversion.py b/docs/case_study/joint_inversion.py
index 9e9343c5..ad2e9ceb 100644
--- a/docs/case_study/joint_inversion.py
+++ b/docs/case_study/joint_inversion.py
@@ -5,7 +5,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
diff --git a/docs/case_study/magnetic.ipynb b/docs/case_study/magnetic.ipynb
new file mode 100644
index 00000000..278521d3
--- /dev/null
+++ b/docs/case_study/magnetic.ipynb
@@ -0,0 +1,224 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "53d3ea92",
+ "metadata": {},
+ "source": [
+ "\n",
+ "\n",
+ "# Magnetic Inversion\n",
+ "\n",
+ "This section focuses on the inversion of magnetic data using a scalar (susceptibility) and a magnetization (vector) approach generated from the Flin Flon magnetic model. We also cover some strategies on how to remove regional signal and the use of compact norms.\n",
+ "\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/magnetics/mag_model.png\n",
+ "---\n",
+ "scale: 25%\n",
+ "\n",
+ "name: mag_model\n",
+ "---\n",
+ "[Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)\n",
+ "```\n",
+ "\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28d4c2b9",
+ "metadata": {},
+ "source": [
+ "(magnetic-data)=\n",
+ "\n",
+ "## Forward simulation\n",
+ "\n",
+ "We simulated Residual Magnetic Intensity (RMI) data along East-West lines spaced to 200 m apart, with along-line data downsampled to 10 m. The flight height is set to 40 m above topography.\n",
+ "\n",
+ "The following parameters were used for the forward simulation:\n",
+ "\n",
+ "```{figure} ./images/magnetics/forward.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_forward\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "For simplicity, the simulation assumes a purely induced response. By omitting to supply values/models for the inclination and declination of magnetization, the forward routine uses the inducing field parameters instead.\n",
+ "\n",
+ "After running the forward simulation, we obtain RMI data as shown below. We note the strong correlation between the amplitude of the signal and the horizontal position of the ore body. There is also a significant long wavelength East-West trend, due to the large but weakly magnetic Hidden Formation.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/magnetics/MAG_data.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_data\n",
+ "---\n",
+ "Residual magnetic intensity (RMI) data measured over the zone of interest.\n",
+ "```\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2e7bd474",
+ "metadata": {},
+ "source": [
+ "## Mesh creation\n",
+ "\n",
+ "In preparation for the inversion, we create an octree mesh optimized for the magnetic survey.\n",
+ "The following parameters are used based on the original Flin Flon model.\n",
+ "\n",
+ "```{figure} ./images/magnetics/mesh_core.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_core\n",
+ "---\n",
+ "Core mesh parameters.\n",
+ "```\n",
+ "\n",
+ "### Refinements\n",
+ "\n",
+ "- For the first refinement, we insert two cells around our survey lines. The refinement is done radially around the segments of the curve to assure that the air-ground interface near the receivers are modeled with the finest cell size.\n",
+ "\n",
+ "- A second refinement is used along topography to get a coarse but continuous air-ground interface outside the area or interest.\n",
+ "\n",
+ "- The third refinement \"horizon\" is used to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influence by the data.\n",
+ "\n",
+ "```{figure} ./images/magnetics/mesh_refinement.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_refinement\n",
+ "---\n",
+ "Refinement strategy used for the magnetic modeling.\n",
+ "```\n",
+ "\n",
+ "See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1842d0de",
+ "metadata": {},
+ "source": [
+ "## Scalar inversion (susceptibility)\n",
+ "\n",
+ "**Runtime: ~1 min**\n",
+ "\n",
+ "As a first pass, we invert the data with default parameters. We use a constant 25 nT floor uncertainty, determined empirically to achieve good fit.\n",
+ "\n",
+ "```{figure} ./images/magnetics/base_reg.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mag_input\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "After running the inversion we obtain:\n",
+ "\n",
+ "```{figure} ./images/magnetics/mag_model_default.png\n",
+ "---\n",
+ "name: mag_default\n",
+ "---\n",
+ "(Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 3).\n",
+ "\n",
+ "(Bottom) Slices through the recovered susceptibility model: (left) at 175 m elevation and (right) at 6072150 m N.\n",
+ "```\n",
+ "\n",
+ "We note that our model predicts the data within our uncertainty floor of 25 nT. In plan view, the model shows a clear North-West trend corresponding to the ore body. On the vertical section we recover an isolate body at depth. We note that large portions of the model in the padding cells have no anomalies. All the magnetic signal is confined to a region directly below the survey lines.\n",
+ "\n",
+ "This is somewhat surprising given the large East-West trend in the data, which would be better explain by a large body extending beyond the extent of our survey. Let's confirm this solution with a second inversion.\n",
+ "\n",
+ "\n",
+ "### No reference model\n",
+ "\n",
+ "As a second pass, we test whether our initial assumption of a uniform zero susceptibility model is adequate. We can remove the influence on the reference model by setting the corresponding scaling factor to 0. After re-running the inversion we recover:\n",
+ "\n",
+ "```{figure} ./images/magnetics/no_ref_input.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: no_ref_input\n",
+ "```\n",
+ "\n",
+ "The model shown below generally agrees with the position of the strongly magnetic ore body, but changes greatly outside the survey area. Since we have not imposed any constraints on the background value, the inversion is free to extend the smoothout the eastern anomaly both at depth and in the padding region. This is in better agreement with our known geological knowledge.\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/magnetics/mag_model_no_ref.png\n",
+ "---\n",
+ "name: mag_no_ref\n",
+ "---\n",
+ "(Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 3).\n",
+ "\n",
+ "(Bottom) Slices through the recovered susceptibility model: (left) at 175 m elevation and (right) at 6072150 m N.\n",
+ "```\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "910f8074",
+ "metadata": {},
+ "source": [
+ "## Magnetic vector inversion (MVI)\n",
+ "\n",
+ "We now look at the solution using the magnetic vector inversion (MVI) algorithm. This approach is generally favoured if [remanent magnetization](https://gpg.geosci.xyz/content/magnetics/magnetics_basic_principles.html?highlight=remanence#remanent-magnetization) is kwown to distorte the magnetic signal.\n",
+ "\n",
+ "We use the default parameters but without a reference model as shown below.\n",
+ "\n",
+ "```{figure} ./images/magnetics/mvi_input.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mvi_input\n",
+ "```\n",
+ "\n",
+ "After running the inversion, we obtain\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/magnetics/mvi_model.png\n",
+ "---\n",
+ "name: mvi_model\n",
+ "---\n",
+ "(Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 3).\n",
+ "\n",
+ "(Bottom) Slices through the recovered susceptibility model: (left) at 175 m elevation and (right) at 6072150 m N.\n",
+ "```\n",
+ "\n",
+ "We note that the effective susceptibility values are much lower than recovered with the scalar susceptibility inversion. The anomaly is also smoother, broader and less well defined at depth. This can be explained by the increase in non-uniquess of the inverse problem, where we now have to solve for three models (vectors) at once. This result could be improved with additional constraints, but beyond the scopy of this section.\n",
+ "\n",
+ "\n",
+ "### Algorithmic details\n",
+ "\n",
+ "Looking back at the log file, users may notive that the MVI process goes through three main stages:\n",
+ "\n",
+ "1- Solve the problem in Cartesian (3-components) form for a smooth model\n",
+ "\n",
+ "2- Convert the model to Spherical (amplitude and angles) and iterate to target misfit.\n",
+ "\n",
+ "3- Use the smooth Spherical model for the compact IRLS iterations.\n",
+ "\n",
+ "```{figure} ./images/magnetics/mvi_log.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: mvi_log\n",
+ "```\n",
+ "\n",
+ "Note that the last Cartesian model ends after reaching a target misfit of about 2x (hard-coded). User should preferentially use the last model from the Spherical steps, or last of IRLS, to do their interpration as both are on or near target.\n",
+ "\n",
+ "See [Fournier et al. 2020](https://owncloud.eoas.ubc.ca/s/iXrwgjXjierfoKa/download) for more details.\n",
+ "\n",
+ ""
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/case_study/magnetic.py b/docs/case_study/magnetic.py
new file mode 100644
index 00000000..a00e2018
--- /dev/null
+++ b/docs/case_study/magnetic.py
@@ -0,0 +1,196 @@
+# ---
+# jupyter:
+# jupytext:
+# text_representation:
+# extension: .py
+# format_name: light
+# format_version: '1.5'
+# jupytext_version: 1.16.2
+# kernelspec:
+# display_name: Python 3 (ipykernel)
+# language: python
+# name: python3
+# ---
+
+#
+#
+# # Magnetic Inversion
+#
+# This section focuses on the inversion of magnetic data using a scalar (susceptibility) and a magnetization (vector) approach generated from the Flin Flon magnetic model. We also cover some strategies on how to remove regional signal and the use of compact norms.
+#
+#
+#
+# ```{figure} ./images/magnetics/mag_model.png
+# ---
+# scale: 25%
+#
+# name: mag_model
+# ---
+# [Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)
+# ```
+#
+#
+#
+
+# (magnetic-data)=
+#
+# ## Forward simulation
+#
+# We simulated Residual Magnetic Intensity (RMI) data along East-West lines spaced to 200 m apart, with along-line data downsampled to 10 m. The flight height is set to 40 m above topography.
+#
+# The following parameters were used for the forward simulation:
+#
+# ```{figure} ./images/magnetics/forward.png
+# ---
+# scale: 50%
+# name: mag_forward
+# ---
+# ```
+#
+# For simplicity, the simulation assumes a purely induced response. By omitting to supply values/models for the inclination and declination of magnetization, the forward routine uses the inducing field parameters instead.
+#
+# After running the forward simulation, we obtain RMI data as shown below. We note the strong correlation between the amplitude of the signal and the horizontal position of the ore body. There is also a significant long wavelength East-West trend, due to the large but weakly magnetic Hidden Formation.
+#
+#
+# ```{figure} ./images/magnetics/MAG_data.png
+# ---
+# scale: 50%
+# name: mag_data
+# ---
+# Residual magnetic intensity (RMI) data measured over the zone of interest.
+# ```
+#
+#
+
+# ## Mesh creation
+#
+# In preparation for the inversion, we create an octree mesh optimized for the magnetic survey.
+# The following parameters are used based on the original Flin Flon model.
+#
+# ```{figure} ./images/magnetics/mesh_core.png
+# ---
+# scale: 50%
+# name: mag_core
+# ---
+# Core mesh parameters.
+# ```
+#
+# ### Refinements
+#
+# - For the first refinement, we insert two cells around our survey lines. The refinement is done radially around the segments of the curve to assure that the air-ground interface near the receivers are modeled with the finest cell size.
+#
+# - A second refinement is used along topography to get a coarse but continuous air-ground interface outside the area or interest.
+#
+# - The third refinement "horizon" is used to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influence by the data.
+#
+# ```{figure} ./images/magnetics/mesh_refinement.png
+# ---
+# scale: 50%
+# name: mag_refinement
+# ---
+# Refinement strategy used for the magnetic modeling.
+# ```
+#
+# See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.
+#
+
+# ## Scalar inversion (susceptibility)
+#
+# **Runtime: ~1 min**
+#
+# As a first pass, we invert the data with default parameters. We use a constant 25 nT floor uncertainty, determined empirically to achieve good fit.
+#
+# ```{figure} ./images/magnetics/base_reg.png
+# ---
+# scale: 50%
+# name: mag_input
+# ---
+# ```
+#
+# After running the inversion we obtain:
+#
+# ```{figure} ./images/magnetics/mag_model_default.png
+# ---
+# name: mag_default
+# ---
+# (Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 3).
+#
+# (Bottom) Slices through the recovered susceptibility model: (left) at 175 m elevation and (right) at 6072150 m N.
+# ```
+#
+# We note that our model predicts the data within our uncertainty floor of 25 nT. In plan view, the model shows a clear North-West trend corresponding to the ore body. On the vertical section we recover an isolate body at depth. We note that large portions of the model in the padding cells have no anomalies. All the magnetic signal is confined to a region directly below the survey lines.
+#
+# This is somewhat surprising given the large East-West trend in the data, which would be better explain by a large body extending beyond the extent of our survey. Let's confirm this solution with a second inversion.
+#
+#
+# ### No reference model
+#
+# As a second pass, we test whether our initial assumption of a uniform zero susceptibility model is adequate. We can remove the influence on the reference model by setting the corresponding scaling factor to 0. After re-running the inversion we recover:
+#
+# ```{figure} ./images/magnetics/no_ref_input.png
+# ---
+# scale: 50%
+# name: no_ref_input
+# ```
+#
+# The model shown below generally agrees with the position of the strongly magnetic ore body, but changes greatly outside the survey area. Since we have not imposed any constraints on the background value, the inversion is free to extend the smoothout the eastern anomaly both at depth and in the padding region. This is in better agreement with our known geological knowledge.
+#
+#
+# ```{figure} ./images/magnetics/mag_model_no_ref.png
+# ---
+# name: mag_no_ref
+# ---
+# (Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 3).
+#
+# (Bottom) Slices through the recovered susceptibility model: (left) at 175 m elevation and (right) at 6072150 m N.
+# ```
+#
+
+# ## Magnetic vector inversion (MVI)
+#
+# We now look at the solution using the magnetic vector inversion (MVI) algorithm. This approach is generally favoured if [remanent magnetization](https://gpg.geosci.xyz/content/magnetics/magnetics_basic_principles.html?highlight=remanence#remanent-magnetization) is kwown to distorte the magnetic signal.
+#
+# We use the default parameters but without a reference model as shown below.
+#
+# ```{figure} ./images/magnetics/mvi_input.png
+# ---
+# scale: 50%
+# name: mvi_input
+# ```
+#
+# After running the inversion, we obtain
+#
+#
+# ```{figure} ./images/magnetics/mvi_model.png
+# ---
+# name: mvi_model
+# ---
+# (Top) (left) Predicted and (right) residuals data after reaching target misfit (iteration 3).
+#
+# (Bottom) Slices through the recovered susceptibility model: (left) at 175 m elevation and (right) at 6072150 m N.
+# ```
+#
+# We note that the effective susceptibility values are much lower than recovered with the scalar susceptibility inversion. The anomaly is also smoother, broader and less well defined at depth. This can be explained by the increase in non-uniquess of the inverse problem, where we now have to solve for three models (vectors) at once. This result could be improved with additional constraints, but beyond the scopy of this section.
+#
+#
+# ### Algorithmic details
+#
+# Looking back at the log file, users may notive that the MVI process goes through three main stages:
+#
+# 1- Solve the problem in Cartesian (3-components) form for a smooth model
+#
+# 2- Convert the model to Spherical (amplitude and angles) and iterate to target misfit.
+#
+# 3- Use the smooth Spherical model for the compact IRLS iterations.
+#
+# ```{figure} ./images/magnetics/mvi_log.png
+# ---
+# scale: 50%
+# name: mvi_log
+# ```
+#
+# Note that the last Cartesian model ends after reaching a target misfit of about 2x (hard-coded). User should preferentially use the last model from the Spherical steps, or last of IRLS, to do their interpration as both are on or near target.
+#
+# See [Fournier et al. 2020](https://owncloud.eoas.ubc.ca/s/iXrwgjXjierfoKa/download) for more details.
+#
+#
diff --git a/docs/case_study/tipper.ipynb b/docs/case_study/tipper.ipynb
new file mode 100644
index 00000000..55b7b56c
--- /dev/null
+++ b/docs/case_study/tipper.ipynb
@@ -0,0 +1,153 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "573c22f3",
+ "metadata": {},
+ "source": [
+ "\n",
+ "\n",
+ "# Airborne Tipper Inversion\n",
+ "\n",
+ "\n",
+ "This section focuses on the inversion of airborne tipper data generated from the Flin Flon resistivity model.\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_model.png\n",
+ "---\n",
+ "scale: 25%\n",
+ "\n",
+ "name: dc_model\n",
+ "---\n",
+ "[Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)\n",
+ "```\n",
+ "\n",
+ "```{note}\n",
+ "Runtime and memory usage increases rapidly with the mesh size and number of sources (frequencies). It is strongly recommended to downsize this example to a few lines if the training is done on a standard computer. The full inversion presented below was performed on an Azure HC44rs node (44 CPUs, 315 Gb RAM) in ~2.0 h.\n",
+ "```\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "981183f2",
+ "metadata": {},
+ "source": [
+ "(tipper-data)=\n",
+ "\n",
+ "## Airborne tipper (Natural Source EM)\n",
+ "\n",
+ "We generated an airborne tipper survey over the main ore body. The survey lines are spaced at 400 m, oriented East-West, at a drape height of 60 m.\n",
+ "\n",
+ "Tipper systems collect three orthogonal components of the ambient magnetic field ($H_x,\\;H_y,\\;H_z$). Similar to magnetotelluric surveys, the ratios of the components are used to circumvent the unknown source of the EM signal. The transfer functions, or tipper, are calculated by taking the ratio of the fields for two polarizations of the magnetic fields (EW and NS). The measurements are generally provided in the frequency-domain with both a real and an imaginary component. For more background information about natural source methods, see [em.geosci](https://em.geosci.xyz/content/geophysical_surveys/ztem/index.html)\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_forward.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: tipper_forward\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "The survey used here mimics the commercial [ZTEM](https://geotech.ca/services/electromagnetic/ztem-z-axis-tipper-electromagnetic-system/) system that measures the vertical magnetic field ($H_z$) on a towed platform at 6 frequencies (30, 45, 90, 180, 360 and 720 Hz). The horizontal fields ($H_{x,y}$) are measured at a fixed base station located in the center of the survey area.\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_data.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: tipper_topo\n",
+ "---\n",
+ "(Top) Tipper data displayed by the 2D Profiler at all 6 frequencies for the 4 components ($T_{zx}$, $T_{zy}$, real and imaginary). (Bottom) Survey lines relative to (left) the ore body and (right) the discrete conductivity model.\n",
+ "```\n",
+ "\n",
+ "Note that the position of the known conductor correlates with large gradients in the tipper data.\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e7e78e4c",
+ "metadata": {
+ "lines_to_next_cell": 2
+ },
+ "source": [
+ "## Mesh creation\n",
+ "\n",
+ "In preparation for the inversion, we create an octree mesh optimized for the tipper survey. The mesh parameters are based on the original Flin Flon model.\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_core.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: tipper_core\n",
+ "---\n",
+ "Core mesh parameters.\n",
+ "```\n",
+ "\n",
+ "Note that the padding distances are set substantially further than for the magnetics, gravity or dc-resistivity (1 km) inversions. This is because the [diffusion distance](diffusion-distance) for a background resistivity of $1000 \\; \\Omega .m$ for the lowest frequency (30 Hz) is roughly 3 km. This distance is important to satisfy the [boundary conditions](https://em.geosci.xyz/content/maxwell1_fundamentals/solving_maxwells_equations.html?highlight=boundary%20conditions#boundary-and-initial-conditions) of the underlying differential equations.\n",
+ "\n",
+ "\n",
+ "### Refinements\n",
+ "\n",
+ "- For the first refinement, we insert 4 cells for the first three octree levels along the flight path. The refinement is done radially around the segments of the flight path curve to assure good numerical accuracy near the receiver locations. This is especially important for EM methods with low frequencies.\n",
+ "\n",
+ "- We use a second refinement along topography to get a coarse but continuous air-ground interface outside the area or interest.\n",
+ "\n",
+ "- Lastly, we refine a \"horizon\" to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influenced by the data.\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_refinement.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: tipper_refinement\n",
+ "---\n",
+ "Refinement strategy used for the tipper modeling.\n",
+ "```\n",
+ "\n",
+ "See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "823c121c",
+ "metadata": {},
+ "source": [
+ "## Unconstrained inversion\n",
+ "\n",
+ "**Runtime: ~2.0 h**\n",
+ "\n",
+ "Tipper data involves 2 receiver configuration (x and y), with two components (real and imaginary) and measured over 6 frequencies. Balancing all this data can be challenging and time consuming. Here we adopt a variable floor strategy based on the 10th percentile of each data layer.\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_uncerts.png\n",
+ "---\n",
+ "scale: 50%\n",
+ "name: tipper_uncerts\n",
+ "---\n",
+ "```\n",
+ "\n",
+ "This approach is a good starting point, but experimentation is generally required.\n",
+ "\n",
+ "After running the inversion we recover the following solution:\n",
+ "\n",
+ "\n",
+ "```{figure} ./images/tipper/tipper_unconstrained.png\n",
+ "---\n",
+ "name: tipper_unconstrained\n",
+ "---\n",
+ "(Left) Horizontal section at 120 m elevation after reaching target misfit (iteration 5).\n",
+ "\n",
+ "(Right)(top) 2D profiles of observed versus predicted data for all 4 channels and 6 frequencies and (bottom) vertical section through the conductivity model below the same line.\n",
+ "```\n",
+ "\n",
+ "Despite our simplistic floor uncertainties, the inversion managed to converge fairly quickly to a reasonable model that fits our data well. We have recovered a clear conductor at depth that overlaps with the ore body. However, the inversion could not resolve the thin conductive overburden layer, as expected by the low frequency range of the tipper system."
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/case_study/tipper.py b/docs/case_study/tipper.py
new file mode 100644
index 00000000..cd0ec0a6
--- /dev/null
+++ b/docs/case_study/tipper.py
@@ -0,0 +1,128 @@
+# ---
+# jupyter:
+# jupytext:
+# text_representation:
+# extension: .py
+# format_name: light
+# format_version: '1.5'
+# jupytext_version: 1.16.2
+# kernelspec:
+# display_name: Python 3 (ipykernel)
+# language: python
+# name: python3
+# ---
+
+#
+#
+# # Airborne Tipper Inversion
+#
+#
+# This section focuses on the inversion of airborne tipper data generated from the Flin Flon resistivity model.
+#
+# ```{figure} ./images/tipper/tipper_model.png
+# ---
+# scale: 25%
+#
+# name: dc_model
+# ---
+# [Download here](https://github.com/MiraGeoscience/simpeg-drivers/raw/develop/simpeg_drivers-assets/inversion_demo.geoh5?download=)
+# ```
+#
+# ```{note}
+# Runtime and memory usage increases rapidly with the mesh size and number of sources (frequencies). It is strongly recommended to downsize this example to a few lines if the training is done on a standard computer. The full inversion presented below was performed on an Azure HC44rs node (44 CPUs, 315 Gb RAM) in ~2.0 h.
+# ```
+#
+#
+
+# (tipper-data)=
+#
+# ## Airborne tipper (Natural Source EM)
+#
+# We generated an airborne tipper survey over the main ore body. The survey lines are spaced at 400 m, oriented East-West, at a drape height of 60 m.
+#
+# Tipper systems collect three orthogonal components of the ambient magnetic field ($H_x,\;H_y,\;H_z$). Similar to magnetotelluric surveys, the ratios of the components are used to circumvent the unknown source of the EM signal. The transfer functions, or tipper, are calculated by taking the ratio of the fields for two polarizations of the magnetic fields (EW and NS). The measurements are generally provided in the frequency-domain with both a real and an imaginary component. For more background information about natural source methods, see [em.geosci](https://em.geosci.xyz/content/geophysical_surveys/ztem/index.html)
+#
+#
+# ```{figure} ./images/tipper/tipper_forward.png
+# ---
+# scale: 50%
+# name: tipper_forward
+# ---
+# ```
+#
+# The survey used here mimics the commercial [ZTEM](https://geotech.ca/services/electromagnetic/ztem-z-axis-tipper-electromagnetic-system/) system that measures the vertical magnetic field ($H_z$) on a towed platform at 6 frequencies (30, 45, 90, 180, 360 and 720 Hz). The horizontal fields ($H_{x,y}$) are measured at a fixed base station located in the center of the survey area.
+#
+# ```{figure} ./images/tipper/tipper_data.png
+# ---
+# scale: 50%
+# name: tipper_topo
+# ---
+# (Top) Tipper data displayed by the 2D Profiler at all 6 frequencies for the 4 components ($T_{zx}$, $T_{zy}$, real and imaginary). (Bottom) Survey lines relative to (left) the ore body and (right) the discrete conductivity model.
+# ```
+#
+# Note that the position of the known conductor correlates with large gradients in the tipper data.
+#
+#
+
+# ## Mesh creation
+#
+# In preparation for the inversion, we create an octree mesh optimized for the tipper survey. The mesh parameters are based on the original Flin Flon model.
+#
+# ```{figure} ./images/tipper/tipper_core.png
+# ---
+# scale: 50%
+# name: tipper_core
+# ---
+# Core mesh parameters.
+# ```
+#
+# Note that the padding distances are set substantially further than for the magnetics, gravity or dc-resistivity (1 km) inversions. This is because the [diffusion distance](diffusion-distance) for a background resistivity of $1000 \; \Omega .m$ for the lowest frequency (30 Hz) is roughly 3 km. This distance is important to satisfy the [boundary conditions](https://em.geosci.xyz/content/maxwell1_fundamentals/solving_maxwells_equations.html?highlight=boundary%20conditions#boundary-and-initial-conditions) of the underlying differential equations.
+#
+#
+# ### Refinements
+#
+# - For the first refinement, we insert 4 cells for the first three octree levels along the flight path. The refinement is done radially around the segments of the flight path curve to assure good numerical accuracy near the receiver locations. This is especially important for EM methods with low frequencies.
+#
+# - We use a second refinement along topography to get a coarse but continuous air-ground interface outside the area or interest.
+#
+# - Lastly, we refine a "horizon" to get a core region at depth with increasing cell size directly below the survey. This is our volume of interest most strongly influenced by the data.
+#
+# ```{figure} ./images/tipper/tipper_refinement.png
+# ---
+# scale: 50%
+# name: tipper_refinement
+# ---
+# Refinement strategy used for the tipper modeling.
+# ```
+#
+# See [Mesh creation](../inversion/mesh_design.ipynb) section for general details on the parameters.
+
+
+# ## Unconstrained inversion
+#
+# **Runtime: ~2.0 h**
+#
+# Tipper data involves 2 receiver configuration (x and y), with two components (real and imaginary) and measured over 6 frequencies. Balancing all this data can be challenging and time consuming. Here we adopt a variable floor strategy based on the 10th percentile of each data layer.
+#
+# ```{figure} ./images/tipper/tipper_uncerts.png
+# ---
+# scale: 50%
+# name: tipper_uncerts
+# ---
+# ```
+#
+# This approach is a good starting point, but experimentation is generally required.
+#
+# After running the inversion we recover the following solution:
+#
+#
+# ```{figure} ./images/tipper/tipper_unconstrained.png
+# ---
+# name: tipper_unconstrained
+# ---
+# (Left) Horizontal section at 120 m elevation after reaching target misfit (iteration 5).
+#
+# (Right)(top) 2D profiles of observed versus predicted data for all 4 channels and 6 frequencies and (bottom) vertical section through the conductivity model below the same line.
+# ```
+#
+# Despite our simplistic floor uncertainties, the inversion managed to converge fairly quickly to a reasonable model that fits our data well. We have recovered a clear conductor at depth that overlaps with the ore body. However, the inversion could not resolve the thin conductive overburden layer, as expected by the low frequency range of the tipper system.
diff --git a/docs/case_study/unconstrained_inversion.ipynb b/docs/case_study/unconstrained_inversion.ipynb
deleted file mode 100644
index 15bdbb75..00000000
--- a/docs/case_study/unconstrained_inversion.ipynb
+++ /dev/null
@@ -1,135 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "53c2b25c",
- "metadata": {},
- "source": [
- "\n",
- "\n",
- "# Unconstrained inversions\n",
- "\n",
- "In preparation for the joint inversion, we first inverted each dataset independently. It serves as a quality control step for data uncertainties estimation and mesh design. We can solve possible convergence issues before attempting to couple the physical property models in a joint process.\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "e48be50c",
- "metadata": {},
- "source": [
- "## Magnetic inversion\n",
- "\n",
- "The airborne magnetic data were inverted over a range of uncertainties in order to achieve an adequate data fit. Following the smooth solution, a series of IRLS iterations were performed to recover an alternate, more compact model. The following figure shows sections through the recovered models and compares the observed and predicted data.\n",
- "\n",
- "\n",
- "```{figure} ./images/mag_model_TOP.png\n",
- "---\n",
- "height: 400px\n",
- "name: mag_model_TOP\n",
- "---\n",
- "(Top) (left) Observed and (right) predicted data after convergence of the L2 (smooth) solution. Most of the data is well recovered.\n",
- "\n",
- "(Bottom) Horizontal slice at 255 m elevation for (left) the smooth and (right) compact magnetization models.\n",
- "```\n",
- "\n",
- "\n",
- "[Add more here]\n",
- "\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "502f8f6f",
- "metadata": {},
- "source": [
- "## Ground gravity inversion\n",
- "\n",
- "The ground gravity data (terrain corrected at 2.67 g/cc) were also inverted in the same fashion. A floor uncertainty value of 0.05 mGal was assigned.\n",
- "\n",
- "\n",
- "\n",
- "```{figure} ./images/ground_grav_model_TOP.png\n",
- "---\n",
- "height: 400px\n",
- "name: ground_grav_model_TOP\n",
- "---\n",
- "(Top) (left) Observed and (right) predicted gz data after convergence of the L2 (smooth) solution. Most of the data is well recovered.\n",
- "\n",
- "(Bottom) Horizontal slice for (left) the smooth and (right) L1-norm density contrast models.\n",
- "```\n",
- "\n",
- "[Add more here]\n",
- "\n",
- "We note a slight correlation to the shape of the known ore body\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "777f06aa",
- "metadata": {},
- "source": [
- "## Gravity gradiometry inversion\n",
- "\n",
- "The airborne tensor gravity data (terrain corrected at 2.67 g/cc) were also inverted in the same fashion. A floor uncertainty value of 0.2 Eotvos was assigned to all the components.\n",
- "\n",
- "\n",
- "\n",
- "```{figure} ./images/grav_gradio_model_TOP.png\n",
- "---\n",
- "height: 400px\n",
- "name: grav_gradio_model_TOP\n",
- "---\n",
- "(Top) (left) Observed and (right) predicted gxx data after convergence of the L2 (smooth) solution. Most of the data is well recovered.\n",
- "\n",
- "(Bottom) Horizontal slice for (left) the smooth and (right) L1-norm density contrast models.\n",
- "```\n",
- "\n",
- "We note a slight correlation to the shape of the known ore body\n",
- "\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "16429dac",
- "metadata": {},
- "source": [
- "## Direct-current inversion\n",
- "\n",
- "The direct-current data are inverted with uncertainties assigned based on a background resistivity value, then converted to potentials.\n",
- "\n",
- "[Add details]\n",
- "\n",
- "The following figure shows the data fit and models recovered after convergence.\n",
- "\n",
- "```{figure} ./images/dc_model_TOP.png\n",
- "---\n",
- "height: 400px\n",
- "name: dc_model_TOP.png\n",
- "---\n",
- "(Top) (left) Observed and (right) predicted apparent resistivity data after convergence.\n",
- "\n",
- "(Bottom)\n",
- "(Left) Horizontal section at 240 m elevation through the compact density model.\n",
- "(Right) Vertical NS section through the recovered smooth resistivity model.\n",
- "```\n",
- "\n",
- "We note a large contrast in conductivity in plan view, mostly limited as near-surface layer. This feature can be explained by the conductive tailings.\n",
- "\n",
- ""
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/docs/case_study/unconstrained_inversion.py b/docs/case_study/unconstrained_inversion.py
deleted file mode 100644
index b2118b3b..00000000
--- a/docs/case_study/unconstrained_inversion.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# ---
-# jupyter:
-# jupytext:
-# text_representation:
-# extension: .py
-# format_name: light
-# format_version: '1.5'
-# jupytext_version: 1.16.1
-# kernelspec:
-# display_name: Python 3 (ipykernel)
-# language: python
-# name: python3
-# ---
-
-#
-#
-# # Unconstrained inversions
-#
-# In preparation for the joint inversion, we first inverted each dataset independently. It serves as a quality control step for data uncertainties estimation and mesh design. We can solve possible convergence issues before attempting to couple the physical property models in a joint process.
-#
-
-# ## Magnetic inversion
-#
-# The airborne magnetic data were inverted over a range of uncertainties in order to achieve an adequate data fit. Following the smooth solution, a series of IRLS iterations were performed to recover an alternate, more compact model. The following figure shows sections through the recovered models and compares the observed and predicted data.
-#
-#
-# ```{figure} ./images/mag_model_TOP.png
-# ---
-# height: 400px
-# name: mag_model_TOP
-# ---
-# (Top) (left) Observed and (right) predicted data after convergence of the L2 (smooth) solution. Most of the data is well recovered.
-#
-# (Bottom) Horizontal slice at 255 m elevation for (left) the smooth and (right) compact magnetization models.
-# ```
-#
-#
-# [Add more here]
-#
-#
-#
-
-# ## Ground gravity inversion
-#
-# The ground gravity data (terrain corrected at 2.67 g/cc) were also inverted in the same fashion. A floor uncertainty value of 0.05 mGal was assigned.
-#
-#
-#
-# ```{figure} ./images/ground_grav_model_TOP.png
-# ---
-# height: 400px
-# name: ground_grav_model_TOP
-# ---
-# (Top) (left) Observed and (right) predicted gz data after convergence of the L2 (smooth) solution. Most of the data is well recovered.
-#
-# (Bottom) Horizontal slice for (left) the smooth and (right) L1-norm density contrast models.
-# ```
-#
-# [Add more here]
-#
-# We note a slight correlation to the shape of the known ore body
-#
-
-# ## Gravity gradiometry inversion
-#
-# The airborne tensor gravity data (terrain corrected at 2.67 g/cc) were also inverted in the same fashion. A floor uncertainty value of 0.2 Eotvos was assigned to all the components.
-#
-#
-#
-# ```{figure} ./images/grav_gradio_model_TOP.png
-# ---
-# height: 400px
-# name: grav_gradio_model_TOP
-# ---
-# (Top) (left) Observed and (right) predicted gxx data after convergence of the L2 (smooth) solution. Most of the data is well recovered.
-#
-# (Bottom) Horizontal slice for (left) the smooth and (right) L1-norm density contrast models.
-# ```
-#
-# We note a slight correlation to the shape of the known ore body
-#
-#
-#
-
-# ## Direct-current inversion
-#
-# The direct-current data are inverted with uncertainties assigned based on a background resistivity value, then converted to potentials.
-#
-# [Add details]
-#
-# The following figure shows the data fit and models recovered after convergence.
-#
-# ```{figure} ./images/dc_model_TOP.png
-# ---
-# height: 400px
-# name: dc_model_TOP.png
-# ---
-# (Top) (left) Observed and (right) predicted apparent resistivity data after convergence.
-#
-# (Bottom)
-# (Left) Horizontal section at 240 m elevation through the compact density model.
-# (Right) Vertical NS section through the recovered smooth resistivity model.
-# ```
-#
-# We note a large contrast in conductivity in plan view, mostly limited as near-surface layer. This feature can be explained by the conductive tailings.
-#
-#
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 00000000..564e64f4
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,63 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+from importlib.metadata import version
+from datetime import datetime
+from packaging.version import Version
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+project = "simpeg-drivers"
+
+# The full version, including alpha/beta/rc tags.
+release = version("simpeg-drivers")
+# The short X.Y.Z version.
+version = Version(release).base_version
+
+project_copyright = "%Y, Mira Geoscience Ltd"
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+autodoc_mock_imports = [
+ "geoapps_utils",
+ "geoh5py",
+ "numpy",
+]
+extensions = [
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.todo",
+]
+
+templates_path = ["_templates"]
+exclude_patterns = []
+todo_include_todos = True
+
+# -- Options for auto-doc ----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#module-sphinx.ext.autodoc
+
+autodoc_typehints = "signature"
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+html_theme = "alabaster"
+html_theme_options = {
+ "description": f"version {release}",
+}
+
+# Enable numref
+numfig = True
+
+
+def get_copyright_notice():
+ return f"Copyright {datetime.now().strftime(project_copyright)}"
+
+
+rst_epilog = f"""
+.. |copyright_notice| replace:: {get_copyright_notice()}.
+"""
diff --git a/docs/environment.yml b/docs/environment.yml
new file mode 100644
index 00000000..cf63975e
--- /dev/null
+++ b/docs/environment.yml
@@ -0,0 +1,24 @@
+name: geoh5py_docs
+
+channels:
+ - conda-forge
+ - defaults
+dependencies:
+ - python=3.10
+ - matplotlib
+ - scipy
+ - h5py
+ - pip
+ - ipykernel
+ - jupyter-book
+ - jupytext
+ - pip:
+ - sphinx
+ - sphinx_issues
+ - sphinx_rtd_theme
+ - sphinxcontrib-bibtex
+ - sphinxcontrib-googleanalytics
+ - nbsphinx
+ - nbstripout
+ - numpydoc
+ - jupyter_client
diff --git a/docs/intro.md b/docs/intro.md
index 60477fb6..e6f98703 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -17,4 +17,4 @@ This document contains training material for geophysical inversions using [SimPE
```{bibliography}
```
- Copyright (c) 2024 Mira Geoscience Ltd.
+ Copyright (c) 2024-2025 Mira Geoscience Ltd.
diff --git a/docs/inversion/data_misfit.ipynb b/docs/inversion/data_misfit.ipynb
index f0d26735..7eea502e 100644
--- a/docs/inversion/data_misfit.ipynb
+++ b/docs/inversion/data_misfit.ipynb
@@ -2,14 +2,14 @@
"cells": [
{
"cell_type": "markdown",
- "id": "ade53bd5",
+ "id": "43572ed1",
"metadata": {},
"source": [
"(data_misfit)=\n",
"\n",
- "# Data Misfit\n",
+ "# Data Fitting\n",
"\n",
- "This section focuses on the misfit function $\\phi_d$ and related data uncertainties. The data misfit function measures the quality of a model $\\mathbf{m}$ at **fitting the observed data**. It generally takes the form\n",
+ "The data misfit function ($\\phi_d$) measures the quality of a model $\\mathbf{m}$ at **fitting the observed data**. It generally takes the form\n",
"\n",
"$$\n",
"\\phi_d =\\sum_{i=1}^{N}\\left(\\frac{d_i^{pred} - {d}_i^{obs}}{w_i}\\right)^2 \\;.\n",
@@ -32,10 +32,10 @@
},
{
"cell_type": "markdown",
- "id": "331f6bcb",
+ "id": "87147577",
"metadata": {},
"source": [
- "## Data Uncertainties\n",
+ "## Uncertainties\n",
"\n",
"As mentioned in the [Data Misfit](#Data-Misfit) section, we want to assign **data uncertainties** that reflect our inability to perfectly replicate the observed data, within an acceptable level. While many strategies can be used, we are going to demonstrate basic principles to assess the effectiveness of a chosen method. We will employ two basic strategies:\n",
"\n",
@@ -47,7 +47,7 @@
},
{
"cell_type": "markdown",
- "id": "aac9c087",
+ "id": "dd92ed2a",
"metadata": {},
"source": [
"\n",
@@ -57,7 +57,7 @@
},
{
"cell_type": "markdown",
- "id": "e7bac8e9",
+ "id": "83b654f4",
"metadata": {},
"source": [
"### Constant floor\n",
@@ -69,7 +69,7 @@
},
{
"cell_type": "markdown",
- "id": "e170ac62",
+ "id": "5654bc96",
"metadata": {},
"source": [
"#### Noise floor too high\n",
@@ -79,7 +79,7 @@
},
{
"cell_type": "markdown",
- "id": "e83cef43",
+ "id": "71e3c748",
"metadata": {},
"source": [
"\n",
@@ -88,7 +88,7 @@
},
{
"cell_type": "markdown",
- "id": "4a4db1ad",
+ "id": "26d078f5",
"metadata": {},
"source": [
"#### Noise floor too low\n",
@@ -98,7 +98,7 @@
},
{
"cell_type": "markdown",
- "id": "ee338b12",
+ "id": "fa52fa82",
"metadata": {},
"source": [
"\n",
@@ -107,7 +107,7 @@
},
{
"cell_type": "markdown",
- "id": "0211e3c6",
+ "id": "e9b971fa",
"metadata": {},
"source": [
"#### Optimal\n",
@@ -117,7 +117,7 @@
},
{
"cell_type": "markdown",
- "id": "8655de8f",
+ "id": "76ac8e8d",
"metadata": {},
"source": [
"\n",
@@ -126,7 +126,7 @@
},
{
"cell_type": "markdown",
- "id": "e8f4b70a",
+ "id": "81f6f40e",
"metadata": {},
"source": [
"### Amplitude (%)\n",
@@ -144,7 +144,7 @@
},
{
"cell_type": "markdown",
- "id": "354d97cd",
+ "id": "c9ec4ef5",
"metadata": {},
"source": [
"\n",
@@ -153,7 +153,7 @@
},
{
"cell_type": "markdown",
- "id": "0b30b695",
+ "id": "464c0560",
"metadata": {},
"source": [
"## Summary\n",
diff --git a/docs/inversion/data_misfit.py b/docs/inversion/data_misfit.py
index e081758d..3475cd5e 100644
--- a/docs/inversion/data_misfit.py
+++ b/docs/inversion/data_misfit.py
@@ -5,7 +5,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
@@ -14,9 +14,9 @@
# (data_misfit)=
#
-# # Data Misfit
+# # Data Fitting
#
-# This section focuses on the misfit function $\phi_d$ and related data uncertainties. The data misfit function measures the quality of a model $\mathbf{m}$ at **fitting the observed data**. It generally takes the form
+# The data misfit function ($\phi_d$) measures the quality of a model $\mathbf{m}$ at **fitting the observed data**. It generally takes the form
#
# $$
# \phi_d =\sum_{i=1}^{N}\left(\frac{d_i^{pred} - {d}_i^{obs}}{w_i}\right)^2 \;.
@@ -36,7 +36,7 @@
#
# In all cases, we may never expect the data residual to completely vanish, but we may allow it to be within an *acceptable* level of fitness for modelling purposes.
-# ## Data Uncertainties
+# ## Uncertainties
#
# As mentioned in the [Data Misfit](#Data-Misfit) section, we want to assign **data uncertainties** that reflect our inability to perfectly replicate the observed data, within an acceptable level. While many strategies can be used, we are going to demonstrate basic principles to assess the effectiveness of a chosen method. We will employ two basic strategies:
#
diff --git a/docs/inversion/fundamentals.ipynb b/docs/inversion/fundamentals.ipynb
index 4a36bbe9..b9cd8b5f 100644
--- a/docs/inversion/fundamentals.ipynb
+++ b/docs/inversion/fundamentals.ipynb
@@ -2,17 +2,17 @@
"cells": [
{
"cell_type": "markdown",
- "id": "39f62ec6",
+ "id": "a42f5996",
"metadata": {},
"source": [
- "# Inversion Fundamentals\n",
+ "# Background\n",
"\n",
"This section provides the mathematical background to understand the inversion algorithm. We are going to use standard terminology and nomenclature used in the literature as a framework. Even though we are going to use mathematical expressions, it is only a vehicle to help in understanding the influence of different parameters controlling the outcome of an inversion."
]
},
{
"cell_type": "markdown",
- "id": "c96ce5dd",
+ "id": "8071f6f2",
"metadata": {},
"source": [
"## Forward simulation\n",
@@ -49,7 +49,7 @@
},
{
"cell_type": "markdown",
- "id": "d2460492",
+ "id": "a7026ba5",
"metadata": {},
"source": [
"### Example\n",
@@ -80,17 +80,20 @@
{
"cell_type": "code",
"execution_count": null,
- "id": "f601b150",
- "metadata": {},
+ "id": "ae60914b",
+ "metadata": {
+ "lines_to_next_cell": 2
+ },
"outputs": [],
"source": [
- "import numpy as np"
+ "import numpy as np\n",
+ "from numpy.linalg import LinAlgError"
]
},
{
"cell_type": "code",
"execution_count": null,
- "id": "e0fb813b",
+ "id": "f4503466",
"metadata": {},
"outputs": [],
"source": [
@@ -99,7 +102,7 @@
},
{
"cell_type": "markdown",
- "id": "3df9fec2",
+ "id": "8a0e15dc",
"metadata": {},
"source": [
"For given values for $\\mathbf{m}$, we have a way to compute data $\\mathbf{d}$. For example, for\n",
@@ -109,7 +112,7 @@
{
"cell_type": "code",
"execution_count": null,
- "id": "d62d3acf",
+ "id": "d94c5ea7",
"metadata": {},
"outputs": [],
"source": [
@@ -118,7 +121,7 @@
},
{
"cell_type": "markdown",
- "id": "04783b5e",
+ "id": "9e424a77",
"metadata": {},
"source": [
"(inverse_problem)=\n",
@@ -186,7 +189,7 @@
},
{
"cell_type": "markdown",
- "id": "56d21a9c",
+ "id": "6a3ed15c",
"metadata": {
"lines_to_next_cell": 2
},
@@ -207,7 +210,7 @@
},
{
"cell_type": "markdown",
- "id": "ee069c87",
+ "id": "c7193e8a",
"metadata": {},
"source": [
"Since $\\mathbf{F}$ does not have an inverse, we can instead solve the least-norm problem\n",
@@ -234,19 +237,19 @@
{
"cell_type": "code",
"execution_count": null,
- "id": "40ee9b73",
+ "id": "6f244a11",
"metadata": {},
"outputs": [],
"source": [
"try:\n",
" np.linalg.solve(np.dot(F.T, F), F.T * np.r_[1])\n",
- "except Exception as error:\n",
+ "except LinAlgError as error:\n",
" print(error)"
]
},
{
"cell_type": "markdown",
- "id": "de400bb8",
+ "id": "30298dfd",
"metadata": {},
"source": [
"We can get around this by adding a small value to `regularize` the system such that\n",
@@ -259,7 +262,7 @@
{
"cell_type": "code",
"execution_count": null,
- "id": "255f0896",
+ "id": "45381350",
"metadata": {},
"outputs": [],
"source": [
@@ -268,7 +271,7 @@
},
{
"cell_type": "markdown",
- "id": "b5521668",
+ "id": "11b58143",
"metadata": {},
"source": [
"We have found a solution to this under-determined problem: $m = [0.2,\\; 0.4]$. This result is known as the `least-norm` solution, which differs from the true answer $m = [0.5, \\;0.25]$. Other \"better\" solutions could be found if more information is provided to the inverse problem to push the model towards expected values. This will be the topic of the [Regularization Section](regularization.ipynb)"
@@ -276,7 +279,7 @@
},
{
"cell_type": "markdown",
- "id": "80cdc452",
+ "id": "0d6f82c2",
"metadata": {},
"source": [
""
diff --git a/docs/inversion/fundamentals.py b/docs/inversion/fundamentals.py
index 65a87baa..608b7428 100644
--- a/docs/inversion/fundamentals.py
+++ b/docs/inversion/fundamentals.py
@@ -5,14 +5,14 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
# name: python3
# ---
-# # Inversion Fundamentals
+# # Background
#
# This section provides the mathematical background to understand the inversion algorithm. We are going to use standard terminology and nomenclature used in the literature as a framework. Even though we are going to use mathematical expressions, it is only a vehicle to help in understanding the influence of different parameters controlling the outcome of an inversion.
@@ -72,6 +72,8 @@
# $$
import numpy as np
+from numpy.linalg import LinAlgError
+
F = np.c_[1, 2]
@@ -179,7 +181,7 @@
try:
np.linalg.solve(np.dot(F.T, F), F.T * np.r_[1])
-except Exception as error:
+except LinAlgError as error:
print(error)
# We can get around this by adding a small value to `regularize` the system such that
diff --git a/docs/case_study/images/common_survey.png b/docs/inversion/images/common_survey.png
similarity index 100%
rename from docs/case_study/images/common_survey.png
rename to docs/inversion/images/common_survey.png
diff --git a/docs/case_study/images/mesh_core.png b/docs/inversion/images/mesh_core.png
similarity index 100%
rename from docs/case_study/images/mesh_core.png
rename to docs/inversion/images/mesh_core.png
diff --git a/docs/case_study/images/mesh_dc.png b/docs/inversion/images/mesh_dc.png
similarity index 100%
rename from docs/case_study/images/mesh_dc.png
rename to docs/inversion/images/mesh_dc.png
diff --git a/docs/case_study/images/mesh_mag.png b/docs/inversion/images/mesh_mag.png
similarity index 100%
rename from docs/case_study/images/mesh_mag.png
rename to docs/inversion/images/mesh_mag.png
diff --git a/docs/inversion/index.ipynb b/docs/inversion/index.ipynb
index dd54f378..e3f6ce27 100644
--- a/docs/inversion/index.ipynb
+++ b/docs/inversion/index.ipynb
@@ -2,19 +2,21 @@
"cells": [
{
"cell_type": "markdown",
- "id": "9f54c216",
+ "id": "829f888e",
"metadata": {},
"source": [
- "# Theory\n",
+ "# Fundamentals\n",
"\n",
- "This module documents the use of [SimPEG](simpeg.xyz) for geophysical data inversion with user-interface (UIjson) made available through the [Mira Geoscience-geoapps](https://geoapps.readthedocs.io/en/latest/) project. While the code itself has its own documentation, there is a need to demonstrate the effect of parameters controlling the inversion. This document is meant to be a reference guide with practical examples to help practitioners with their inversion work.\n",
+ "This module documents the use of [SimPEG](simpeg.xyz) for geophysical data inversion with user-interface (UIjson) made available through the [Mira Geoscience-geoapps](https://mirageoscience-geoapps.readthedocs-hosted.com/) project. While the code itself has its own documentation, there is a need to demonstrate the effect of parameters controlling the inversion. This document is meant to be a reference guide with practical examples to help practitioners with their inversion work.\n",
"\n",
"\n",
- "- [Inversion Fundamentals](fundamentals.ipynb): An overview of the inversion framework.\n",
+ "- [Background](fundamentals.ipynb): An overview of the inversion framework.\n",
"\n",
- "- [Data Misfit](data_misfit.ipynb): Assigning data uncertainties and target.\n",
+ "- [Data Fit](data_misfit.ipynb): Assigning uncertainties and global target (data misfit).\n",
"\n",
- "- [Regularization](regularization.ipynb): Adding modeling constraints on the solution.\n",
+ "- [Constraints](regularization.ipynb): Adding modeling constraints (regularization).\n",
+ "\n",
+ "- [Mesh Design](mesh_design.ipynb): Designing an inversion mesh.\n",
"\n",
"- [Joint/Coupling Strategies](joint_inversion.ipynb): Inverting multiple geophysical surveys.\n",
"\n",
diff --git a/docs/inversion/index.py b/docs/inversion/index.py
index e7bb2dcd..149a8ae2 100644
--- a/docs/inversion/index.py
+++ b/docs/inversion/index.py
@@ -5,23 +5,29 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
# name: python3
# ---
-# # Theory
+# # Fundamentals
#
-# This module documents the use of [SimPEG](simpeg.xyz) for geophysical data inversion with user-interface (UIjson) made available through the [Mira Geoscience-geoapps](https://geoapps.readthedocs.io/en/latest/) project. While the code itself has its own documentation, there is a need to demonstrate the effect of parameters controlling the inversion. This document is meant to be a reference guide with practical examples to help practitioners with their inversion work.
+# This module documents the use of [SimPEG](simpeg.xyz) for geophysical data inversion with user-interface (UIjson) made
+# available through the [Mira Geoscience-geoapps](https://mirageoscience-geoapps.readthedocs-hosted.com/) project.
+# While the code itself has its own documentation, there is a need to demonstrate the effect of parameters controlling
+# the inversion.
+# This document is meant to be a reference guide with practical examples to help practitioners with their inversion work.
#
#
-# - [Inversion Fundamentals](fundamentals.ipynb): An overview of the inversion framework.
+# - [Background](fundamentals.ipynb): An overview of the inversion framework.
#
-# - [Data Misfit](data_misfit.ipynb): Assigning data uncertainties and target.
+# - [Data Fit](data_misfit.ipynb): Assigning uncertainties and global target (data misfit).
#
-# - [Regularization](regularization.ipynb): Adding modeling constraints on the solution.
+# - [Constraints](regularization.ipynb): Adding modeling constraints (regularization).
+#
+# - [Mesh Design](mesh_design.ipynb): Designing an inversion mesh.
#
# - [Joint/Coupling Strategies](joint_inversion.ipynb): Inverting multiple geophysical surveys.
#
diff --git a/docs/inversion/joint_inversion.ipynb b/docs/inversion/joint_inversion.ipynb
index b235ca4e..b914998f 100644
--- a/docs/inversion/joint_inversion.ipynb
+++ b/docs/inversion/joint_inversion.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "id": "7d2589f5",
+ "id": "ab2fd576",
"metadata": {},
"source": [
"# Joint Inversion\n",
@@ -12,7 +12,7 @@
},
{
"cell_type": "markdown",
- "id": "f3e1dd2d",
+ "id": "207b4838",
"metadata": {},
"source": [
"## Joint Surveys Inversion\n",
@@ -47,7 +47,7 @@
},
{
"cell_type": "markdown",
- "id": "07876198",
+ "id": "385b1054",
"metadata": {},
"source": [
"## Joint Properties Inversion\n",
@@ -77,7 +77,7 @@
},
{
"cell_type": "markdown",
- "id": "1cc609d2",
+ "id": "4a96278c",
"metadata": {},
"source": [
"(cross-gradient)=\n",
@@ -117,7 +117,7 @@
},
{
"cell_type": "markdown",
- "id": "0b01cd60",
+ "id": "d7626eeb",
"metadata": {},
"source": [
"## Mesh creation\n",
diff --git a/docs/inversion/joint_inversion.py b/docs/inversion/joint_inversion.py
index 38ae03ee..87ef0a3b 100644
--- a/docs/inversion/joint_inversion.py
+++ b/docs/inversion/joint_inversion.py
@@ -5,7 +5,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
diff --git a/docs/case_study/mesh_design.ipynb b/docs/inversion/mesh_design.ipynb
similarity index 94%
rename from docs/case_study/mesh_design.ipynb
rename to docs/inversion/mesh_design.ipynb
index e2dbf17c..23c54a9f 100644
--- a/docs/case_study/mesh_design.ipynb
+++ b/docs/inversion/mesh_design.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "id": "4d815240",
+ "id": "0b07d9b6",
"metadata": {},
"source": [
"\n",
@@ -53,6 +53,8 @@
"\n",
"The area of interest covers roughly 2 km in width. As a general rule of thumb, the padding region should be at least as wide as the data extent in order to easily model features with wavelengths that may extend beyond the surveyed area.\n",
"\n",
+ "(diffusion-distance)=\n",
+ "\n",
"In the case of EM modeling, we also need to consider the diffusion distance of the EM fields. The [skin depth](http://em.geosci.xyz/content/maxwell1_fundamentals/harmonic_planewaves_homogeneous/skindepth.html?highlight=skin%20depth#approximations) can be estimated by\n",
"\n",
"$$\n",
@@ -65,10 +67,16 @@
"\n",
"\n",
"$$\n",
- "\\delta = \\sqrt{\\frac{2t \\; \\rho}{\\mu_0}}\n",
+ "\\delta = \\sqrt{\\frac{2t \\; \\rho}{\\mu_0}} \\approx 1261 \\sqrt{t \\; \\rho}\n",
"$$\n",
"\n",
- "where $t$ is the largest time measured by the system and $\\mu_0$ is the permeability of free space ($4 \\pi * 1e-7$).\n",
+ "where $t\\;(sec)$ is the largest time measured by the system, $\\rho \\; (\\Omega.m)$ is the expected resistivity of the background and $\\mu_0 \\; (4 \\pi * 1e-7)$ is the permeability of free space.\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
"\n",
"\n",
"```{figure} ./images/mesh_core.png\n",
@@ -83,7 +91,7 @@
},
{
"cell_type": "markdown",
- "id": "31c534a8",
+ "id": "12394e6c",
"metadata": {},
"source": [
"## Refinements\n",
diff --git a/docs/case_study/mesh_design.py b/docs/inversion/mesh_design.py
similarity index 94%
rename from docs/case_study/mesh_design.py
rename to docs/inversion/mesh_design.py
index c2bb83c5..38dcae53 100644
--- a/docs/case_study/mesh_design.py
+++ b/docs/inversion/mesh_design.py
@@ -5,7 +5,7 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
@@ -60,6 +60,8 @@
#
# The area of interest covers roughly 2 km in width. As a general rule of thumb, the padding region should be at least as wide as the data extent in order to easily model features with wavelengths that may extend beyond the surveyed area.
#
+# (diffusion-distance)=
+#
# In the case of EM modeling, we also need to consider the diffusion distance of the EM fields. The [skin depth](http://em.geosci.xyz/content/maxwell1_fundamentals/harmonic_planewaves_homogeneous/skindepth.html?highlight=skin%20depth#approximations) can be estimated by
#
# $$
@@ -72,10 +74,16 @@
#
#
# $$
-# \delta = \sqrt{\frac{2t \; \rho}{\mu_0}}
+# \delta = \sqrt{\frac{2t \; \rho}{\mu_0}} \approx 1261 \sqrt{t \; \rho}
# $$
#
-# where $t$ is the largest time measured by the system and $\mu_0$ is the permeability of free space ($4 \pi * 1e-7$).
+# where $t\;(sec)$ is the largest time measured by the system, $\rho \; (\Omega.m)$ is the expected resistivity of the background and $\mu_0 \; (4 \pi * 1e-7)$ is the permeability of free space.
+#
+#
+#
+#
+#
+#
#
#
# ```{figure} ./images/mesh_core.png
diff --git a/docs/inversion/regularization.ipynb b/docs/inversion/regularization.ipynb
index 3087d83d..86837ecd 100644
--- a/docs/inversion/regularization.ipynb
+++ b/docs/inversion/regularization.ipynb
@@ -2,14 +2,15 @@
"cells": [
{
"cell_type": "markdown",
- "id": "773ee150",
+ "id": "3a9fd274",
"metadata": {},
"source": [
- "# Regularization\n",
+ "# Constraints (Regularization)\n",
"\n",
"This section focuses on the regularization functions, or constraints, that can be used to inject \"geological knowledge\" into the inversion process. More specifically, this section covers the weighted least-squares regularization functions:\n",
"\n",
"- [Conventional L2-norm](l2-norm)\n",
+ "\n",
"- [General Lp-norms](lp-norm)\n",
"\n",
"While often referred to as an \"unconstrained inversion\", one could argue that the conventional model norm regularizations do still incorporate some degree of geological information, at least in the form of physical property distribution. Exactly what kind of a priori information is available dictates the complexity of the constraints. For more advanced petrophysical and/or geometric constraints, see the [Joint Inversion](#joint_inversion.ipynb) section."
@@ -17,7 +18,7 @@
},
{
"cell_type": "markdown",
- "id": "da138760",
+ "id": "3e78e630",
"metadata": {},
"source": [
"(l2-norm)=\n",
@@ -107,7 +108,7 @@
},
{
"cell_type": "markdown",
- "id": "e137a3b6",
+ "id": "d1c00010",
"metadata": {},
"source": [
"(lp-norm)=\n",
@@ -161,7 +162,7 @@
},
{
"cell_type": "markdown",
- "id": "28ea7696",
+ "id": "a89bf21c",
"metadata": {},
"source": [
"### Smallness norm model\n",
@@ -193,7 +194,7 @@
},
{
"cell_type": "markdown",
- "id": "e1d4c976",
+ "id": "24179e0b",
"metadata": {},
"source": [
"### Smoothness norm model\n",
@@ -265,7 +266,7 @@
},
{
"cell_type": "markdown",
- "id": "71e7fd8b",
+ "id": "4487f435",
"metadata": {},
"source": [
"## Mixed norms\n",
@@ -277,7 +278,7 @@
},
{
"cell_type": "markdown",
- "id": "dbea14fa",
+ "id": "2bf887ab",
"metadata": {},
"source": [
"\n"
diff --git a/docs/inversion/regularization.py b/docs/inversion/regularization.py
index e3a99a06..a1c575ea 100644
--- a/docs/inversion/regularization.py
+++ b/docs/inversion/regularization.py
@@ -5,18 +5,19 @@
# extension: .py
# format_name: light
# format_version: '1.5'
-# jupytext_version: 1.16.1
+# jupytext_version: 1.16.2
# kernelspec:
# display_name: Python 3 (ipykernel)
# language: python
# name: python3
# ---
-# # Regularization
+# # Constraints (Regularization)
#
# This section focuses on the regularization functions, or constraints, that can be used to inject "geological knowledge" into the inversion process. More specifically, this section covers the weighted least-squares regularization functions:
#
# - [Conventional L2-norm](l2-norm)
+#
# - [General Lp-norms](lp-norm)
#
# While often referred to as an "unconstrained inversion", one could argue that the conventional model norm regularizations do still incorporate some degree of geological information, at least in the form of physical property distribution. Exactly what kind of a priori information is available dictates the complexity of the constraints. For more advanced petrophysical and/or geometric constraints, see the [Joint Inversion](#joint_inversion.ipynb) section.
diff --git a/environments/env-python-3.11.yml b/environments/env-python-3.11.yml
new file mode 100644
index 00000000..6e378495
--- /dev/null
+++ b/environments/env-python-3.11.yml
@@ -0,0 +1,3 @@
+dependencies:
+ - python=3.11.*
+ - 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
index 2af33aab..3e8d4bba 100644
--- a/environments/py-3.10-linux-64-dev.conda.lock.yml
+++ b/environments/py-3.10-linux-64-dev.conda.lock.yml
@@ -1,6 +1,6 @@
# Generated by conda-lock.
# platform: linux-64
-# input_hash: ab8c9e219f39f1e1321a0ec789c64e159af623c9370b7c6db9835a64a21963a6
+# input_hash: ec5a523b4ce7f232ede7867031463ce89704b5d545a70f157ff54241149da1b3
channels:
- conda-forge
@@ -8,276 +8,300 @@ channels:
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
- - accessible-pygments=0.0.5=pyhd8ed1ab_0
+ - accessible-pygments=0.0.5=pyhd8ed1ab_1
- alabaster=0.7.16=pyhd8ed1ab_0
- - annotated-types=0.7.0=pyhd8ed1ab_0
- - anyio=3.7.1=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py310h2372a71_4
+ - annotated-types=0.7.0=pyhd8ed1ab_1
+ - anyio=4.8.0=pyhd8ed1ab_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.2.4=py310hff52083_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - babel=2.14.0=pyhd8ed1ab_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - bleach=6.1.0=pyhd8ed1ab_0
- - brotli=1.1.0=hd590300_1
- - brotli-bin=1.1.0=hd590300_1
- - brotli-python=1.1.0=py310hc6cd4ac_1
+ - astroid=3.3.8=py310hff52083_0
+ - asttokens=3.0.0=pyhd8ed1ab_1
+ - async-lru=2.0.4=pyhd8ed1ab_1
+ - attrs=24.3.0=pyh71513ae_0
+ - babel=2.16.0=pyhd8ed1ab_1
+ - beautifulsoup4=4.12.3=pyha770c72_1
+ - bleach=6.2.0=pyhd8ed1ab_3
+ - bleach-with-css=6.2.0=hd8ed1ab_3
+ - brotli=1.1.0=hb9d3cd8_2
+ - brotli-bin=1.1.0=hb9d3cd8_2
+ - brotli-python=1.1.0=py310hf71b8c6_2
- bzip2=1.0.8=h4bc722e_7
- - c-ares=1.32.3=h4bc722e_0
- - ca-certificates=2024.7.4=hbcca054_0
+ - c-ares=1.34.4=hb9d3cd8_0
+ - ca-certificates=2024.12.14=hbcca054_0
- cached-property=1.5.2=hd8ed1ab_1
- cached_property=1.5.2=pyha770c72_1
- - certifi=2024.7.4=pyhd8ed1ab_0
- - cffi=1.16.0=py310h2fee648_0
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - click=8.1.7=unix_pyh707e725_0
- - 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.6.0=py310h5b4e0ec_0
- - cycler=0.12.1=pyhd8ed1ab_0
- - cytoolz=0.12.3=py310h2372a71_0
- - dask-core=2022.10.2=pyhd8ed1ab_0
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py310h8deb56e_0
+ - charset-normalizer=3.4.1=pyhd8ed1ab_0
+ - click=8.1.8=pyh707e725_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - comm=0.2.2=pyhd8ed1ab_1
+ - contourpy=1.3.1=py310h3788b33_0
+ - coverage=7.6.10=py310h89163eb_0
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py310ha75aee5_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
- dataclasses=0.8=pyhc8e2a94_3
- - debugpy=1.8.2=py310h76e45a6_0
- - decorator=5.1.1=pyhd8ed1ab_0
+ - debugpy=1.8.11=py310hf71b8c6_0
+ - decorator=5.1.1=pyhd8ed1ab_1
- defusedxml=0.7.1=pyhd8ed1ab_0
- - dill=0.3.8=pyhd8ed1ab_0
+ - dill=0.3.9=pyhd8ed1ab_1
- discretize=0.10.0=py310hcb52e73_1
- - distributed=2022.10.2=pyhd8ed1ab_0
- - docutils=0.18.1=py310hff52083_1
- - empymod=2.3.1=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.2=pyhd8ed1ab_0
- - executing=2.0.1=pyhd8ed1ab_0
- - fasteners=0.17.3=pyhd8ed1ab_0
- - fonttools=4.53.1=py310h5b4e0ec_0
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - docutils=0.19=py310hff52083_1
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_1
+ - exceptiongroup=1.2.2=pyhd8ed1ab_1
+ - executing=2.1.0=pyhd8ed1ab_1
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py310h89163eb_1
+ - fqdn=1.5.1=pyhd8ed1ab_1
- freetype=2.12.1=h267a509_2
- fsspec=2022.11.0=pyhd8ed1ab_0
- - geoana=0.4.0=py310hbf28c38_1
- - greenlet=3.0.3=py310hc6cd4ac_0
- - h2=4.1.0=pyhd8ed1ab_0
- - h5py=3.11.0=nompi_py310hf054cd7_102
- - hdf5=1.14.3=nompi_hdf9ad27_105
- - hpack=4.0.0=pyh9f0ad1d_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=75.1=he02047a_0
- - idna=3.7=pyhd8ed1ab_0
+ - geoana=0.5.0=py310hcb52e73_4
+ - greenlet=3.1.1=py310hf71b8c6_1
+ - h11=0.14.0=pyhd8ed1ab_1
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py310hacc6608_103
+ - hdf5=1.14.4=nompi_h2d575fe_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - httpcore=1.0.7=pyh29332c3_1
+ - httpx=0.28.1=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - idna=3.10=pyhd8ed1ab_1
- imagesize=1.4.1=pyhd8ed1ab_0
- - importlib-metadata=8.2.0=pyha770c72_0
- - importlib_metadata=8.2.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - iniconfig=2.0.0=pyhd8ed1ab_0
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - importlib_resources=6.5.2=pyhd8ed1ab_0
+ - iniconfig=2.0.0=pyhd8ed1ab_1
- ipykernel=6.29.5=pyh3099207_0
- - ipython=8.26.0=pyh707e725_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=7.8.3=pyhd8ed1ab_0
- - isort=5.13.2=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - joblib=1.4.2=pyhd8ed1ab_0
- - jsonschema=4.23.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jupyter-book=0.15.1=pyhd8ed1ab_0
- - jupyter-cache=0.6.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.9=pyhd8ed1ab_0
- - jupytext=1.16.3=pyhd8ed1ab_0
+ - ipython=8.31.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_2
+ - ipywidgets=7.8.5=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_1
+ - isort=5.13.2=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=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.11.0=pyhd8ed1ab_0
+ - jupyter_server=2.15.0=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1
+ - jupyterlab=4.3.4=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2
+ - jupyterlab_server=2.27.3=pyhd8ed1ab_1
+ - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0
+ - jupytext=1.16.6=pyh80e38bb_0
- keyutils=1.6.1=h166bdaf_0
- - kiwisolver=1.4.5=py310hd41b1e2_1
+ - kiwisolver=1.4.7=py310h3788b33_0
- krb5=1.21.3=h659f571_0
- latexcodec=2.0.1=pyh9f0ad1d_0
- lcms2=2.16=hb7c19ff_0
- - ld_impl_linux-64=2.40=hf3520f5_7
+ - ld_impl_linux-64=2.43=h712a8e2_2
- lerc=4.0.0=h27087fc_0
- libaec=1.1.3=h59595ed_0
- - libblas=3.9.0=16_linux64_mkl
- - libbrotlicommon=1.1.0=hd590300_1
- - libbrotlidec=1.1.0=hd590300_1
- - libbrotlienc=1.1.0=hd590300_1
- - libcblas=3.9.0=16_linux64_mkl
- - libcurl=8.9.0=hdb1bdb2_0
- - libdeflate=1.20=hd590300_0
- - libdlf=0.2.0=pyhd8ed1ab_0
- - libedit=3.1.20191231=he28a2e2_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
+ - libcblas=3.9.0=20_linux64_mkl
+ - libcurl=8.11.1=h332b0f4_0
+ - libdeflate=1.23=h4ddbbb0_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
+ - libedit=3.1.20240808=pl5321h7949ede_0
- libev=4.33=hd590300_2
- libffi=3.4.2=h7f98852_5
- - libgcc-ng=14.1.0=h77fa898_0
- - libgfortran-ng=14.1.0=h69a702a_0
- - libgfortran5=14.1.0=hc5f4f2c_0
+ - libgcc=14.2.0=h77fa898_1
+ - libgcc-ng=14.2.0=h69a702a_1
+ - libgfortran=14.2.0=h69a702a_1
+ - libgfortran5=14.2.0=hd5240d6_1
- libhwloc=2.11.1=default_hecaa2ac_1000
- libiconv=1.17=hd590300_2
- libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=16_linux64_mkl
+ - liblapack=3.9.0=20_linux64_mkl
- libllvm14=14.0.6=hcd5def8_4
- - libnghttp2=1.58.0=h47da74e_1
+ - liblzma=5.6.3=hb9d3cd8_1
+ - libnghttp2=1.64.0=h161d5f1_0
- libnsl=2.0.1=hd590300_0
- - libpng=1.6.43=h2797004_0
- - libsodium=1.0.18=h36c2ea0_1
- - libsqlite=3.46.0=hde9e2c9_0
- - libssh2=1.11.0=h0841786_0
- - libstdcxx-ng=14.1.0=hc0a3c3a_0
- - libtiff=4.6.0=h1dd3fc0_3
+ - libpng=1.6.45=h943b412_0
+ - libsodium=1.0.20=h4ab18f5_0
+ - libsqlite=3.47.2=hee588c1_0
+ - libssh2=1.11.1=hf672d98_0
+ - libstdcxx=14.2.0=hc0a3c3a_1
+ - libstdcxx-ng=14.2.0=h4852527_1
+ - libtiff=4.7.0=hd9ff511_3
- libuuid=2.38.1=h0b41bf4_0
- - libwebp-base=1.4.0=hd590300_0
- - libxcb=1.16=hd590300_0
+ - libwebp-base=1.5.0=h851e524_0
+ - libxcb=1.17.0=h8a09558_0
- libxcrypt=4.4.36=hd590300_1
- - libxml2=2.12.7=he7c6b58_4
- - libzlib=1.3.1=h4ab18f5_1
- - linkify-it-py=2.0.3=pyhd8ed1ab_0
- - llvm-openmp=18.1.8=hf5423f3_0
- - llvmlite=0.43.0=py310h4c7c693_0
+ - libxml2=2.13.5=h0d44e9d_1
+ - libzlib=1.3.1=hb9d3cd8_2
+ - linkify-it-py=2.0.3=pyhd8ed1ab_1
+ - llvm-openmp=19.1.6=h024ca30_0
+ - llvmlite=0.43.0=py310h1a6248f_1
- locket=1.0.0=pyhd8ed1ab_0
- markdown-it-py=2.2.0=pyhd8ed1ab_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
- - mdit-py-plugins=0.4.1=pyhd8ed1ab_0
- - mdurl=0.1.2=pyhd8ed1ab_0
- - mistune=3.0.2=pyhd8ed1ab_0
- - mkl=2022.1.0=h84fe81f_915
- - msgpack-python=1.0.8=py310h25c7140_0
+ - markupsafe=3.0.2=py310h89163eb_1
+ - matplotlib-base=3.8.4=py310hef631a5_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
+ - mistune=3.1.0=pyhd8ed1ab_0
+ - mkl=2023.2.0=h84fe81f_50496
+ - msgpack-python=1.1.0=py310h3788b33_0
- munkres=1.1.4=pyh9f0ad1d_0
- - myst-nb=0.17.2=pyhd8ed1ab_0
- - myst-parser=0.18.1=pyhd8ed1ab_0
- - nbclassic=1.1.0=pyhd8ed1ab_0
- - nbclient=0.7.4=pyhd8ed1ab_0
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - ncurses=6.5=h59595ed_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - notebook=6.5.7=pyha770c72_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
+ - myst-nb=1.1.2=pyhd8ed1ab_1
+ - myst-parser=1.0.0=pyhd8ed1ab_0
+ - nbclient=0.10.2=pyhd8ed1ab_0
+ - nbconvert=7.16.5=hd8ed1ab_1
+ - nbconvert-core=7.16.5=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.5=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_1
+ - ncurses=6.5=he02047a_1
+ - nest-asyncio=1.6.0=pyhd8ed1ab_1
+ - notebook=7.3.2=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_1
- numba=0.60.0=py310h5dc88bb_0
- - numcodecs=0.12.1=py310h76e45a6_1
- - numpy=1.23.5=py310h53a5b5f_0
- - openjpeg=2.5.2=h488ebb8_0
- - openssl=3.3.1=h4bc722e_2
- - packaging=24.1=pyhd8ed1ab_0
- - pandas=2.2.2=py310hf9f9076_1
+ - numcodecs=0.13.1=py310h5eaa309_0
+ - numpy=1.26.4=py310hb13e2d6_0
+ - openjpeg=2.5.3=h5fbd93e_0
+ - openssl=3.4.0=h7b32b05_1
+ - overrides=7.7.0=pyhd8ed1ab_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py310h5eaa309_1
+ - pandoc=3.6.1=ha770c72_0
- pandocfilters=1.5.0=pyhd8ed1ab_0
- - parso=0.8.4=pyhd8ed1ab_0
+ - parso=0.8.4=pyhd8ed1ab_1
- partd=1.4.2=pyhd8ed1ab_0
- - pexpect=4.9.0=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
+ - pexpect=4.9.0=pyhd8ed1ab_1
+ - pickleshare=0.7.5=pyhd8ed1ab_1004
- pillow=10.3.0=py310hebfe307_1
- - pip=24.0=pyhd8ed1ab_0
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - pooch=1.8.2=pyhd8ed1ab_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - psutil=6.0.0=py310hc51659f_0
- - pthread-stubs=0.4=h36c2ea0_1001
- - ptyprocess=0.7.0=pyhd3deb0d_0
- - pure_eval=0.2.3=pyhd8ed1ab_0
- - pybtex=0.24.0=pyhd8ed1ab_2
- - pybtex-docutils=1.0.3=py310hff52083_1
- - pycparser=2.22=pyhd8ed1ab_0
- - pydantic=2.5.3=pyhd8ed1ab_0
- - pydantic-core=2.14.6=py310hcb5633a_1
+ - pip=24.3.1=pyh8b19718_2
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2
+ - platformdirs=4.3.6=pyhd8ed1ab_1
+ - pluggy=1.5.0=pyhd8ed1ab_1
+ - prometheus_client=0.21.1=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.48=pyha770c72_1
+ - psutil=6.1.1=py310ha75aee5_0
+ - pthread-stubs=0.4=hb9d3cd8_1002
+ - ptyprocess=0.7.0=pyhd8ed1ab_1
+ - 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.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py310h505e2c1_0
- pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0
- - pydiso=0.0.3=py310h1dd1467_4
- - pygments=2.18.0=pyhd8ed1ab_0
- - pylint=3.2.6=pyhd8ed1ab_0
+ - pydiso=0.1.2=py310h7b68af5_0
+ - pygments=2.19.1=pyhd8ed1ab_0
+ - pylint=3.3.3=pyhd8ed1ab_0
- pymatsolver=0.2.0=ha770c72_3
- pymatsolver-base=0.2.0=pyh44b312d_3
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pysocks=1.7.1=pyha2e5f31_6
- - pytest=8.3.2=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.20.0=pyhd8ed1ab_0
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - 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=4_cp310
+ - python_abi=3.10=5_cp310
- pytz=2024.1=pyhd8ed1ab_0
- - pyyaml=6.0.1=py310h2372a71_1
- - pyzmq=26.0.3=py310h6883aea_0
+ - pyyaml=6.0.2=py310ha75aee5_1
+ - pyzmq=26.2.0=py310h71f11fc_3
- readline=8.2=h8228510_1
- - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_0
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rpds-py=0.19.1=py310h42e942d_0
+ - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1
+ - referencing=0.35.1=pyhd8ed1ab_1
+ - requests=2.32.3=pyhd8ed1ab_1
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_1
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
+ - rpds-py=0.22.3=py310h505e2c1_0
- scikit-learn=1.4.2=py310h981052a_1
- - scipy=1.10.1=py310ha4c1d20_3
- - scooby=0.10.0=pyhd8ed1ab_0
- - send2trash=1.8.3=pyh0d859eb_0
- - setuptools=71.0.4=pyhd8ed1ab_0
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
+ - scipy=1.14.1=py310hfcf56fc_2
+ - send2trash=1.8.3=pyh0d859eb_1
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
+ - sniffio=1.3.1=pyhd8ed1ab_1
- snowballstemmer=2.2.0=pyhd8ed1ab_0
- sortedcontainers=2.4.0=pyhd8ed1ab_0
- soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=5.0.2=pyh6c4a22f_0
- - sphinx-book-theme=1.0.1=pyhd8ed1ab_0
- - sphinx-comments=0.0.3=pyh9f0ad1d_0
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinx-design=0.3.0=pyhd8ed1ab_0
- - sphinx-external-toc=0.3.1=pyhd8ed1ab_1
- - sphinx-jupyterbook-latex=0.5.2=pyhd8ed1ab_0
- - sphinx-multitoc-numbering=0.1.3=pyhd8ed1ab_0
- - sphinx-thebe=0.2.1=pyhd8ed1ab_0
+ - 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_0
+ - sphinxcontrib-applehelp=2.0.0=pyhd8ed1ab_1
- sphinxcontrib-bibtex=2.5.0=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=2.0.0=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.1.0=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sqlalchemy=2.0.31=py310hc51659f_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - tabulate=0.9.0=pyhd8ed1ab_1
- - tbb=2021.12.0=h434a139_3
- - tblib=3.0.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.37=py310ha75aee5_0
+ - stack_data=0.6.3=pyhd8ed1ab_1
+ - tabulate=0.9.0=pyhd8ed1ab_2
+ - tbb=2021.12.0=h84d6215_4
+ - tblib=3.0.0=pyhd8ed1ab_1
- terminado=0.18.1=pyh0d859eb_0
- threadpoolctl=3.5.0=pyhc1e730c_0
- - tinycss2=1.3.0=pyhd8ed1ab_0
+ - tinycss2=1.4.0=pyhd8ed1ab_0
- tk=8.6.13=noxft_h4845f30_101
- - toml=0.10.2=pyhd8ed1ab_0
- - tomli=2.0.1=pyhd8ed1ab_0
- - tomlkit=0.13.0=pyha770c72_0
- - toolz=0.12.1=pyhd8ed1ab_0
- - tornado=6.1=py310h5764c6d_3
- - tqdm=4.66.4=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - tzdata=2024a=h0c530f3_0
- - uc-micro-py=1.0.3=pyhd8ed1ab_0
- - unicodedata2=15.1.0=py310h2372a71_0
- - urllib3=2.2.2=pyhd8ed1ab_1
- - utm=0.7.0=pyhd8ed1ab_0
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=3.6.8=pyhd8ed1ab_0
- - xorg-libxau=1.0.11=hd590300_0
- - xorg-libxdmcp=1.1.3=h7f98852_0
- - xz=5.2.6=h166bdaf_0
+ - 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
+ - tzdata=2024b=hc8b5060_0
+ - uc-micro-py=1.0.3=pyhd8ed1ab_1
+ - unicodedata2=15.1.0=py310ha75aee5_1
+ - uri-template=1.3.0=pyhd8ed1ab_1
+ - urllib3=2.3.0=pyhd8ed1ab_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
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - widgetsnbextension=3.6.10=pyhd8ed1ab_0
+ - xorg-libxau=1.0.12=hb9d3cd8_0
+ - xorg-libxdmcp=1.1.5=hb9d3cd8_0
- yaml=0.2.5=h7f98852_2
- zarr=2.14.2=pyhd8ed1ab_0
- - zeromq=4.3.5=h75354e8_4
- - zict=3.0.0=pyhd8ed1ab_0
- - zipp=3.19.2=pyhd8ed1ab_0
- - zstandard=0.23.0=py310h64cae3c_0
+ - zeromq=4.3.5=h3b0a872_7
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py310ha39cb0e_1
- zstd=1.5.6=ha6fb4c9_0
- pip:
- - geoapps-utils === 0.3.0 --hash=sha256:c5bc5169d35105a4d0bead9b43a4c115a45ec82852fc8b02700a2b8b28b31abc
- - geoh5py === 0.9.0 --hash=sha256:dd2d16a9ed409f4bad13e165d1ad81641e3be941ba35c6c6a66a8ed4950271f7
- - mira-simpeg === 0.19.0.8 --hash=sha256:af1b216d4126bc0b9668c395842d6203c06e5720a3e3395e78de34cc19f09841
- - octree-creation-app === 0.1.1 --hash=sha256:0a3c93b029e63df520b91d3aca29a40f7839cb8a152bf99e87b177573198a15f
- - param-sweeps === 0.1.8 --hash=sha256:ea43e35f1e88933352adb193a5adf49b71188891dfb6224589cfa88b4422d5d7
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
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
index a03d3123..51f1ac10 100644
--- a/environments/py-3.10-linux-64.conda.lock.yml
+++ b/environments/py-3.10-linux-64.conda.lock.yml
@@ -1,6 +1,6 @@
# Generated by conda-lock.
# platform: linux-64
-# input_hash: ab8c9e219f39f1e1321a0ec789c64e159af623c9370b7c6db9835a64a21963a6
+# input_hash: ec5a523b4ce7f232ede7867031463ce89704b5d545a70f157ff54241149da1b3
channels:
- conda-forge
@@ -8,155 +8,152 @@ channels:
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_kmp_llvm
- - annotated-types=0.7.0=pyhd8ed1ab_0
+ - annotated-types=0.7.0=pyhd8ed1ab_1
- asciitree=0.3.3=py_2
- - brotli=1.1.0=hd590300_1
- - brotli-bin=1.1.0=hd590300_1
- - brotli-python=1.1.0=py310hc6cd4ac_1
+ - brotli=1.1.0=hb9d3cd8_2
+ - brotli-bin=1.1.0=hb9d3cd8_2
+ - brotli-python=1.1.0=py310hf71b8c6_2
- bzip2=1.0.8=h4bc722e_7
- - c-ares=1.32.3=h4bc722e_0
- - ca-certificates=2024.7.4=hbcca054_0
+ - c-ares=1.34.4=hb9d3cd8_0
+ - ca-certificates=2024.12.14=hbcca054_0
- cached-property=1.5.2=hd8ed1ab_1
- cached_property=1.5.2=pyha770c72_1
- - certifi=2024.7.4=pyhd8ed1ab_0
- - cffi=1.16.0=py310h2fee648_0
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - click=8.1.7=unix_pyh707e725_0
- - cloudpickle=3.0.0=pyhd8ed1ab_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - contourpy=1.2.1=py310hd41b1e2_0
- - cycler=0.12.1=pyhd8ed1ab_0
- - cytoolz=0.12.3=py310h2372a71_0
- - dask-core=2022.10.2=pyhd8ed1ab_0
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py310h8deb56e_0
+ - click=8.1.8=pyh707e725_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - contourpy=1.3.1=py310h3788b33_0
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py310ha75aee5_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
- discretize=0.10.0=py310hcb52e73_1
- - distributed=2022.10.2=pyhd8ed1ab_0
- - empymod=2.3.1=pyhd8ed1ab_0
- - fasteners=0.17.3=pyhd8ed1ab_0
- - fonttools=4.53.1=py310h5b4e0ec_0
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py310h89163eb_1
- freetype=2.12.1=h267a509_2
- fsspec=2022.11.0=pyhd8ed1ab_0
- - geoana=0.4.0=py310hbf28c38_1
- - h2=4.1.0=pyhd8ed1ab_0
- - h5py=3.11.0=nompi_py310hf054cd7_102
- - hdf5=1.14.3=nompi_hdf9ad27_105
- - hpack=4.0.0=pyh9f0ad1d_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - icu=75.1=he02047a_0
- - idna=3.7=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - joblib=1.4.2=pyhd8ed1ab_0
+ - geoana=0.5.0=py310hcb52e73_4
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py310hacc6608_103
+ - hdf5=1.14.4=nompi_h2d575fe_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - jinja2=3.1.5=pyhd8ed1ab_0
+ - joblib=1.4.2=pyhd8ed1ab_1
- keyutils=1.6.1=h166bdaf_0
- - kiwisolver=1.4.5=py310hd41b1e2_1
+ - kiwisolver=1.4.7=py310h3788b33_0
- krb5=1.21.3=h659f571_0
- lcms2=2.16=hb7c19ff_0
- - ld_impl_linux-64=2.40=hf3520f5_7
+ - ld_impl_linux-64=2.43=h712a8e2_2
- lerc=4.0.0=h27087fc_0
- libaec=1.1.3=h59595ed_0
- - libblas=3.9.0=16_linux64_mkl
- - libbrotlicommon=1.1.0=hd590300_1
- - libbrotlidec=1.1.0=hd590300_1
- - libbrotlienc=1.1.0=hd590300_1
- - libcblas=3.9.0=16_linux64_mkl
- - libcurl=8.9.0=hdb1bdb2_0
- - libdeflate=1.20=hd590300_0
- - libdlf=0.2.0=pyhd8ed1ab_0
- - libedit=3.1.20191231=he28a2e2_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
+ - libcblas=3.9.0=20_linux64_mkl
+ - libcurl=8.11.1=h332b0f4_0
+ - libdeflate=1.23=h4ddbbb0_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
+ - libedit=3.1.20240808=pl5321h7949ede_0
- libev=4.33=hd590300_2
- libffi=3.4.2=h7f98852_5
- - libgcc-ng=14.1.0=h77fa898_0
- - libgfortran-ng=14.1.0=h69a702a_0
- - libgfortran5=14.1.0=hc5f4f2c_0
+ - libgcc=14.2.0=h77fa898_1
+ - libgcc-ng=14.2.0=h69a702a_1
+ - libgfortran=14.2.0=h69a702a_1
+ - libgfortran5=14.2.0=hd5240d6_1
- libhwloc=2.11.1=default_hecaa2ac_1000
- libiconv=1.17=hd590300_2
- libjpeg-turbo=3.0.0=hd590300_1
- - liblapack=3.9.0=16_linux64_mkl
+ - liblapack=3.9.0=20_linux64_mkl
- libllvm14=14.0.6=hcd5def8_4
- - libnghttp2=1.58.0=h47da74e_1
+ - liblzma=5.6.3=hb9d3cd8_1
+ - libnghttp2=1.64.0=h161d5f1_0
- libnsl=2.0.1=hd590300_0
- - libpng=1.6.43=h2797004_0
- - libsqlite=3.46.0=hde9e2c9_0
- - libssh2=1.11.0=h0841786_0
- - libstdcxx-ng=14.1.0=hc0a3c3a_0
- - libtiff=4.6.0=h1dd3fc0_3
+ - libpng=1.6.45=h943b412_0
+ - libsqlite=3.47.2=hee588c1_0
+ - libssh2=1.11.1=hf672d98_0
+ - libstdcxx=14.2.0=hc0a3c3a_1
+ - libstdcxx-ng=14.2.0=h4852527_1
+ - libtiff=4.7.0=hd9ff511_3
- libuuid=2.38.1=h0b41bf4_0
- - libwebp-base=1.4.0=hd590300_0
- - libxcb=1.16=hd590300_0
+ - libwebp-base=1.5.0=h851e524_0
+ - libxcb=1.17.0=h8a09558_0
- libxcrypt=4.4.36=hd590300_1
- - libxml2=2.12.7=he7c6b58_4
- - libzlib=1.3.1=h4ab18f5_1
- - llvm-openmp=18.1.8=hf5423f3_0
- - llvmlite=0.43.0=py310h4c7c693_0
+ - libxml2=2.13.5=h0d44e9d_1
+ - libzlib=1.3.1=hb9d3cd8_2
+ - llvm-openmp=19.1.6=h024ca30_0
+ - llvmlite=0.43.0=py310h1a6248f_1
- locket=1.0.0=pyhd8ed1ab_0
- - markupsafe=2.1.5=py310h2372a71_0
- - matplotlib-base=3.7.3=py310h62c0568_0
- - mkl=2022.1.0=h84fe81f_915
- - msgpack-python=1.0.8=py310h25c7140_0
+ - markupsafe=3.0.2=py310h89163eb_1
+ - matplotlib-base=3.8.4=py310hef631a5_2
+ - mkl=2023.2.0=h84fe81f_50496
+ - msgpack-python=1.1.0=py310h3788b33_0
- munkres=1.1.4=pyh9f0ad1d_0
- - ncurses=6.5=h59595ed_0
+ - ncurses=6.5=he02047a_1
- numba=0.60.0=py310h5dc88bb_0
- - numcodecs=0.12.1=py310h76e45a6_1
- - numpy=1.23.5=py310h53a5b5f_0
- - openjpeg=2.5.2=h488ebb8_0
- - openssl=3.3.1=h4bc722e_2
- - packaging=24.1=pyhd8ed1ab_0
- - pandas=2.2.2=py310hf9f9076_1
+ - numcodecs=0.13.1=py310h5eaa309_0
+ - numpy=1.26.4=py310hb13e2d6_0
+ - openjpeg=2.5.3=h5fbd93e_0
+ - openssl=3.4.0=h7b32b05_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py310h5eaa309_1
- partd=1.4.2=pyhd8ed1ab_0
- pillow=10.3.0=py310hebfe307_1
- - pip=24.0=pyhd8ed1ab_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pooch=1.8.2=pyhd8ed1ab_0
- - psutil=6.0.0=py310hc51659f_0
- - pthread-stubs=0.4=h36c2ea0_1001
- - pycparser=2.22=pyhd8ed1ab_0
- - pydantic=2.5.3=pyhd8ed1ab_0
- - pydantic-core=2.14.6=py310hcb5633a_1
- - pydiso=0.0.3=py310h1dd1467_4
+ - pip=24.3.1=pyh8b19718_2
+ - psutil=6.1.1=py310ha75aee5_0
+ - pthread-stubs=0.4=hb9d3cd8_1002
+ - pycparser=2.22=pyh29332c3_1
+ - pydantic=2.10.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py310h505e2c1_0
+ - pydiso=0.1.2=py310h7b68af5_0
- pymatsolver=0.2.0=ha770c72_3
- pymatsolver-base=0.2.0=pyh44b312d_3
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pysocks=1.7.1=pyha2e5f31_6
- - python=3.10.14=hd12c33a_0_cpython
- - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - pysocks=1.7.1=pyha55dd90_7
+ - python=3.10.16=he725a3c_1_cpython
+ - python-dateutil=2.9.0.post0=pyhff2d567_1
- python-tzdata=2023.4=pyhd8ed1ab_0
- - python_abi=3.10=4_cp310
+ - python_abi=3.10=5_cp310
- pytz=2024.1=pyhd8ed1ab_0
- - pyyaml=6.0.1=py310h2372a71_1
+ - pyyaml=6.0.2=py310ha75aee5_1
- readline=8.2=h8228510_1
- - requests=2.32.3=pyhd8ed1ab_0
- scikit-learn=1.4.2=py310h981052a_1
- - scipy=1.10.1=py310ha4c1d20_3
- - scooby=0.10.0=pyhd8ed1ab_0
- - setuptools=71.0.4=pyhd8ed1ab_0
- - six=1.16.0=pyh6c4a22f_0
+ - scipy=1.14.1=py310hfcf56fc_2
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
- sortedcontainers=2.4.0=pyhd8ed1ab_0
- - tbb=2021.12.0=h434a139_3
- - tblib=3.0.0=pyhd8ed1ab_0
+ - tbb=2021.12.0=h84d6215_4
+ - tblib=3.0.0=pyhd8ed1ab_1
- threadpoolctl=3.5.0=pyhc1e730c_0
- tk=8.6.13=noxft_h4845f30_101
- - toolz=0.12.1=pyhd8ed1ab_0
- - tornado=6.1=py310h5764c6d_3
- - tqdm=4.66.4=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - tzdata=2024a=h0c530f3_0
- - unicodedata2=15.1.0=py310h2372a71_0
- - urllib3=2.2.2=pyhd8ed1ab_1
- - utm=0.7.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - xorg-libxau=1.0.11=hd590300_0
- - xorg-libxdmcp=1.1.3=h7f98852_0
- - xz=5.2.6=h166bdaf_0
+ - toolz=1.0.0=pyhd8ed1ab_1
+ - tornado=6.4.2=py310ha75aee5_0
+ - tqdm=4.67.1=pyhd8ed1ab_1
+ - typing-extensions=4.12.2=hd8ed1ab_1
+ - typing_extensions=4.12.2=pyha770c72_1
+ - tzdata=2024b=hc8b5060_0
+ - unicodedata2=15.1.0=py310ha75aee5_1
+ - urllib3=2.3.0=pyhd8ed1ab_0
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - xorg-libxau=1.0.12=hb9d3cd8_0
+ - xorg-libxdmcp=1.1.5=hb9d3cd8_0
- yaml=0.2.5=h7f98852_2
- zarr=2.14.2=pyhd8ed1ab_0
- - zict=3.0.0=pyhd8ed1ab_0
- - zstandard=0.23.0=py310h64cae3c_0
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py310ha39cb0e_1
- zstd=1.5.6=ha6fb4c9_0
- pip:
- - geoapps-utils === 0.3.0 --hash=sha256:c5bc5169d35105a4d0bead9b43a4c115a45ec82852fc8b02700a2b8b28b31abc
- - geoh5py === 0.9.0 --hash=sha256:dd2d16a9ed409f4bad13e165d1ad81641e3be941ba35c6c6a66a8ed4950271f7
- - mira-simpeg === 0.19.0.8 --hash=sha256:af1b216d4126bc0b9668c395842d6203c06e5720a3e3395e78de34cc19f09841
- - octree-creation-app === 0.1.1 --hash=sha256:0a3c93b029e63df520b91d3aca29a40f7839cb8a152bf99e87b177573198a15f
- - param-sweeps === 0.1.8 --hash=sha256:ea43e35f1e88933352adb193a5adf49b71188891dfb6224589cfa88b4422d5d7
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
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
index 317edd12..fdef5841 100644
--- a/environments/py-3.10-win-64-dev.conda.lock.yml
+++ b/environments/py-3.10-win-64-dev.conda.lock.yml
@@ -1,121 +1,139 @@
# Generated by conda-lock.
# platform: win-64
-# input_hash: 91c9953be6342329650721e251aaf7f87fdca8b715eec8c2bcb5bb60c1661056
+# input_hash: ff06e16201523b792a8e62f061d23625f7aab81b95d9daddc1eb641dbe2a0968
channels:
- conda-forge
- nodefaults
dependencies:
- - accessible-pygments=0.0.5=pyhd8ed1ab_0
+ - accessible-pygments=0.0.5=pyhd8ed1ab_1
- alabaster=0.7.16=pyhd8ed1ab_0
- - annotated-types=0.7.0=pyhd8ed1ab_0
- - anyio=3.7.1=pyhd8ed1ab_0
- - argon2-cffi=23.1.0=pyhd8ed1ab_0
- - argon2-cffi-bindings=21.2.0=py310h8d17308_4
+ - annotated-types=0.7.0=pyhd8ed1ab_1
+ - anyio=4.8.0=pyhd8ed1ab_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.2.4=py310h5588dad_0
- - asttokens=2.4.1=pyhd8ed1ab_0
- - attrs=23.2.0=pyh71513ae_0
- - babel=2.14.0=pyhd8ed1ab_0
- - beautifulsoup4=4.12.3=pyha770c72_0
- - bleach=6.1.0=pyhd8ed1ab_0
- - brotli=1.1.0=hcfcfb64_1
- - brotli-bin=1.1.0=hcfcfb64_1
- - brotli-python=1.1.0=py310h00ffb61_1
+ - astroid=3.3.8=py310h5588dad_0
+ - asttokens=3.0.0=pyhd8ed1ab_1
+ - async-lru=2.0.4=pyhd8ed1ab_1
+ - attrs=24.3.0=pyh71513ae_0
+ - babel=2.16.0=pyhd8ed1ab_1
+ - beautifulsoup4=4.12.3=pyha770c72_1
+ - bleach=6.2.0=pyhd8ed1ab_3
+ - bleach-with-css=6.2.0=hd8ed1ab_3
+ - 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
- - ca-certificates=2024.7.4=h56e8100_0
+ - ca-certificates=2024.12.14=h56e8100_0
- cached-property=1.5.2=hd8ed1ab_1
- cached_property=1.5.2=pyha770c72_1
- - certifi=2024.7.4=pyhd8ed1ab_0
- - cffi=1.16.0=py310h8d17308_0
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - click=8.1.7=win_pyh7428d3b_0
- - 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.6.0=py310ha8f682b_0
- - cycler=0.12.1=pyhd8ed1ab_0
- - cytoolz=0.12.3=py310h8d17308_0
- - dask-core=2022.10.2=pyhd8ed1ab_0
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py310ha8f682b_0
+ - charset-normalizer=3.4.1=pyhd8ed1ab_0
+ - click=8.1.8=pyh7428d3b_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - comm=0.2.2=pyhd8ed1ab_1
+ - contourpy=1.3.1=py310hc19bc0b_0
+ - coverage=7.6.10=py310h38315fa_0
+ - cpython=3.10.16=py310hd8ed1ab_1
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py310ha8f682b_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
- dataclasses=0.8=pyhc8e2a94_3
- - debugpy=1.8.2=py310h9e98ed7_0
- - decorator=5.1.1=pyhd8ed1ab_0
+ - debugpy=1.8.11=py310h9e98ed7_0
+ - decorator=5.1.1=pyhd8ed1ab_1
- defusedxml=0.7.1=pyhd8ed1ab_0
- - dill=0.3.8=pyhd8ed1ab_0
+ - dill=0.3.9=pyhd8ed1ab_1
- discretize=0.10.0=py310h4856b71_1
- - distributed=2022.10.2=pyhd8ed1ab_0
- - docutils=0.18.1=py310h5588dad_1
- - empymod=2.3.1=pyhd8ed1ab_0
- - entrypoints=0.4=pyhd8ed1ab_0
- - exceptiongroup=1.2.2=pyhd8ed1ab_0
- - executing=2.0.1=pyhd8ed1ab_0
- - fasteners=0.17.3=pyhd8ed1ab_0
- - fonttools=4.53.1=py310ha8f682b_0
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - docutils=0.19=py310h5588dad_1
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_1
+ - exceptiongroup=1.2.2=pyhd8ed1ab_1
+ - executing=2.1.0=pyhd8ed1ab_1
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py310h38315fa_1
+ - fqdn=1.5.1=pyhd8ed1ab_1
- freetype=2.12.1=hdaf720e_2
- fsspec=2022.11.0=pyhd8ed1ab_0
- - geoana=0.4.0=py310h232114e_1
- - greenlet=3.0.3=py310h00ffb61_0
- - h2=4.1.0=pyhd8ed1ab_0
- - h5py=3.11.0=nompi_py310h2b0be38_102
- - hdf5=1.14.3=nompi_h2b43c12_105
- - hpack=4.0.0=pyh9f0ad1d_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - idna=3.7=pyhd8ed1ab_0
+ - geoana=0.5.0=py310h4856b71_4
+ - greenlet=3.1.1=py310h9e98ed7_1
+ - h11=0.14.0=pyhd8ed1ab_1
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py310h972678a_103
+ - hdf5=1.14.4=nompi_hd5d9e70_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - httpcore=1.0.7=pyh29332c3_1
+ - httpx=0.28.1=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - idna=3.10=pyhd8ed1ab_1
- imagesize=1.4.1=pyhd8ed1ab_0
- - importlib-metadata=8.2.0=pyha770c72_0
- - importlib_metadata=8.2.0=hd8ed1ab_0
- - importlib_resources=6.4.0=pyhd8ed1ab_0
- - iniconfig=2.0.0=pyhd8ed1ab_0
- - intel-openmp=2024.2.0=h57928b3_980
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - importlib_resources=6.5.2=pyhd8ed1ab_0
+ - iniconfig=2.0.0=pyhd8ed1ab_1
+ - intel-openmp=2023.2.0=h57928b3_50497
- ipykernel=6.29.5=pyh4bbf305_0
- - ipython=8.26.0=pyh7428d3b_0
- - ipython_genutils=0.2.0=pyhd8ed1ab_1
- - ipywidgets=7.8.3=pyhd8ed1ab_0
- - isort=5.13.2=pyhd8ed1ab_0
- - jedi=0.19.1=pyhd8ed1ab_0
- - jinja2=3.1.4=pyhd8ed1ab_0
- - joblib=1.4.2=pyhd8ed1ab_0
- - jsonschema=4.23.0=pyhd8ed1ab_0
- - jsonschema-specifications=2023.12.1=pyhd8ed1ab_0
- - jupyter-book=0.15.1=pyhd8ed1ab_0
- - jupyter-cache=0.6.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.9=pyhd8ed1ab_0
- - jupytext=1.16.3=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py310h232114e_1
+ - ipython=8.31.0=pyh7428d3b_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_2
+ - ipywidgets=7.8.5=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_1
+ - isort=5.13.2=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.11.0=pyhd8ed1ab_0
+ - jupyter_server=2.15.0=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1
+ - jupyterlab=4.3.4=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2
+ - jupyterlab_server=2.27.3=pyhd8ed1ab_1
+ - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0
+ - jupytext=1.16.6=pyh80e38bb_0
+ - kiwisolver=1.4.7=py310hc19bc0b_0
- krb5=1.21.3=hdf4eb48_0
- latexcodec=2.0.1=pyh9f0ad1d_0
- lcms2=2.16=h67d730c_0
- lerc=4.0.0=h63175ca_0
- libaec=1.1.3=h63175ca_0
- - libblas=3.9.0=18_win64_mkl
- - 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
- - libcurl=8.9.0=h18fefc2_0
- - libdeflate=1.20=hcfcfb64_0
- - libdlf=0.2.0=pyhd8ed1ab_0
+ - 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
+ - libcurl=8.11.1=h88aaa65_0
+ - libdeflate=1.23=h9062f6e_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
- libffi=3.4.2=h8ffe710_5
- libhwloc=2.11.1=default_h8125262_1000
- libiconv=1.17=hcfcfb64_2
- libjpeg-turbo=3.0.0=hcfcfb64_1
- - liblapack=3.9.0=18_win64_mkl
- - libpng=1.6.43=h19919ed_0
- - libsodium=1.0.18=h8d14728_1
- - libsqlite=3.46.0=h2466b09_0
- - libssh2=1.11.0=h7dfc565_0
- - libtiff=4.6.0=hddb2be6_3
- - libwebp-base=1.4.0=hcfcfb64_0
- - libxcb=1.16=hcd874cb_0
- - libxml2=2.12.7=h0f24e4e_4
- - libzlib=1.3.1=h2466b09_1
- - linkify-it-py=2.0.3=pyhd8ed1ab_0
- - llvmlite=0.43.0=py310h0288bfe_0
+ - liblapack=3.9.0=20_win64_mkl
+ - liblzma=5.6.3=h2466b09_1
+ - libpng=1.6.45=had7236b_0
+ - libsodium=1.0.20=hc70643c_0
+ - libsqlite=3.47.2=h67fdade_0
+ - libssh2=1.11.1=he619c9f_0
+ - libtiff=4.7.0=h797046b_3
+ - libwebp-base=1.5.0=h3b0e114_0
+ - libxcb=1.16=h013a479_1
+ - libxml2=2.13.5=he286e8c_1
+ - libzlib=1.3.1=h2466b09_2
+ - linkify-it-py=2.0.3=pyhd8ed1ab_1
+ - llvmlite=0.43.0=py310h0288bfe_1
- locket=1.0.0=pyhd8ed1ab_0
- m2w64-gcc-libgfortran=5.3.0=6
- m2w64-gcc-libs=5.3.0=7
@@ -123,155 +141,161 @@ dependencies:
- m2w64-gmp=6.1.0=2
- m2w64-libwinpthread-git=5.0.0.4634.697f757=2
- markdown-it-py=2.2.0=pyhd8ed1ab_0
- - 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
- - mdit-py-plugins=0.4.1=pyhd8ed1ab_0
- - mdurl=0.1.2=pyhd8ed1ab_0
- - mistune=3.0.2=pyhd8ed1ab_0
- - mkl=2022.1.0=h6a75c08_874
- - msgpack-python=1.0.8=py310hc19bc0b_0
+ - markupsafe=3.0.2=py310h38315fa_1
+ - matplotlib-base=3.8.4=py310hadb10a8_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
+ - mistune=3.1.0=pyhd8ed1ab_0
+ - mkl=2023.2.0=h6a75c08_50497
+ - msgpack-python=1.1.0=py310hc19bc0b_0
- msys2-conda-epoch=20160418=1
- munkres=1.1.4=pyh9f0ad1d_0
- - myst-nb=0.17.2=pyhd8ed1ab_0
- - myst-parser=0.18.1=pyhd8ed1ab_0
- - nbclassic=1.1.0=pyhd8ed1ab_0
- - nbclient=0.7.4=pyhd8ed1ab_0
- - nbconvert-core=7.16.4=pyhd8ed1ab_1
- - nbformat=5.10.4=pyhd8ed1ab_0
- - nest-asyncio=1.6.0=pyhd8ed1ab_0
- - notebook=6.5.7=pyha770c72_0
- - notebook-shim=0.2.4=pyhd8ed1ab_0
+ - myst-nb=1.1.2=pyhd8ed1ab_1
+ - myst-parser=1.0.0=pyhd8ed1ab_0
+ - nbclient=0.10.2=pyhd8ed1ab_0
+ - nbconvert=7.16.5=hd8ed1ab_1
+ - nbconvert-core=7.16.5=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.5=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_1
+ - nest-asyncio=1.6.0=pyhd8ed1ab_1
+ - notebook=7.3.2=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_1
- numba=0.60.0=py310h7793332_0
- - numcodecs=0.12.1=py310h9e98ed7_1
- - numpy=1.23.5=py310h4a8f9c9_0
- - openjpeg=2.5.2=h3d672ee_0
- - openssl=3.3.1=h2466b09_2
- - packaging=24.1=pyhd8ed1ab_0
- - pandas=2.2.2=py310hb4db72f_1
+ - numcodecs=0.13.1=py310hb4db72f_0
+ - numpy=1.26.4=py310hf667824_0
+ - openjpeg=2.5.3=h4d64b90_0
+ - openssl=3.4.0=ha4e3fda_1
+ - overrides=7.7.0=pyhd8ed1ab_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py310hb4db72f_1
+ - pandoc=3.6.1=h57928b3_0
- pandocfilters=1.5.0=pyhd8ed1ab_0
- - parso=0.8.4=pyhd8ed1ab_0
+ - parso=0.8.4=pyhd8ed1ab_1
- partd=1.4.2=pyhd8ed1ab_0
- - pickleshare=0.7.5=py_1003
+ - pickleshare=0.7.5=pyhd8ed1ab_1004
- pillow=10.3.0=py310h3e38d90_1
- - pip=24.0=pyhd8ed1ab_0
- - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pluggy=1.5.0=pyhd8ed1ab_0
- - pooch=1.8.2=pyhd8ed1ab_0
- - prometheus_client=0.20.0=pyhd8ed1ab_0
- - prompt-toolkit=3.0.47=pyha770c72_0
- - psutil=6.0.0=py310ha8f682b_0
+ - pip=24.3.1=pyh8b19718_2
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2
+ - platformdirs=4.3.6=pyhd8ed1ab_1
+ - pluggy=1.5.0=pyhd8ed1ab_1
+ - prometheus_client=0.21.1=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.48=pyha770c72_1
+ - psutil=6.1.1=py310ha8f682b_0
- pthread-stubs=0.4=hcd874cb_1001
- - pthreads-win32=2.9.1=hfa6e2cd_3
- - pure_eval=0.2.3=pyhd8ed1ab_0
- - pybtex=0.24.0=pyhd8ed1ab_2
- - pybtex-docutils=1.0.3=py310h5588dad_1
- - pycparser=2.22=pyhd8ed1ab_0
- - pydantic=2.5.3=pyhd8ed1ab_0
- - pydantic-core=2.14.6=py310h87d50f1_1
+ - pthreads-win32=2.9.1=h2466b09_4
+ - 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.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py310hc226416_0
- pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0
- - pydiso=0.0.3=py310h847dae0_4
- - pygments=2.18.0=pyhd8ed1ab_0
- - pylint=3.2.6=pyhd8ed1ab_0
+ - pydiso=0.1.2=py310h5da8fee_0
+ - pygments=2.19.1=pyhd8ed1ab_0
+ - pylint=3.3.3=pyhd8ed1ab_0
- pymatsolver=0.2.0=ha770c72_3
- pymatsolver-base=0.2.0=pyh44b312d_3
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pysocks=1.7.1=pyh0701188_6
- - pytest=8.3.2=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.20.0=pyhd8ed1ab_0
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - 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=4_cp310
+ - python_abi=3.10=5_cp310
- pytz=2024.1=pyhd8ed1ab_0
- - pywin32=306=py310h00ffb61_2
- - pywinpty=2.0.13=py310h00ffb61_0
- - pyyaml=6.0.1=py310h8d17308_1
- - pyzmq=26.0.3=py310h656833d_0
- - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_0
- - referencing=0.35.1=pyhd8ed1ab_0
- - requests=2.32.3=pyhd8ed1ab_0
- - rpds-py=0.19.1=py310hc226416_0
+ - pywin32=307=py310h9e98ed7_3
+ - pywinpty=2.0.14=py310h9e98ed7_0
+ - pyyaml=6.0.2=py310ha8f682b_1
+ - pyzmq=26.2.0=py310h656833d_3
+ - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1
+ - referencing=0.35.1=pyhd8ed1ab_1
+ - requests=2.32.3=pyhd8ed1ab_1
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_1
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
+ - rpds-py=0.22.3=py310hc226416_0
- scikit-learn=1.4.2=py310hf2a6c47_1
- - scipy=1.10.1=py310h578b7cb_3
- - scooby=0.10.0=pyhd8ed1ab_0
- - send2trash=1.8.3=pyh5737063_0
- - setuptools=71.0.4=pyhd8ed1ab_0
- - six=1.16.0=pyh6c4a22f_0
- - sniffio=1.3.1=pyhd8ed1ab_0
+ - scipy=1.14.1=py310hbd0dde3_2
+ - send2trash=1.8.3=pyh5737063_1
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
+ - sniffio=1.3.1=pyhd8ed1ab_1
- snowballstemmer=2.2.0=pyhd8ed1ab_0
- sortedcontainers=2.4.0=pyhd8ed1ab_0
- soupsieve=2.5=pyhd8ed1ab_1
- - sphinx=5.0.2=pyh6c4a22f_0
- - sphinx-book-theme=1.0.1=pyhd8ed1ab_0
- - sphinx-comments=0.0.3=pyh9f0ad1d_0
- - sphinx-copybutton=0.5.2=pyhd8ed1ab_0
- - sphinx-design=0.3.0=pyhd8ed1ab_0
- - sphinx-external-toc=0.3.1=pyhd8ed1ab_1
- - sphinx-jupyterbook-latex=0.5.2=pyhd8ed1ab_0
- - sphinx-multitoc-numbering=0.1.3=pyhd8ed1ab_0
- - sphinx-thebe=0.2.1=pyhd8ed1ab_0
+ - 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_0
+ - sphinxcontrib-applehelp=2.0.0=pyhd8ed1ab_1
- sphinxcontrib-bibtex=2.5.0=pyhd8ed1ab_0
- - sphinxcontrib-devhelp=2.0.0=pyhd8ed1ab_0
- - sphinxcontrib-htmlhelp=2.1.0=pyhd8ed1ab_0
- - sphinxcontrib-jsmath=1.0.1=pyhd8ed1ab_0
- - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_0
- - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_0
- - sqlalchemy=2.0.31=py310ha8f682b_0
- - stack_data=0.6.2=pyhd8ed1ab_0
- - tabulate=0.9.0=pyhd8ed1ab_1
- - tbb=2021.12.0=hc790b64_3
- - tblib=3.0.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.37=py310ha8f682b_0
+ - stack_data=0.6.3=pyhd8ed1ab_1
+ - tabulate=0.9.0=pyhd8ed1ab_2
+ - tbb=2021.12.0=hc790b64_4
+ - tblib=3.0.0=pyhd8ed1ab_1
- terminado=0.18.1=pyh5737063_0
- threadpoolctl=3.5.0=pyhc1e730c_0
- - tinycss2=1.3.0=pyhd8ed1ab_0
+ - tinycss2=1.4.0=pyhd8ed1ab_0
- tk=8.6.13=h5226925_1
- - toml=0.10.2=pyhd8ed1ab_0
- - tomli=2.0.1=pyhd8ed1ab_0
- - tomlkit=0.13.0=pyha770c72_0
- - toolz=0.12.1=pyhd8ed1ab_0
- - tornado=6.1=py310he2412df_3
- - tqdm=4.66.4=pyhd8ed1ab_0
- - traitlets=5.14.3=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - tzdata=2024a=h0c530f3_0
- - uc-micro-py=1.0.3=pyhd8ed1ab_0
- - ucrt=10.0.22621.0=h57928b3_0
- - unicodedata2=15.1.0=py310h8d17308_0
- - urllib3=2.2.2=pyhd8ed1ab_1
- - utm=0.7.0=pyhd8ed1ab_0
- - vc=14.3=h8a93ad2_20
- - vc14_runtime=14.40.33810=ha82c5b3_20
- - vs2015_runtime=14.40.33810=h3bf8584_20
- - wcwidth=0.2.13=pyhd8ed1ab_0
- - webencodings=0.5.1=pyhd8ed1ab_2
- - websocket-client=1.8.0=pyhd8ed1ab_0
- - wheel=0.43.0=pyhd8ed1ab_1
- - widgetsnbextension=3.6.8=pyhd8ed1ab_0
- - win_inet_pton=1.1.0=pyhd8ed1ab_6
+ - 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=2024b=hc8b5060_0
+ - uc-micro-py=1.0.3=pyhd8ed1ab_1
+ - ucrt=10.0.22621.0=h57928b3_1
+ - unicodedata2=15.1.0=py310ha8f682b_1
+ - uri-template=1.3.0=pyhd8ed1ab_1
+ - urllib3=2.3.0=pyhd8ed1ab_0
+ - vc=14.3=ha32ba9b_23
+ - vc14_runtime=14.42.34433=he29a5d6_23
+ - vs2015_runtime=14.42.34433=hdffcdeb_23
+ - 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
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - widgetsnbextension=3.6.10=pyhd8ed1ab_0
+ - win_inet_pton=1.1.0=pyh7428d3b_8
- winpty=0.4.3=4
- 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.5=he1f189c_4
- - zict=3.0.0=pyhd8ed1ab_0
- - zipp=3.19.2=pyhd8ed1ab_0
- - zstandard=0.23.0=py310he5e10e1_0
+ - zeromq=4.3.5=ha9f60a1_7
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py310he5e10e1_1
- zstd=1.5.6=h0ea2cb4_0
- pip:
- - geoapps-utils === 0.3.0 --hash=sha256:c5bc5169d35105a4d0bead9b43a4c115a45ec82852fc8b02700a2b8b28b31abc
- - geoh5py === 0.9.0 --hash=sha256:dd2d16a9ed409f4bad13e165d1ad81641e3be941ba35c6c6a66a8ed4950271f7
- - mira-simpeg === 0.19.0.8 --hash=sha256:af1b216d4126bc0b9668c395842d6203c06e5720a3e3395e78de34cc19f09841
- - octree-creation-app === 0.1.1 --hash=sha256:0a3c93b029e63df520b91d3aca29a40f7839cb8a152bf99e87b177573198a15f
- - param-sweeps === 0.1.8 --hash=sha256:ea43e35f1e88933352adb193a5adf49b71188891dfb6224589cfa88b4422d5d7
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
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
index 70768d12..9a378f4b 100644
--- a/environments/py-3.10-win-64.conda.lock.yml
+++ b/environments/py-3.10-win-64.conda.lock.yml
@@ -1,155 +1,151 @@
# Generated by conda-lock.
# platform: win-64
-# input_hash: 91c9953be6342329650721e251aaf7f87fdca8b715eec8c2bcb5bb60c1661056
+# input_hash: ff06e16201523b792a8e62f061d23625f7aab81b95d9daddc1eb641dbe2a0968
channels:
- conda-forge
- nodefaults
dependencies:
- - annotated-types=0.7.0=pyhd8ed1ab_0
+ - annotated-types=0.7.0=pyhd8ed1ab_1
- asciitree=0.3.3=py_2
- - brotli=1.1.0=hcfcfb64_1
- - brotli-bin=1.1.0=hcfcfb64_1
- - brotli-python=1.1.0=py310h00ffb61_1
+ - 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
- - ca-certificates=2024.7.4=h56e8100_0
+ - ca-certificates=2024.12.14=h56e8100_0
- cached-property=1.5.2=hd8ed1ab_1
- cached_property=1.5.2=pyha770c72_1
- - certifi=2024.7.4=pyhd8ed1ab_0
- - cffi=1.16.0=py310h8d17308_0
- - charset-normalizer=3.3.2=pyhd8ed1ab_0
- - click=8.1.7=win_pyh7428d3b_0
- - cloudpickle=3.0.0=pyhd8ed1ab_0
- - colorama=0.4.6=pyhd8ed1ab_0
- - contourpy=1.2.1=py310h232114e_0
- - cycler=0.12.1=pyhd8ed1ab_0
- - cytoolz=0.12.3=py310h8d17308_0
- - dask-core=2022.10.2=pyhd8ed1ab_0
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py310ha8f682b_0
+ - click=8.1.8=pyh7428d3b_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - contourpy=1.3.1=py310hc19bc0b_0
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py310ha8f682b_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
- discretize=0.10.0=py310h4856b71_1
- - distributed=2022.10.2=pyhd8ed1ab_0
- - empymod=2.3.1=pyhd8ed1ab_0
- - fasteners=0.17.3=pyhd8ed1ab_0
- - fonttools=4.53.1=py310ha8f682b_0
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py310h38315fa_1
- freetype=2.12.1=hdaf720e_2
- fsspec=2022.11.0=pyhd8ed1ab_0
- - geoana=0.4.0=py310h232114e_1
- - h2=4.1.0=pyhd8ed1ab_0
- - h5py=3.11.0=nompi_py310h2b0be38_102
- - hdf5=1.14.3=nompi_h2b43c12_105
- - hpack=4.0.0=pyh9f0ad1d_0
- - hyperframe=6.0.1=pyhd8ed1ab_0
- - idna=3.7=pyhd8ed1ab_0
- - intel-openmp=2024.2.0=h57928b3_980
- - jinja2=3.1.4=pyhd8ed1ab_0
- - joblib=1.4.2=pyhd8ed1ab_0
- - kiwisolver=1.4.5=py310h232114e_1
+ - geoana=0.5.0=py310h4856b71_4
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py310h972678a_103
+ - hdf5=1.14.4=nompi_hd5d9e70_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - intel-openmp=2023.2.0=h57928b3_50497
+ - jinja2=3.1.5=pyhd8ed1ab_0
+ - joblib=1.4.2=pyhd8ed1ab_1
+ - kiwisolver=1.4.7=py310hc19bc0b_0
- krb5=1.21.3=hdf4eb48_0
- lcms2=2.16=h67d730c_0
- lerc=4.0.0=h63175ca_0
- libaec=1.1.3=h63175ca_0
- - libblas=3.9.0=18_win64_mkl
- - 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
- - libcurl=8.9.0=h18fefc2_0
- - libdeflate=1.20=hcfcfb64_0
- - libdlf=0.2.0=pyhd8ed1ab_0
+ - 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
+ - libcurl=8.11.1=h88aaa65_0
+ - libdeflate=1.23=h9062f6e_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
- libffi=3.4.2=h8ffe710_5
- libhwloc=2.11.1=default_h8125262_1000
- libiconv=1.17=hcfcfb64_2
- libjpeg-turbo=3.0.0=hcfcfb64_1
- - liblapack=3.9.0=18_win64_mkl
- - libpng=1.6.43=h19919ed_0
- - libsqlite=3.46.0=h2466b09_0
- - libssh2=1.11.0=h7dfc565_0
- - libtiff=4.6.0=hddb2be6_3
- - libwebp-base=1.4.0=hcfcfb64_0
- - libxcb=1.16=hcd874cb_0
- - libxml2=2.12.7=h0f24e4e_4
- - libzlib=1.3.1=h2466b09_1
- - llvmlite=0.43.0=py310h0288bfe_0
+ - liblapack=3.9.0=20_win64_mkl
+ - liblzma=5.6.3=h2466b09_1
+ - libpng=1.6.45=had7236b_0
+ - libsqlite=3.47.2=h67fdade_0
+ - libssh2=1.11.1=he619c9f_0
+ - libtiff=4.7.0=h797046b_3
+ - libwebp-base=1.5.0=h3b0e114_0
+ - libxcb=1.16=h013a479_1
+ - libxml2=2.13.5=he286e8c_1
+ - libzlib=1.3.1=h2466b09_2
+ - llvmlite=0.43.0=py310h0288bfe_1
- locket=1.0.0=pyhd8ed1ab_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
- - mkl=2022.1.0=h6a75c08_874
- - msgpack-python=1.0.8=py310hc19bc0b_0
+ - markupsafe=3.0.2=py310h38315fa_1
+ - matplotlib-base=3.8.4=py310hadb10a8_2
+ - mkl=2023.2.0=h6a75c08_50497
+ - msgpack-python=1.1.0=py310hc19bc0b_0
- msys2-conda-epoch=20160418=1
- munkres=1.1.4=pyh9f0ad1d_0
- numba=0.60.0=py310h7793332_0
- - numcodecs=0.12.1=py310h9e98ed7_1
- - numpy=1.23.5=py310h4a8f9c9_0
- - openjpeg=2.5.2=h3d672ee_0
- - openssl=3.3.1=h2466b09_2
- - packaging=24.1=pyhd8ed1ab_0
- - pandas=2.2.2=py310hb4db72f_1
+ - numcodecs=0.13.1=py310hb4db72f_0
+ - numpy=1.26.4=py310hf667824_0
+ - openjpeg=2.5.3=h4d64b90_0
+ - openssl=3.4.0=ha4e3fda_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py310hb4db72f_1
- partd=1.4.2=pyhd8ed1ab_0
- pillow=10.3.0=py310h3e38d90_1
- - pip=24.0=pyhd8ed1ab_0
- - platformdirs=4.2.2=pyhd8ed1ab_0
- - pooch=1.8.2=pyhd8ed1ab_0
- - psutil=6.0.0=py310ha8f682b_0
+ - pip=24.3.1=pyh8b19718_2
+ - psutil=6.1.1=py310ha8f682b_0
- pthread-stubs=0.4=hcd874cb_1001
- - pthreads-win32=2.9.1=hfa6e2cd_3
- - pycparser=2.22=pyhd8ed1ab_0
- - pydantic=2.5.3=pyhd8ed1ab_0
- - pydantic-core=2.14.6=py310h87d50f1_1
- - pydiso=0.0.3=py310h847dae0_4
+ - pthreads-win32=2.9.1=h2466b09_4
+ - pycparser=2.22=pyh29332c3_1
+ - pydantic=2.10.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py310hc226416_0
+ - pydiso=0.1.2=py310h5da8fee_0
- pymatsolver=0.2.0=ha770c72_3
- pymatsolver-base=0.2.0=pyh44b312d_3
- - pyparsing=3.1.2=pyhd8ed1ab_0
- - pysocks=1.7.1=pyh0701188_6
- - python=3.10.14=h4de0772_0_cpython
- - python-dateutil=2.9.0=pyhd8ed1ab_0
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - pysocks=1.7.1=pyh09c184e_7
+ - python=3.10.16=h37870fc_1_cpython
+ - python-dateutil=2.9.0.post0=pyhff2d567_1
- python-tzdata=2023.4=pyhd8ed1ab_0
- - python_abi=3.10=4_cp310
+ - python_abi=3.10=5_cp310
- pytz=2024.1=pyhd8ed1ab_0
- - pyyaml=6.0.1=py310h8d17308_1
- - requests=2.32.3=pyhd8ed1ab_0
+ - pyyaml=6.0.2=py310ha8f682b_1
- scikit-learn=1.4.2=py310hf2a6c47_1
- - scipy=1.10.1=py310h578b7cb_3
- - scooby=0.10.0=pyhd8ed1ab_0
- - setuptools=71.0.4=pyhd8ed1ab_0
- - six=1.16.0=pyh6c4a22f_0
+ - scipy=1.14.1=py310hbd0dde3_2
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
- sortedcontainers=2.4.0=pyhd8ed1ab_0
- - tbb=2021.12.0=hc790b64_3
- - tblib=3.0.0=pyhd8ed1ab_0
+ - tbb=2021.12.0=hc790b64_4
+ - tblib=3.0.0=pyhd8ed1ab_1
- threadpoolctl=3.5.0=pyhc1e730c_0
- tk=8.6.13=h5226925_1
- - toolz=0.12.1=pyhd8ed1ab_0
- - tornado=6.1=py310he2412df_3
- - tqdm=4.66.4=pyhd8ed1ab_0
- - typing-extensions=4.12.2=hd8ed1ab_0
- - typing_extensions=4.12.2=pyha770c72_0
- - tzdata=2024a=h0c530f3_0
- - ucrt=10.0.22621.0=h57928b3_0
- - unicodedata2=15.1.0=py310h8d17308_0
- - urllib3=2.2.2=pyhd8ed1ab_1
- - utm=0.7.0=pyhd8ed1ab_0
- - vc=14.3=h8a93ad2_20
- - vc14_runtime=14.40.33810=ha82c5b3_20
- - vs2015_runtime=14.40.33810=h3bf8584_20
- - wheel=0.43.0=pyhd8ed1ab_1
- - win_inet_pton=1.1.0=pyhd8ed1ab_6
+ - toolz=1.0.0=pyhd8ed1ab_1
+ - tornado=6.4.2=py310ha8f682b_0
+ - tqdm=4.67.1=pyhd8ed1ab_1
+ - typing-extensions=4.12.2=hd8ed1ab_1
+ - typing_extensions=4.12.2=pyha770c72_1
+ - tzdata=2024b=hc8b5060_0
+ - ucrt=10.0.22621.0=h57928b3_1
+ - unicodedata2=15.1.0=py310ha8f682b_1
+ - urllib3=2.3.0=pyhd8ed1ab_0
+ - vc=14.3=ha32ba9b_23
+ - vc14_runtime=14.42.34433=he29a5d6_23
+ - vs2015_runtime=14.42.34433=hdffcdeb_23
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - win_inet_pton=1.1.0=pyh7428d3b_8
- 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
- - zict=3.0.0=pyhd8ed1ab_0
- - zstandard=0.23.0=py310he5e10e1_0
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py310he5e10e1_1
- zstd=1.5.6=h0ea2cb4_0
- pip:
- - geoapps-utils === 0.3.0 --hash=sha256:c5bc5169d35105a4d0bead9b43a4c115a45ec82852fc8b02700a2b8b28b31abc
- - geoh5py === 0.9.0 --hash=sha256:dd2d16a9ed409f4bad13e165d1ad81641e3be941ba35c6c6a66a8ed4950271f7
- - mira-simpeg === 0.19.0.8 --hash=sha256:af1b216d4126bc0b9668c395842d6203c06e5720a3e3395e78de34cc19f09841
- - octree-creation-app === 0.1.1 --hash=sha256:0a3c93b029e63df520b91d3aca29a40f7839cb8a152bf99e87b177573198a15f
- - param-sweeps === 0.1.8 --hash=sha256:ea43e35f1e88933352adb193a5adf49b71188891dfb6224589cfa88b4422d5d7
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
variables:
KMP_WARNINGS: 0
diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml
new file mode 100644
index 00000000..2c940a48
--- /dev/null
+++ b/environments/py-3.11-linux-64-dev.conda.lock.yml
@@ -0,0 +1,308 @@
+# Generated by conda-lock.
+# platform: linux-64
+# input_hash: 9c3e25825af8abcb842ba2f79959145635a430c75e68f1f6da8e4712ccea421f
+
+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
+ - annotated-types=0.7.0=pyhd8ed1ab_1
+ - anyio=4.8.0=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_1
+ - argon2-cffi-bindings=21.2.0=py311h9ecbd09_5
+ - arrow=1.3.0=pyhd8ed1ab_1
+ - asciitree=0.3.3=py_2
+ - astroid=3.3.8=py311h38be061_0
+ - asttokens=3.0.0=pyhd8ed1ab_1
+ - async-lru=2.0.4=pyhd8ed1ab_1
+ - attrs=24.3.0=pyh71513ae_0
+ - babel=2.16.0=pyhd8ed1ab_1
+ - beautifulsoup4=4.12.3=pyha770c72_1
+ - bleach=6.2.0=pyhd8ed1ab_3
+ - bleach-with-css=6.2.0=hd8ed1ab_3
+ - brotli=1.1.0=hb9d3cd8_2
+ - brotli-bin=1.1.0=hb9d3cd8_2
+ - brotli-python=1.1.0=py311hfdbb021_2
+ - bzip2=1.0.8=h4bc722e_7
+ - c-ares=1.34.4=hb9d3cd8_0
+ - ca-certificates=2024.12.14=hbcca054_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py311hf29c0ef_0
+ - charset-normalizer=3.4.1=pyhd8ed1ab_0
+ - click=8.1.8=pyh707e725_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - comm=0.2.2=pyhd8ed1ab_1
+ - contourpy=1.3.1=py311hd18a35c_0
+ - coverage=7.6.10=py311h2dc5d0c_0
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py311h9ecbd09_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
+ - dataclasses=0.8=pyhc8e2a94_3
+ - debugpy=1.8.11=py311hfdbb021_0
+ - decorator=5.1.1=pyhd8ed1ab_1
+ - defusedxml=0.7.1=pyhd8ed1ab_0
+ - dill=0.3.9=pyhd8ed1ab_1
+ - discretize=0.10.0=py311h92ebd52_1
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - docutils=0.19=py311h38be061_1
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_1
+ - exceptiongroup=1.2.2=pyhd8ed1ab_1
+ - executing=2.1.0=pyhd8ed1ab_1
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py311h2dc5d0c_1
+ - fqdn=1.5.1=pyhd8ed1ab_1
+ - freetype=2.12.1=h267a509_2
+ - fsspec=2022.11.0=pyhd8ed1ab_0
+ - geoana=0.5.0=py311h92ebd52_4
+ - greenlet=3.1.1=py311hfdbb021_1
+ - h11=0.14.0=pyhd8ed1ab_1
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py311h5ed33ec_103
+ - hdf5=1.14.4=nompi_h2d575fe_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - httpcore=1.0.7=pyh29332c3_1
+ - httpx=0.28.1=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - idna=3.10=pyhd8ed1ab_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - importlib_resources=6.5.2=pyhd8ed1ab_0
+ - iniconfig=2.0.0=pyhd8ed1ab_1
+ - ipykernel=6.29.5=pyh3099207_0
+ - ipython=8.31.0=pyh707e725_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_2
+ - ipywidgets=7.8.5=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_1
+ - isort=5.13.2=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=py311h38be061_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.11.0=pyhd8ed1ab_0
+ - jupyter_server=2.15.0=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1
+ - jupyterlab=4.3.4=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2
+ - jupyterlab_server=2.27.3=pyhd8ed1ab_1
+ - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0
+ - jupytext=1.16.6=pyh80e38bb_0
+ - keyutils=1.6.1=h166bdaf_0
+ - kiwisolver=1.4.7=py311hd18a35c_0
+ - krb5=1.21.3=h659f571_0
+ - latexcodec=2.0.1=pyh9f0ad1d_0
+ - lcms2=2.16=hb7c19ff_0
+ - ld_impl_linux-64=2.43=h712a8e2_2
+ - lerc=4.0.0=h27087fc_0
+ - libaec=1.1.3=h59595ed_0
+ - 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
+ - libcblas=3.9.0=20_linux64_mkl
+ - libcurl=8.11.1=h332b0f4_0
+ - libdeflate=1.23=h4ddbbb0_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
+ - libedit=3.1.20240808=pl5321h7949ede_0
+ - libev=4.33=hd590300_2
+ - libexpat=2.6.4=h5888daf_0
+ - libffi=3.4.2=h7f98852_5
+ - libgcc=14.2.0=h77fa898_1
+ - libgcc-ng=14.2.0=h69a702a_1
+ - libgfortran=14.2.0=h69a702a_1
+ - libgfortran5=14.2.0=hd5240d6_1
+ - libhwloc=2.11.1=default_hecaa2ac_1000
+ - libiconv=1.17=hd590300_2
+ - libjpeg-turbo=3.0.0=hd590300_1
+ - liblapack=3.9.0=20_linux64_mkl
+ - libllvm14=14.0.6=hcd5def8_4
+ - liblzma=5.6.3=hb9d3cd8_1
+ - libnghttp2=1.64.0=h161d5f1_0
+ - libnsl=2.0.1=hd590300_0
+ - libpng=1.6.45=h943b412_0
+ - libsodium=1.0.20=h4ab18f5_0
+ - libsqlite=3.47.2=hee588c1_0
+ - libssh2=1.11.1=hf672d98_0
+ - libstdcxx=14.2.0=hc0a3c3a_1
+ - libstdcxx-ng=14.2.0=h4852527_1
+ - libtiff=4.7.0=hd9ff511_3
+ - libuuid=2.38.1=h0b41bf4_0
+ - libwebp-base=1.5.0=h851e524_0
+ - libxcb=1.17.0=h8a09558_0
+ - libxcrypt=4.4.36=hd590300_1
+ - libxml2=2.13.5=h0d44e9d_1
+ - libzlib=1.3.1=hb9d3cd8_2
+ - linkify-it-py=2.0.3=pyhd8ed1ab_1
+ - llvm-openmp=19.1.6=h024ca30_0
+ - llvmlite=0.43.0=py311h9c9ff8c_1
+ - locket=1.0.0=pyhd8ed1ab_0
+ - markdown-it-py=2.2.0=pyhd8ed1ab_0
+ - markupsafe=3.0.2=py311h2dc5d0c_1
+ - matplotlib-base=3.8.4=py311ha4ca890_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
+ - mistune=3.1.0=pyhd8ed1ab_0
+ - mkl=2023.2.0=h84fe81f_50496
+ - msgpack-python=1.1.0=py311hd18a35c_0
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - myst-nb=1.1.2=pyhd8ed1ab_1
+ - myst-parser=1.0.0=pyhd8ed1ab_0
+ - nbclient=0.10.2=pyhd8ed1ab_0
+ - nbconvert=7.16.5=hd8ed1ab_1
+ - nbconvert-core=7.16.5=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.5=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_1
+ - ncurses=6.5=he02047a_1
+ - nest-asyncio=1.6.0=pyhd8ed1ab_1
+ - notebook=7.3.2=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_1
+ - numba=0.60.0=py311h4bc866e_0
+ - numcodecs=0.14.1=py311h7db5c69_0
+ - numpy=1.26.4=py311h64a7726_0
+ - openjpeg=2.5.3=h5fbd93e_0
+ - openssl=3.4.0=h7b32b05_1
+ - overrides=7.7.0=pyhd8ed1ab_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py311h7db5c69_1
+ - pandoc=3.6.1=ha770c72_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - parso=0.8.4=pyhd8ed1ab_1
+ - partd=1.4.2=pyhd8ed1ab_0
+ - pexpect=4.9.0=pyhd8ed1ab_1
+ - pickleshare=0.7.5=pyhd8ed1ab_1004
+ - pillow=10.3.0=py311h82a398c_1
+ - pip=24.3.1=pyh8b19718_2
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2
+ - platformdirs=4.3.6=pyhd8ed1ab_1
+ - pluggy=1.5.0=pyhd8ed1ab_1
+ - prometheus_client=0.21.1=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.48=pyha770c72_1
+ - psutil=6.1.1=py311h9ecbd09_0
+ - pthread-stubs=0.4=hb9d3cd8_1002
+ - ptyprocess=0.7.0=pyhd8ed1ab_1
+ - pure_eval=0.2.3=pyhd8ed1ab_1
+ - pybtex=0.24.0=pyhd8ed1ab_3
+ - pybtex-docutils=1.0.3=py311h38be061_2
+ - pycparser=2.22=pyh29332c3_1
+ - pydantic=2.10.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py311h9e33e62_0
+ - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0
+ - pydiso=0.1.2=py311h979a38d_0
+ - pygments=2.19.1=pyhd8ed1ab_0
+ - pylint=3.3.3=pyhd8ed1ab_0
+ - pymatsolver=0.2.0=ha770c72_3
+ - pymatsolver-base=0.2.0=pyh44b312d_3
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - pysocks=1.7.1=pyha55dd90_7
+ - pytest=8.3.4=pyhd8ed1ab_1
+ - pytest-cov=6.0.0=pyhd8ed1ab_1
+ - python=3.11.11=h9e4cc4f_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.11=5_cp311
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pyyaml=6.0.2=py311h9ecbd09_1
+ - pyzmq=26.2.0=py311h7deb3e3_3
+ - readline=8.2=h8228510_1
+ - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1
+ - referencing=0.35.1=pyhd8ed1ab_1
+ - requests=2.32.3=pyhd8ed1ab_1
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_1
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
+ - rpds-py=0.22.3=py311h9e33e62_0
+ - scikit-learn=1.4.2=py311he08f58d_1
+ - scipy=1.14.1=py311he9a78e4_2
+ - send2trash=1.8.3=pyh0d859eb_1
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
+ - sniffio=1.3.1=pyhd8ed1ab_1
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - sortedcontainers=2.4.0=pyhd8ed1ab_0
+ - 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.37=py311h9ecbd09_0
+ - stack_data=0.6.3=pyhd8ed1ab_1
+ - tabulate=0.9.0=pyhd8ed1ab_2
+ - tbb=2021.12.0=h84d6215_4
+ - tblib=3.0.0=pyhd8ed1ab_1
+ - terminado=0.18.1=pyh0d859eb_0
+ - threadpoolctl=3.5.0=pyhc1e730c_0
+ - 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=py311h9ecbd09_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=2024b=hc8b5060_0
+ - uc-micro-py=1.0.3=pyhd8ed1ab_1
+ - unicodedata2=15.1.0=py311h9ecbd09_1
+ - uri-template=1.3.0=pyhd8ed1ab_1
+ - urllib3=2.3.0=pyhd8ed1ab_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
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - widgetsnbextension=3.6.10=pyhd8ed1ab_0
+ - xorg-libxau=1.0.12=hb9d3cd8_0
+ - xorg-libxdmcp=1.1.5=hb9d3cd8_0
+ - yaml=0.2.5=h7f98852_2
+ - zarr=2.14.2=pyhd8ed1ab_0
+ - zeromq=4.3.5=h3b0a872_7
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py311hbc35293_1
+ - zstd=1.5.6=ha6fb4c9_0
+ - pip:
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
+
+variables:
+ KMP_WARNINGS: 0
diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml
new file mode 100644
index 00000000..93fedeb4
--- /dev/null
+++ b/environments/py-3.11-linux-64.conda.lock.yml
@@ -0,0 +1,160 @@
+# Generated by conda-lock.
+# platform: linux-64
+# input_hash: 9c3e25825af8abcb842ba2f79959145635a430c75e68f1f6da8e4712ccea421f
+
+channels:
+ - conda-forge
+ - nodefaults
+dependencies:
+ - _libgcc_mutex=0.1=conda_forge
+ - _openmp_mutex=4.5=2_kmp_llvm
+ - annotated-types=0.7.0=pyhd8ed1ab_1
+ - asciitree=0.3.3=py_2
+ - brotli=1.1.0=hb9d3cd8_2
+ - brotli-bin=1.1.0=hb9d3cd8_2
+ - brotli-python=1.1.0=py311hfdbb021_2
+ - bzip2=1.0.8=h4bc722e_7
+ - c-ares=1.34.4=hb9d3cd8_0
+ - ca-certificates=2024.12.14=hbcca054_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py311hf29c0ef_0
+ - click=8.1.8=pyh707e725_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - contourpy=1.3.1=py311hd18a35c_0
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py311h9ecbd09_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
+ - discretize=0.10.0=py311h92ebd52_1
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py311h2dc5d0c_1
+ - freetype=2.12.1=h267a509_2
+ - fsspec=2022.11.0=pyhd8ed1ab_0
+ - geoana=0.5.0=py311h92ebd52_4
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py311h5ed33ec_103
+ - hdf5=1.14.4=nompi_h2d575fe_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - jinja2=3.1.5=pyhd8ed1ab_0
+ - joblib=1.4.2=pyhd8ed1ab_1
+ - keyutils=1.6.1=h166bdaf_0
+ - kiwisolver=1.4.7=py311hd18a35c_0
+ - krb5=1.21.3=h659f571_0
+ - lcms2=2.16=hb7c19ff_0
+ - ld_impl_linux-64=2.43=h712a8e2_2
+ - lerc=4.0.0=h27087fc_0
+ - libaec=1.1.3=h59595ed_0
+ - 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
+ - libcblas=3.9.0=20_linux64_mkl
+ - libcurl=8.11.1=h332b0f4_0
+ - libdeflate=1.23=h4ddbbb0_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
+ - libedit=3.1.20240808=pl5321h7949ede_0
+ - libev=4.33=hd590300_2
+ - libexpat=2.6.4=h5888daf_0
+ - libffi=3.4.2=h7f98852_5
+ - libgcc=14.2.0=h77fa898_1
+ - libgcc-ng=14.2.0=h69a702a_1
+ - libgfortran=14.2.0=h69a702a_1
+ - libgfortran5=14.2.0=hd5240d6_1
+ - libhwloc=2.11.1=default_hecaa2ac_1000
+ - libiconv=1.17=hd590300_2
+ - libjpeg-turbo=3.0.0=hd590300_1
+ - liblapack=3.9.0=20_linux64_mkl
+ - libllvm14=14.0.6=hcd5def8_4
+ - liblzma=5.6.3=hb9d3cd8_1
+ - libnghttp2=1.64.0=h161d5f1_0
+ - libnsl=2.0.1=hd590300_0
+ - libpng=1.6.45=h943b412_0
+ - libsqlite=3.47.2=hee588c1_0
+ - libssh2=1.11.1=hf672d98_0
+ - libstdcxx=14.2.0=hc0a3c3a_1
+ - libstdcxx-ng=14.2.0=h4852527_1
+ - libtiff=4.7.0=hd9ff511_3
+ - libuuid=2.38.1=h0b41bf4_0
+ - libwebp-base=1.5.0=h851e524_0
+ - libxcb=1.17.0=h8a09558_0
+ - libxcrypt=4.4.36=hd590300_1
+ - libxml2=2.13.5=h0d44e9d_1
+ - libzlib=1.3.1=hb9d3cd8_2
+ - llvm-openmp=19.1.6=h024ca30_0
+ - llvmlite=0.43.0=py311h9c9ff8c_1
+ - locket=1.0.0=pyhd8ed1ab_0
+ - markupsafe=3.0.2=py311h2dc5d0c_1
+ - matplotlib-base=3.8.4=py311ha4ca890_2
+ - mkl=2023.2.0=h84fe81f_50496
+ - msgpack-python=1.1.0=py311hd18a35c_0
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - ncurses=6.5=he02047a_1
+ - numba=0.60.0=py311h4bc866e_0
+ - numcodecs=0.14.1=py311h7db5c69_0
+ - numpy=1.26.4=py311h64a7726_0
+ - openjpeg=2.5.3=h5fbd93e_0
+ - openssl=3.4.0=h7b32b05_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py311h7db5c69_1
+ - partd=1.4.2=pyhd8ed1ab_0
+ - pillow=10.3.0=py311h82a398c_1
+ - pip=24.3.1=pyh8b19718_2
+ - psutil=6.1.1=py311h9ecbd09_0
+ - pthread-stubs=0.4=hb9d3cd8_1002
+ - pycparser=2.22=pyh29332c3_1
+ - pydantic=2.10.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py311h9e33e62_0
+ - pydiso=0.1.2=py311h979a38d_0
+ - pymatsolver=0.2.0=ha770c72_3
+ - pymatsolver-base=0.2.0=pyh44b312d_3
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - pysocks=1.7.1=pyha55dd90_7
+ - python=3.11.11=h9e4cc4f_1_cpython
+ - python-dateutil=2.9.0.post0=pyhff2d567_1
+ - python-tzdata=2023.4=pyhd8ed1ab_0
+ - python_abi=3.11=5_cp311
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pyyaml=6.0.2=py311h9ecbd09_1
+ - readline=8.2=h8228510_1
+ - scikit-learn=1.4.2=py311he08f58d_1
+ - scipy=1.14.1=py311he9a78e4_2
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
+ - sortedcontainers=2.4.0=pyhd8ed1ab_0
+ - tbb=2021.12.0=h84d6215_4
+ - tblib=3.0.0=pyhd8ed1ab_1
+ - threadpoolctl=3.5.0=pyhc1e730c_0
+ - tk=8.6.13=noxft_h4845f30_101
+ - toolz=1.0.0=pyhd8ed1ab_1
+ - tornado=6.4.2=py311h9ecbd09_0
+ - tqdm=4.67.1=pyhd8ed1ab_1
+ - typing-extensions=4.12.2=hd8ed1ab_1
+ - typing_extensions=4.12.2=pyha770c72_1
+ - tzdata=2024b=hc8b5060_0
+ - unicodedata2=15.1.0=py311h9ecbd09_1
+ - urllib3=2.3.0=pyhd8ed1ab_0
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - xorg-libxau=1.0.12=hb9d3cd8_0
+ - xorg-libxdmcp=1.1.5=hb9d3cd8_0
+ - yaml=0.2.5=h7f98852_2
+ - zarr=2.14.2=pyhd8ed1ab_0
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py311hbc35293_1
+ - zstd=1.5.6=ha6fb4c9_0
+ - pip:
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
+
+variables:
+ KMP_WARNINGS: 0
diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml
new file mode 100644
index 00000000..a0df539f
--- /dev/null
+++ b/environments/py-3.11-win-64-dev.conda.lock.yml
@@ -0,0 +1,302 @@
+# Generated by conda-lock.
+# platform: win-64
+# input_hash: 1f408dede137845ecfd9697ee5aa5178e999050353f3ec77e0b568556a08e3f3
+
+channels:
+ - conda-forge
+ - nodefaults
+dependencies:
+ - accessible-pygments=0.0.5=pyhd8ed1ab_1
+ - alabaster=0.7.16=pyhd8ed1ab_0
+ - annotated-types=0.7.0=pyhd8ed1ab_1
+ - anyio=4.8.0=pyhd8ed1ab_0
+ - argon2-cffi=23.1.0=pyhd8ed1ab_1
+ - argon2-cffi-bindings=21.2.0=py311he736701_5
+ - arrow=1.3.0=pyhd8ed1ab_1
+ - asciitree=0.3.3=py_2
+ - astroid=3.3.8=py311h1ea47a8_0
+ - asttokens=3.0.0=pyhd8ed1ab_1
+ - async-lru=2.0.4=pyhd8ed1ab_1
+ - attrs=24.3.0=pyh71513ae_0
+ - babel=2.16.0=pyhd8ed1ab_1
+ - beautifulsoup4=4.12.3=pyha770c72_1
+ - bleach=6.2.0=pyhd8ed1ab_3
+ - bleach-with-css=6.2.0=hd8ed1ab_3
+ - brotli=1.1.0=h2466b09_2
+ - brotli-bin=1.1.0=h2466b09_2
+ - brotli-python=1.1.0=py311hda3d55a_2
+ - bzip2=1.0.8=h2466b09_7
+ - ca-certificates=2024.12.14=h56e8100_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py311he736701_0
+ - charset-normalizer=3.4.1=pyhd8ed1ab_0
+ - click=8.1.8=pyh7428d3b_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - comm=0.2.2=pyhd8ed1ab_1
+ - contourpy=1.3.1=py311h3257749_0
+ - coverage=7.6.10=py311h5082efb_0
+ - cpython=3.11.11=py311hd8ed1ab_1
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py311he736701_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
+ - dataclasses=0.8=pyhc8e2a94_3
+ - debugpy=1.8.11=py311hda3d55a_0
+ - decorator=5.1.1=pyhd8ed1ab_1
+ - defusedxml=0.7.1=pyhd8ed1ab_0
+ - dill=0.3.9=pyhd8ed1ab_1
+ - discretize=0.10.0=py311h12feb9d_1
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - docutils=0.19=py311h1ea47a8_1
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - entrypoints=0.4=pyhd8ed1ab_1
+ - exceptiongroup=1.2.2=pyhd8ed1ab_1
+ - executing=2.1.0=pyhd8ed1ab_1
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py311h5082efb_1
+ - fqdn=1.5.1=pyhd8ed1ab_1
+ - freetype=2.12.1=hdaf720e_2
+ - fsspec=2022.11.0=pyhd8ed1ab_0
+ - geoana=0.5.0=py311h12feb9d_4
+ - greenlet=3.1.1=py311hda3d55a_1
+ - h11=0.14.0=pyhd8ed1ab_1
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py311haea1c80_103
+ - hdf5=1.14.4=nompi_hd5d9e70_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - httpcore=1.0.7=pyh29332c3_1
+ - httpx=0.28.1=pyhd8ed1ab_0
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - idna=3.10=pyhd8ed1ab_1
+ - imagesize=1.4.1=pyhd8ed1ab_0
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - importlib_resources=6.5.2=pyhd8ed1ab_0
+ - iniconfig=2.0.0=pyhd8ed1ab_1
+ - intel-openmp=2023.2.0=h57928b3_50497
+ - ipykernel=6.29.5=pyh4bbf305_0
+ - ipython=8.31.0=pyh7428d3b_0
+ - ipython_genutils=0.2.0=pyhd8ed1ab_2
+ - ipywidgets=7.8.5=pyhd8ed1ab_0
+ - isoduration=20.11.0=pyhd8ed1ab_1
+ - isort=5.13.2=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=py311h1ea47a8_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.11.0=pyhd8ed1ab_0
+ - jupyter_server=2.15.0=pyhd8ed1ab_0
+ - jupyter_server_terminals=0.5.3=pyhd8ed1ab_1
+ - jupyterlab=4.3.4=pyhd8ed1ab_0
+ - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2
+ - jupyterlab_server=2.27.3=pyhd8ed1ab_1
+ - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0
+ - jupytext=1.16.6=pyh80e38bb_0
+ - kiwisolver=1.4.7=py311h3257749_0
+ - krb5=1.21.3=hdf4eb48_0
+ - latexcodec=2.0.1=pyh9f0ad1d_0
+ - lcms2=2.16=h67d730c_0
+ - lerc=4.0.0=h63175ca_0
+ - libaec=1.1.3=h63175ca_0
+ - 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
+ - libcurl=8.11.1=h88aaa65_0
+ - libdeflate=1.23=h9062f6e_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
+ - libexpat=2.6.4=he0c23c2_0
+ - libffi=3.4.2=h8ffe710_5
+ - libhwloc=2.11.1=default_h8125262_1000
+ - libiconv=1.17=hcfcfb64_2
+ - libjpeg-turbo=3.0.0=hcfcfb64_1
+ - liblapack=3.9.0=20_win64_mkl
+ - liblzma=5.6.3=h2466b09_1
+ - libpng=1.6.45=had7236b_0
+ - libsodium=1.0.20=hc70643c_0
+ - libsqlite=3.47.2=h67fdade_0
+ - libssh2=1.11.1=he619c9f_0
+ - libtiff=4.7.0=h797046b_3
+ - libwebp-base=1.5.0=h3b0e114_0
+ - libxcb=1.16=h013a479_1
+ - libxml2=2.13.5=he286e8c_1
+ - libzlib=1.3.1=h2466b09_2
+ - linkify-it-py=2.0.3=pyhd8ed1ab_1
+ - llvmlite=0.43.0=py311h7deaa30_1
+ - locket=1.0.0=pyhd8ed1ab_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
+ - markdown-it-py=2.2.0=pyhd8ed1ab_0
+ - markupsafe=3.0.2=py311h5082efb_1
+ - matplotlib-base=3.8.4=py311h9b31f6e_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
+ - mistune=3.1.0=pyhd8ed1ab_0
+ - mkl=2023.2.0=h6a75c08_50497
+ - msgpack-python=1.1.0=py311h3257749_0
+ - msys2-conda-epoch=20160418=1
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - myst-nb=1.1.2=pyhd8ed1ab_1
+ - myst-parser=1.0.0=pyhd8ed1ab_0
+ - nbclient=0.10.2=pyhd8ed1ab_0
+ - nbconvert=7.16.5=hd8ed1ab_1
+ - nbconvert-core=7.16.5=pyhd8ed1ab_1
+ - nbconvert-pandoc=7.16.5=hd8ed1ab_1
+ - nbformat=5.10.4=pyhd8ed1ab_1
+ - nest-asyncio=1.6.0=pyhd8ed1ab_1
+ - notebook=7.3.2=pyhd8ed1ab_0
+ - notebook-shim=0.2.4=pyhd8ed1ab_1
+ - numba=0.60.0=py311h0673bce_0
+ - numcodecs=0.14.1=py311hcf9f919_0
+ - numpy=1.26.4=py311h0b4df5a_0
+ - openjpeg=2.5.3=h4d64b90_0
+ - openssl=3.4.0=ha4e3fda_1
+ - overrides=7.7.0=pyhd8ed1ab_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py311hcf9f919_1
+ - pandoc=3.6.1=h57928b3_0
+ - pandocfilters=1.5.0=pyhd8ed1ab_0
+ - parso=0.8.4=pyhd8ed1ab_1
+ - partd=1.4.2=pyhd8ed1ab_0
+ - pickleshare=0.7.5=pyhd8ed1ab_1004
+ - pillow=10.3.0=py311h5592be9_1
+ - pip=24.3.1=pyh8b19718_2
+ - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_2
+ - platformdirs=4.3.6=pyhd8ed1ab_1
+ - pluggy=1.5.0=pyhd8ed1ab_1
+ - prometheus_client=0.21.1=pyhd8ed1ab_0
+ - prompt-toolkit=3.0.48=pyha770c72_1
+ - psutil=6.1.1=py311he736701_0
+ - pthread-stubs=0.4=hcd874cb_1001
+ - pthreads-win32=2.9.1=h2466b09_4
+ - pure_eval=0.2.3=pyhd8ed1ab_1
+ - pybtex=0.24.0=pyhd8ed1ab_3
+ - pybtex-docutils=1.0.3=py311h1ea47a8_2
+ - pycparser=2.22=pyh29332c3_1
+ - pydantic=2.10.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py311h533ab2d_0
+ - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0
+ - pydiso=0.1.2=py311h6340b4d_0
+ - pygments=2.19.1=pyhd8ed1ab_0
+ - pylint=3.3.3=pyhd8ed1ab_0
+ - pymatsolver=0.2.0=ha770c72_3
+ - pymatsolver-base=0.2.0=pyh44b312d_3
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - pysocks=1.7.1=pyh09c184e_7
+ - pytest=8.3.4=pyhd8ed1ab_1
+ - pytest-cov=6.0.0=pyhd8ed1ab_1
+ - python=3.11.11=h3f84c4b_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.11=5_cp311
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pywin32=307=py311hda3d55a_3
+ - pywinpty=2.0.14=py311hda3d55a_0
+ - pyyaml=6.0.2=py311he736701_1
+ - pyzmq=26.2.0=py311h484c95c_3
+ - readthedocs-sphinx-ext=2.2.5=pyhd8ed1ab_1
+ - referencing=0.35.1=pyhd8ed1ab_1
+ - requests=2.32.3=pyhd8ed1ab_1
+ - rfc3339-validator=0.1.4=pyhd8ed1ab_1
+ - rfc3986-validator=0.1.1=pyh9f0ad1d_0
+ - rpds-py=0.22.3=py311h533ab2d_0
+ - scikit-learn=1.4.2=py311hdcb8d17_1
+ - scipy=1.14.1=py311hf16d85f_2
+ - send2trash=1.8.3=pyh5737063_1
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
+ - sniffio=1.3.1=pyhd8ed1ab_1
+ - snowballstemmer=2.2.0=pyhd8ed1ab_0
+ - sortedcontainers=2.4.0=pyhd8ed1ab_0
+ - 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.37=py311he736701_0
+ - stack_data=0.6.3=pyhd8ed1ab_1
+ - tabulate=0.9.0=pyhd8ed1ab_2
+ - tbb=2021.12.0=hc790b64_4
+ - tblib=3.0.0=pyhd8ed1ab_1
+ - terminado=0.18.1=pyh5737063_0
+ - threadpoolctl=3.5.0=pyhc1e730c_0
+ - 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=py311he736701_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=2024b=hc8b5060_0
+ - uc-micro-py=1.0.3=pyhd8ed1ab_1
+ - ucrt=10.0.22621.0=h57928b3_1
+ - unicodedata2=15.1.0=py311he736701_1
+ - uri-template=1.3.0=pyhd8ed1ab_1
+ - urllib3=2.3.0=pyhd8ed1ab_0
+ - vc=14.3=ha32ba9b_23
+ - vc14_runtime=14.42.34433=he29a5d6_23
+ - vs2015_runtime=14.42.34433=hdffcdeb_23
+ - 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
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - widgetsnbextension=3.6.10=pyhd8ed1ab_0
+ - win_inet_pton=1.1.0=pyh7428d3b_8
+ - winpty=0.4.3=4
+ - xorg-libxau=1.0.11=hcd874cb_0
+ - xorg-libxdmcp=1.1.3=hcd874cb_0
+ - yaml=0.2.5=h8ffe710_2
+ - zarr=2.14.2=pyhd8ed1ab_0
+ - zeromq=4.3.5=ha9f60a1_7
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py311h53056dc_1
+ - zstd=1.5.6=h0ea2cb4_0
+ - pip:
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
+
+variables:
+ KMP_WARNINGS: 0
diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml
new file mode 100644
index 00000000..9fbf3ded
--- /dev/null
+++ b/environments/py-3.11-win-64.conda.lock.yml
@@ -0,0 +1,152 @@
+# Generated by conda-lock.
+# platform: win-64
+# input_hash: 1f408dede137845ecfd9697ee5aa5178e999050353f3ec77e0b568556a08e3f3
+
+channels:
+ - conda-forge
+ - nodefaults
+dependencies:
+ - annotated-types=0.7.0=pyhd8ed1ab_1
+ - asciitree=0.3.3=py_2
+ - brotli=1.1.0=h2466b09_2
+ - brotli-bin=1.1.0=h2466b09_2
+ - brotli-python=1.1.0=py311hda3d55a_2
+ - bzip2=1.0.8=h2466b09_7
+ - ca-certificates=2024.12.14=h56e8100_0
+ - cached-property=1.5.2=hd8ed1ab_1
+ - cached_property=1.5.2=pyha770c72_1
+ - certifi=2024.12.14=pyhd8ed1ab_0
+ - cffi=1.17.1=py311he736701_0
+ - click=8.1.8=pyh7428d3b_0
+ - cloudpickle=3.1.0=pyhd8ed1ab_2
+ - colorama=0.4.6=pyhd8ed1ab_1
+ - contourpy=1.3.1=py311h3257749_0
+ - cycler=0.12.1=pyhd8ed1ab_1
+ - cytoolz=1.0.1=py311he736701_0
+ - dask-core=2024.6.2=pyhd8ed1ab_0
+ - discretize=0.10.0=py311h12feb9d_1
+ - distributed=2024.6.2=pyhd8ed1ab_0
+ - empymod=2.2.2=pyhd8ed1ab_0
+ - fasteners=0.19=pyhd8ed1ab_1
+ - fonttools=4.55.3=py311h5082efb_1
+ - freetype=2.12.1=hdaf720e_2
+ - fsspec=2022.11.0=pyhd8ed1ab_0
+ - geoana=0.5.0=py311h12feb9d_4
+ - h2=4.1.0=pyhd8ed1ab_1
+ - h5py=3.12.1=nompi_py311haea1c80_103
+ - hdf5=1.14.4=nompi_hd5d9e70_105
+ - hpack=4.0.0=pyhd8ed1ab_1
+ - hyperframe=6.0.1=pyhd8ed1ab_1
+ - importlib-metadata=8.5.0=pyha770c72_1
+ - importlib_metadata=8.5.0=hd8ed1ab_1
+ - intel-openmp=2023.2.0=h57928b3_50497
+ - jinja2=3.1.5=pyhd8ed1ab_0
+ - joblib=1.4.2=pyhd8ed1ab_1
+ - kiwisolver=1.4.7=py311h3257749_0
+ - krb5=1.21.3=hdf4eb48_0
+ - lcms2=2.16=h67d730c_0
+ - lerc=4.0.0=h63175ca_0
+ - libaec=1.1.3=h63175ca_0
+ - 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
+ - libcurl=8.11.1=h88aaa65_0
+ - libdeflate=1.23=h9062f6e_0
+ - libdlf=0.3.0=pyhd8ed1ab_1
+ - libexpat=2.6.4=he0c23c2_0
+ - libffi=3.4.2=h8ffe710_5
+ - libhwloc=2.11.1=default_h8125262_1000
+ - libiconv=1.17=hcfcfb64_2
+ - libjpeg-turbo=3.0.0=hcfcfb64_1
+ - liblapack=3.9.0=20_win64_mkl
+ - liblzma=5.6.3=h2466b09_1
+ - libpng=1.6.45=had7236b_0
+ - libsqlite=3.47.2=h67fdade_0
+ - libssh2=1.11.1=he619c9f_0
+ - libtiff=4.7.0=h797046b_3
+ - libwebp-base=1.5.0=h3b0e114_0
+ - libxcb=1.16=h013a479_1
+ - libxml2=2.13.5=he286e8c_1
+ - libzlib=1.3.1=h2466b09_2
+ - llvmlite=0.43.0=py311h7deaa30_1
+ - locket=1.0.0=pyhd8ed1ab_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=3.0.2=py311h5082efb_1
+ - matplotlib-base=3.8.4=py311h9b31f6e_2
+ - mkl=2023.2.0=h6a75c08_50497
+ - msgpack-python=1.1.0=py311h3257749_0
+ - msys2-conda-epoch=20160418=1
+ - munkres=1.1.4=pyh9f0ad1d_0
+ - numba=0.60.0=py311h0673bce_0
+ - numcodecs=0.14.1=py311hcf9f919_0
+ - numpy=1.26.4=py311h0b4df5a_0
+ - openjpeg=2.5.3=h4d64b90_0
+ - openssl=3.4.0=ha4e3fda_1
+ - packaging=24.2=pyhd8ed1ab_2
+ - pandas=2.2.3=py311hcf9f919_1
+ - partd=1.4.2=pyhd8ed1ab_0
+ - pillow=10.3.0=py311h5592be9_1
+ - pip=24.3.1=pyh8b19718_2
+ - psutil=6.1.1=py311he736701_0
+ - pthread-stubs=0.4=hcd874cb_1001
+ - pthreads-win32=2.9.1=h2466b09_4
+ - pycparser=2.22=pyh29332c3_1
+ - pydantic=2.10.5=pyh3cfb1c2_0
+ - pydantic-core=2.27.2=py311h533ab2d_0
+ - pydiso=0.1.2=py311h6340b4d_0
+ - pymatsolver=0.2.0=ha770c72_3
+ - pymatsolver-base=0.2.0=pyh44b312d_3
+ - pyparsing=3.2.1=pyhd8ed1ab_0
+ - pysocks=1.7.1=pyh09c184e_7
+ - python=3.11.11=h3f84c4b_1_cpython
+ - python-dateutil=2.9.0.post0=pyhff2d567_1
+ - python-tzdata=2023.4=pyhd8ed1ab_0
+ - python_abi=3.11=5_cp311
+ - pytz=2024.1=pyhd8ed1ab_0
+ - pyyaml=6.0.2=py311he736701_1
+ - scikit-learn=1.4.2=py311hdcb8d17_1
+ - scipy=1.14.1=py311hf16d85f_2
+ - setuptools=75.8.0=pyhff2d567_0
+ - six=1.17.0=pyhd8ed1ab_0
+ - sortedcontainers=2.4.0=pyhd8ed1ab_0
+ - tbb=2021.12.0=hc790b64_4
+ - tblib=3.0.0=pyhd8ed1ab_1
+ - threadpoolctl=3.5.0=pyhc1e730c_0
+ - tk=8.6.13=h5226925_1
+ - toolz=1.0.0=pyhd8ed1ab_1
+ - tornado=6.4.2=py311he736701_0
+ - tqdm=4.67.1=pyhd8ed1ab_1
+ - typing-extensions=4.12.2=hd8ed1ab_1
+ - typing_extensions=4.12.2=pyha770c72_1
+ - tzdata=2024b=hc8b5060_0
+ - ucrt=10.0.22621.0=h57928b3_1
+ - unicodedata2=15.1.0=py311he736701_1
+ - urllib3=2.3.0=pyhd8ed1ab_0
+ - vc=14.3=ha32ba9b_23
+ - vc14_runtime=14.42.34433=he29a5d6_23
+ - vs2015_runtime=14.42.34433=hdffcdeb_23
+ - wheel=0.45.1=pyhd8ed1ab_1
+ - win_inet_pton=1.1.0=pyh7428d3b_8
+ - xorg-libxau=1.0.11=hcd874cb_0
+ - xorg-libxdmcp=1.1.3=hcd874cb_0
+ - yaml=0.2.5=h8ffe710_2
+ - zarr=2.14.2=pyhd8ed1ab_0
+ - zict=3.0.0=pyhd8ed1ab_1
+ - zipp=3.21.0=pyhd8ed1ab_1
+ - zstandard=0.23.0=py311h53056dc_1
+ - zstd=1.5.6=h0ea2cb4_0
+ - pip:
+ - geoapps-utils == 0.4.0rc1 --hash=sha256:248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ - geoh5py == 0.10.0rc1 --hash=sha256:50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ - mira-simpeg == 0.21.2.1rc1 --hash=sha256:c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ - octree-creation-app == 0.2.0rc1 --hash=sha256:ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ - param-sweeps == 0.2.0rc1 --hash=sha256:0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
+
+variables:
+ KMP_WARNINGS: 0
diff --git a/Install_or_Update.bat b/install.bat
similarity index 81%
rename from Install_or_Update.bat
rename to install.bat
index 094b790b..1eb91fef 100644
--- a/Install_or_Update.bat
+++ b/install.bat
@@ -26,8 +26,8 @@ if not exist %MY_CONDA_ENV_FILE% (
)
call "!MY_CONDA!" activate base ^
- && call "!MY_CONDA!" env create --force -n %ENV_NAME% --file %MY_CONDA_ENV_FILE% ^
- && call "!MY_CONDA!" run -n %ENV_NAME% pip install --upgrade --force-reinstall .
+ && call "!MY_CONDA!" env create -y -n %ENV_NAME% --file %MY_CONDA_ENV_FILE% ^
+ && call "!MY_CONDA!" run -n %ENV_NAME% pip install .
if !errorlevel! neq 0 (
echo "** ERROR: Installation failed **"
diff --git a/meta.yaml b/meta.yaml
new file mode 100644
index 00000000..1205cbfe
--- /dev/null
+++ b/meta.yaml
@@ -0,0 +1,60 @@
+{% set name = "simpeg-drivers" %}
+{% set version = "0.2.0" %}
+
+package:
+ name: {{ name|lower }}
+ version: {{ version }}
+
+source:
+ path: ../{{ name }}
+
+build:
+ noarch: python
+ script: {{ PYTHON }} -m pip install . -vv --no-deps --no-build-isolation
+ number: 0
+
+requirements:
+ host:
+ - python >=3.10, <3.11
+ - poetry-core >=1.0.0
+ - setuptools
+ - pip
+ run:
+ - python >=3.10,<3.11
+ - dask-core 2024.06.*
+ - discretize >=0.10.0,<0.11.0
+ - distributed >=2024.06.*
+ - numpy >=1.26.0,<1.27.0
+ - scipy >=1.14.0,<1.15.0
+ - geoh5py >=0.10.0b1,<0.11.0a.dev
+ - octree-creation-app >=0.2.0b1,<0.3.0a.dev
+ - geoapps-utils >=0.4.0b1,<0.5.0a.dev
+ - mira-simpeg >=0.21.2.1b1,<0.22.0a.dev
+ - param-sweeps >=0.2.0b1,<0.2.1a.dev
+ - pillow >=10.3.0
+ - empymod >=2.2.1,<2.3.0
+ - geoana >=0.5.0,<0.6.0
+ - h5py >=3.2.1,<4.0.0
+ - matplotlib-base >=3.8.4,<3.9.0
+ - mkl >=2023.2, <2023.3
+ - pandas >=2.2.1,<2.3.0
+ - pydantic >=2.5.2,<3.0.0
+ - pydiso >=0.1.0, <0.2.0
+ - pymatsolver >=0.2.0,<0.3.0
+ - scikit-learn >=1.4.0,<1.5.0
+ - tqdm >=4.66.1,<5.0.0
+ - zarr >=2.14.2,<2.15.0
+ run_constrained:
+ - tbb 2021.12.*
+ - python-tzdata 2023.4.*
+ - __glibc >=2.17
+
+about:
+ license: MIT
+ license_file:
+ - LICENSE
+
+extra:
+ recipe-maintainers:
+ - SophieCurinier
+ - sebhmg
diff --git a/package.rst b/package.rst
new file mode 100644
index 00000000..d3d2d1d3
--- /dev/null
+++ b/package.rst
@@ -0,0 +1,83 @@
+simpeg-drivers: run SimPEG inversions on GEOH5 files
+====================================================
+Application to run `SimPEG `_ inversions
+on `GEOH5 files `_.
+Users will be able to directly leverage the powerful visualization
+capabilities of `Geoscience ANALYST `_.
+
+.. contents:: Table of Contents
+ :local:
+ :depth: 3
+
+Documentation
+^^^^^^^^^^^^^
+`Online documentation `_
+
+
+Installation
+^^^^^^^^^^^^
+**simpeg-drivers** is currently written for Python 3.10 or higher.
+
+Install within a conda environment
+----------------------------------
+
+To install **simpeg-drivers**, you need to install **Conda** first.
+
+We recommend to install **Conda** using `miniforge`_.
+
+.. _miniforge: https://github.com/conda-forge/miniforge
+
+You can install (or update) a conda environment with all the requires packages to run **simpeg-drivers**.
+To do so you can directly run the **install.bat** file by double left clicking on it.
+
+
+Install with PyPI
+-----------------
+
+You should not install the package from PyPI, as the app requires conda packages to run.
+Still, you can install it in a conda environment without its dependencies (``--no-deps``).
+
+To install the **simpeg-drivers** package published on PyPI:
+
+.. code-block:: bash
+
+ pip install -U --no-deps simpeg-drivers
+
+
+Feedback
+^^^^^^^^
+Have comments or suggestions? Submit feedback.
+All the content can be found on the github_ repository.
+
+.. _github: https://github.com/MiraGeoscience/geoh5py
+
+
+Visit `Mira Geoscience website `_ to learn more about our products
+and services.
+
+
+License
+^^^^^^^
+MIT License
+
+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.
+
+Copyright
+^^^^^^^^^
+Copyright (c) 2024-2025 Mira Geoscience Ltd.
diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml
index 78d441c1..d831d620 100644
--- a/py-3.10.conda-lock.yml
+++ b/py-3.10.conda-lock.yml
@@ -15,11 +15,13 @@
version: 1
metadata:
content_hash:
- win-64: 91c9953be6342329650721e251aaf7f87fdca8b715eec8c2bcb5bb60c1661056
- linux-64: ab8c9e219f39f1e1321a0ec789c64e159af623c9370b7c6db9835a64a21963a6
+ win-64: ff06e16201523b792a8e62f061d23625f7aab81b95d9daddc1eb641dbe2a0968
+ linux-64: ec5a523b4ce7f232ede7867031463ce89704b5d545a70f157ff54241149da1b3
channels:
- url: conda-forge
used_env_vars: []
+ - url: nodefaults
+ used_env_vars: []
platforms:
- win-64
- linux-64
@@ -58,10 +60,10 @@ package:
dependencies:
pygments: ''
python: '>=3.9'
- url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda
hash:
- md5: 1bb1ef9806a9a20872434f58b3e7fc1a
- sha256: 712c1875bcd32674e8ce2f418f0b2875ecb98e6bcbb21ec7502dae8ff4b0f73c
+ md5: 74ac5069774cdbc53910ec4d631a3999
+ sha256: 1307719f0d8ee694fc923579a39c0621c23fdaa14ccdf9278a5aac5665ac58e9
category: dev
optional: true
- name: accessible-pygments
@@ -71,10 +73,10 @@ package:
dependencies:
pygments: ''
python: '>=3.9'
- url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda
hash:
- md5: 1bb1ef9806a9a20872434f58b3e7fc1a
- sha256: 712c1875bcd32674e8ce2f418f0b2875ecb98e6bcbb21ec7502dae8ff4b0f73c
+ md5: 74ac5069774cdbc53910ec4d631a3999
+ sha256: 1307719f0d8ee694fc923579a39c0621c23fdaa14ccdf9278a5aac5665ac58e9
category: dev
optional: true
- name: alabaster
@@ -106,12 +108,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9'
typing-extensions: '>=4.0.0'
- url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda
hash:
- md5: 7e9f4612544c8edbfd6afad17f1bd045
- sha256: 668f0825b6c18e4012ca24a0070562b6ec801ebc7008228a428eb52b4038873f
+ md5: 2934f256a8acfe48f6ebb4fce6cde29c
+ sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48
category: main
optional: false
- name: annotated-types
@@ -119,44 +121,44 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9'
typing-extensions: '>=4.0.0'
- url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda
hash:
- md5: 7e9f4612544c8edbfd6afad17f1bd045
- sha256: 668f0825b6c18e4012ca24a0070562b6ec801ebc7008228a428eb52b4038873f
+ md5: 2934f256a8acfe48f6ebb4fce6cde29c
+ sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48
category: main
optional: false
- name: anyio
- version: 3.7.1
+ version: 4.8.0
manager: conda
platform: linux-64
dependencies:
- exceptiongroup: ''
+ exceptiongroup: '>=1.0.2'
idna: '>=2.8'
- python: '>=3.7'
+ python: '>=3.9'
sniffio: '>=1.1'
- typing_extensions: ''
- url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda
+ typing_extensions: '>=4.5'
+ url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.8.0-pyhd8ed1ab_0.conda
hash:
- md5: 7b517e7a6f0790337906c055aa97ca49
- sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4
+ md5: 848d25bfbadf020ee4d4ba90e5668252
+ sha256: f1455d2953e3eb6d71bc49881c8558d8e01888469dfd21061dd48afb6183e836
category: dev
optional: true
- name: anyio
- version: 3.7.1
+ version: 4.8.0
manager: conda
platform: win-64
dependencies:
- typing_extensions: ''
- exceptiongroup: ''
- python: '>=3.7'
- sniffio: '>=1.1'
+ exceptiongroup: '>=1.0.2'
idna: '>=2.8'
- url: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda
+ 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: 7b517e7a6f0790337906c055aa97ca49
- sha256: 62637ac498bcf47783cbf4f48e9b09e4e2f5a6ad42f43ca8f632c353827b94f4
+ md5: 848d25bfbadf020ee4d4ba90e5668252
+ sha256: f1455d2953e3eb6d71bc49881c8558d8e01888469dfd21061dd48afb6183e836
category: dev
optional: true
- name: argon2-cffi
@@ -165,12 +167,12 @@ package:
platform: linux-64
dependencies:
argon2-cffi-bindings: ''
- python: '>=3.7'
+ python: '>=3.9'
typing-extensions: ''
- url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda
hash:
- md5: 3afef1f55a1366b4d3b6a0d92e2235e4
- sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677
+ md5: a7ee488b71c30ada51c48468337b85ba
+ sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f
category: dev
optional: true
- name: argon2-cffi
@@ -178,13 +180,13 @@ package:
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
+ python: '>=3.9'
+ typing-extensions: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_1.conda
hash:
- md5: 3afef1f55a1366b4d3b6a0d92e2235e4
- sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677
+ md5: a7ee488b71c30ada51c48468337b85ba
+ sha256: 7af62339394986bc470a7a231c7f37ad0173ffb41f6bc0e8e31b0be9e3b9d20f
category: dev
optional: true
- name: argon2-cffi-bindings
@@ -192,14 +194,15 @@ package:
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
cffi: '>=1.0.1'
- libgcc-ng: '>=12'
+ 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-py310h2372a71_4.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310ha75aee5_5.conda
hash:
- md5: 68ee85860502d53c8cbfa0e4cef0f6cb
- sha256: af94cc9b4dcaa164e1cc7e7fa0b9eb56b87ea3dc6e093c8ef6c31cfa02d9ffdf
+ md5: a2da54f3a705d518c95a5b6de8ad8af6
+ sha256: 1050f55294476b4d9b36ca3cf22b47f2f23d6e143ad6a177025bc5e5984d5409
category: dev
optional: true
- name: argon2-cffi-bindings
@@ -213,10 +216,38 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py310ha8f682b_5.conda
+ hash:
+ md5: d18002177f557891c1fc5482da6decd7
+ sha256: f0b23aa9a3c27500d58a383d635c01b86ab652c34646c3ad9e89fd82607178a0
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: ece29c9dd68f962fd416a3ddcce24080
- sha256: ae143aec777823b2291caabc3fd89078a3ff12f41945e0f9abd168997ad35d39
+ md5: 46b53236fdd990271b03c3978d4218a9
+ sha256: c4b0bdb3d5dee50b60db92f99da3e4c524d5240aafc0a5fcc15e45ae2d1a3cd1
category: dev
optional: true
- name: asciitree
@@ -244,109 +275,131 @@ package:
category: main
optional: false
- name: astroid
- version: 3.2.4
+ 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.2.4-py310hff52083_0.conda
+ typing_extensions: '>=4.0.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.3.8-py310hff52083_0.conda
hash:
- md5: 4acb210fe1d9e5833f8402cfa9064b38
- sha256: ff79f35ee5e84b13e8a0f1d64c957d9041c0a3cb0de8acef9a354014caa7fc1d
+ md5: 9afaff1d0f354d98cff43bc80666c428
+ sha256: 02c0e9c683002c05958b21427c51e7d0c6b9c212b518a04793ed62d0c7bc31f9
category: dev
optional: true
- name: astroid
- version: 3.2.4
+ 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.2.4-py310h5588dad_0.conda
+ typing_extensions: '>=4.0.0'
+ url: https://conda.anaconda.org/conda-forge/win-64/astroid-3.3.8-py310h5588dad_0.conda
hash:
- md5: 6f02e90951acf0a26f9d5a32d93c5e47
- sha256: 0dad4fd31a54440e6b8aab58eec736359ce08358326ce9924a63a2c32d2c5d89
+ md5: c54bfa9d47e3a08b15ea6d364890a352
+ sha256: 7efa33c85f77a7c9fdc1b1e0a0352503d3c1b59f3539ee7188d00d4ed427e25d
category: dev
optional: true
- name: asttokens
- version: 2.4.1
+ version: 3.0.0
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 5f25798dcefd8252ce5f9dc494d5f571
- sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111
+ md5: 8f587de4bcf981e26228f268df374a9b
+ sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593
category: dev
optional: true
- name: asttokens
- version: 2.4.1
+ version: 3.0.0
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 8f587de4bcf981e26228f268df374a9b
+ sha256: 93b14414b3b3ed91e286e1cbe4e7a60c4e1b1c730b0814d1e452a8ac4b9af593
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 5f25798dcefd8252ce5f9dc494d5f571
- sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111
+ md5: 40c673c7d585623b8f1ee650c8734eb6
+ sha256: 344157f396dfdc929d1dff8fe010abe173cd168d22a56648583e616495f2929e
category: dev
optional: true
- name: attrs
- version: 23.2.0
+ version: 24.3.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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda
hash:
- md5: 5e4c0743c70186509d1412e03c2d8dfa
- sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea
+ md5: 356927ace43302bf6f5926e2a58dae6a
+ sha256: 750186af694a7130eaf7119fbb56db0d2326d8995ad5b8eae23c622b85fea29a
category: dev
optional: true
- name: attrs
- version: 23.2.0
+ version: 24.3.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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda
hash:
- md5: 5e4c0743c70186509d1412e03c2d8dfa
- sha256: 77c7d03bdb243a048fff398cedc74327b7dc79169ebe3b4c8448b0331ea55fea
+ md5: 356927ace43302bf6f5926e2a58dae6a
+ sha256: 750186af694a7130eaf7119fbb56db0d2326d8995ad5b8eae23c622b85fea29a
category: dev
optional: true
- name: babel
- version: 2.14.0
+ version: 2.16.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- pytz: ''
- setuptools: ''
- url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ pytz: '>=2015.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda
hash:
- md5: 9669586875baeced8fc30c0826c3270e
- sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6
+ md5: 3e23f7db93ec14c80525257d8affac28
+ sha256: f6205d3a62e87447e06e98d911559be0208d824976d77ab092796c9176611fcb
category: dev
optional: true
- name: babel
- version: 2.14.0
+ version: 2.16.0
manager: conda
platform: win-64
dependencies:
- setuptools: ''
- pytz: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ pytz: '>=2015.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda
hash:
- md5: 9669586875baeced8fc30c0826c3270e
- sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6
+ md5: 3e23f7db93ec14c80525257d8affac28
+ sha256: f6205d3a62e87447e06e98d911559be0208d824976d77ab092796c9176611fcb
category: dev
optional: true
- name: beautifulsoup4
@@ -354,12 +407,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
soupsieve: '>=1.2'
- url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda
hash:
- md5: 332493000404d8411859539a5a630865
- sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317
+ md5: d48f7e9fdec44baf6d1da416fe402b04
+ sha256: fca842ab7be052eea1037ebee17ac25cc79c626382dd2187b5c6e007b9d9f65f
category: dev
optional: true
- name: beautifulsoup4
@@ -367,44 +420,64 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
soupsieve: '>=1.2'
- url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda
hash:
- md5: 332493000404d8411859539a5a630865
- sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317
+ md5: d48f7e9fdec44baf6d1da416fe402b04
+ sha256: fca842ab7be052eea1037ebee17ac25cc79c626382dd2187b5c6e007b9d9f65f
category: dev
optional: true
- name: bleach
- version: 6.1.0
+ version: 6.2.0
manager: conda
platform: linux-64
dependencies:
- packaging: ''
- python: '>=3.6'
- setuptools: ''
- six: '>=1.9.0'
+ python: '>=3.9'
webencodings: ''
- url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyhd8ed1ab_3.conda
hash:
- md5: 0ed9d7c0e9afa7c025807a9a8136ea3e
- sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08
+ md5: b33551d9bac06d754762e8ccb3c4df03
+ sha256: 9278622f54b6b4bce5d73663b282a8ab35d1b331d6ff92f4112906a526039827
category: dev
optional: true
- name: bleach
- version: 6.1.0
+ version: 6.2.0
manager: conda
platform: win-64
dependencies:
- setuptools: ''
- packaging: ''
+ python: '>=3.9'
webencodings: ''
- python: '>=3.6'
- six: '>=1.9.0'
- url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyhd8ed1ab_3.conda
+ hash:
+ md5: b33551d9bac06d754762e8ccb3c4df03
+ sha256: 9278622f54b6b4bce5d73663b282a8ab35d1b331d6ff92f4112906a526039827
+ category: dev
+ optional: true
+- 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-hd8ed1ab_3.conda
+ hash:
+ md5: e250a492fc70bf604737328dbe02846c
+ sha256: 8161cf35253f7646a1fd39f90abbcc6cb69248b8fdff61cfffce4cc8448f8c02
+ category: dev
+ optional: true
+- 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-hd8ed1ab_3.conda
hash:
- md5: 0ed9d7c0e9afa7c025807a9a8136ea3e
- sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08
+ md5: e250a492fc70bf604737328dbe02846c
+ sha256: 8161cf35253f7646a1fd39f90abbcc6cb69248b8fdff61cfffce4cc8448f8c02
category: dev
optional: true
- name: brotli
@@ -412,14 +485,15 @@ package:
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-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda
hash:
- md5: f27a24d46e3ea7b70a1f98e50c62508f
- sha256: f2d918d351edd06c55a6c2d84b488fe392f85ea018ff227daac07db22b408f6b
+ md5: 98514fe74548d768907ce7a13f680e8f
+ sha256: fcb0b5b28ba7492093e54f3184435144e074dfceab27ac8e6a9457e736565b0b
category: main
optional: false
- name: brotli
@@ -433,10 +507,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-h2466b09_2.conda
hash:
- md5: f47f6db2528e38321fb00ae31674c133
- sha256: b927c95121c5f3d82fe084730281739fb04621afebf2d9f05711a0f42d27e326
+ md5: 378f1c9421775dfe644731cb121c8979
+ sha256: d8fd7d1b446706776117d2dcad1c0289b9f5e1521cb13405173bad38568dd252
category: main
optional: false
- name: brotli-bin
@@ -444,13 +518,14 @@ package:
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
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
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda
hash:
- md5: 39f910d205726805a958da408ca194ba
- sha256: a641abfbaec54f454c8434061fffa7fdaa9c695e8a5a400ed96b4f07c0c00677
+ md5: c63b5e52939e795ba8d26e35d767a843
+ sha256: 261364d7445513b9a4debc345650fad13c627029bfc800655a266bf1e375bc65
category: main
optional: false
- name: brotli-bin
@@ -463,10 +538,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.1.0-h2466b09_2.conda
hash:
- md5: 0105229d7c5fabaa840043a86c10ec64
- sha256: 4fbcb8f94acc97b2b04adbc64e304acd7c06fa0cf01953527bddae46091cc942
+ md5: d22534a9be5771fc58eb7564947f669d
+ sha256: f3bf2893613540ac256c68f211861c4de618d96291719e32178d894114ac2bc2
category: main
optional: false
- name: brotli-python
@@ -474,14 +549,15 @@ package:
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
+ __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-py310hc6cd4ac_1.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda
hash:
- md5: 1f95722c94f00b69af69a066c7433714
- sha256: e22268d81905338570786921b3def88e55f9ed6d0ccdd17d9fbae31a02fbef69
+ md5: bf502c169c71e3c6ac0d6175addfacc2
+ sha256: 14f1e89d3888d560a553f40ac5ba83e4435a107552fa5b2b2029a7472554c1ef
category: main
optional: false
- name: brotli-python
@@ -494,10 +570,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda
hash:
- md5: 42bfbc1d41cbe2696a3c9d8b0342324f
- sha256: 8de77cf62a653dd6ffe19927b92c421f5fa73c078d7799181f5211a1bac2883b
+ md5: 3a10a1d0cf3ece273195f26191fd6cc6
+ sha256: 1b7893a07f2323410b09b63b4627103efa86163be835ac94966333b37741cdc7
category: main
optional: false
- name: bzip2
@@ -528,38 +604,38 @@ package:
category: main
optional: false
- name: c-ares
- version: 1.32.3
+ version: 1.34.4
manager: conda
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
- libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.32.3-h4bc722e_0.conda
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.4-hb9d3cd8_0.conda
hash:
- md5: 7624e34ee6baebfc80d67bac76cc9d9d
- sha256: 3c5a844bb60b0d52d89c3f1bd828c9856417fe33a6102fd8bbd5c13c3351704a
+ md5: e2775acf57efd5af15b8e3d1d74d72d3
+ sha256: d4f28d87b6339b94f74762c0076e29c8ef8ddfff51a564a92da2843573c18320
category: main
optional: false
- name: ca-certificates
- version: 2024.7.4
+ version: 2024.12.14
manager: conda
platform: linux-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda
hash:
- md5: 23ab7665c5f63cfb9f1f6195256daac6
- sha256: c1548a3235376f464f9931850b64b02492f379b2f2bb98bc786055329b080446
+ md5: 720523eb0d6a9b0f6120c16b2aa4e7de
+ sha256: 1afd7274cbc9a334d6d0bc62fa760acc7afdaceb0b91a8df370ec01fd75dc7dd
category: main
optional: false
- name: ca-certificates
- version: 2024.7.4
+ version: 2024.12.14
manager: conda
platform: win-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.7.4-h56e8100_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda
hash:
- md5: 9caa97c9504072cd060cf0a3142cc0ed
- sha256: 7f37bb33c7954de1b4d19ad622859feb4f6c58f751c38b895524cad4e44af72e
+ md5: cb2eaeb88549ddb27af533eccf9a45c1
+ sha256: 424d82db36cd26234bc4772426170efd60e888c2aed0099a257a95e131683a5e
category: main
optional: false
- name: cached-property
@@ -611,47 +687,48 @@ package:
category: main
optional: false
- name: certifi
- version: 2024.7.4
+ version: 2024.12.14
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda
hash:
- md5: 24e7fd6ca65997938fff9e5ab6f653e4
- sha256: dd3577bb5275062c388c46b075dcb795f47f8dac561da7dd35fe504b936934e5
+ md5: 6feb87357ecd66733be3279f16a8c400
+ sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad
category: main
optional: false
- name: certifi
- version: 2024.7.4
+ version: 2024.12.14
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda
hash:
- md5: 24e7fd6ca65997938fff9e5ab6f653e4
- sha256: dd3577bb5275062c388c46b075dcb795f47f8dac561da7dd35fe504b936934e5
+ md5: 6feb87357ecd66733be3279f16a8c400
+ sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad
category: main
optional: false
- name: cffi
- version: 1.16.0
+ version: 1.17.1
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
libffi: '>=3.4,<4.0a0'
- libgcc-ng: '>=12'
+ libgcc: '>=13'
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
+ url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda
hash:
- md5: 45846a970e71ac98fd327da5d40a0a2c
- sha256: 007e7f69ab45553b7bf11f2c1b8d3f3a13fd42997266a0d57795f41c7d38df36
+ md5: 1fc24a3196ad5ede2a68148be61894f4
+ sha256: 1b389293670268ab80c3b8735bc61bc71366862953e000efbb82204d00e41b6c
category: main
optional: false
- name: cffi
- version: 1.16.0
+ version: 1.17.1
manager: conda
platform: win-64
dependencies:
@@ -661,85 +738,85 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda
hash:
- md5: b4bcce1a7ea1164e6dcea6c4f00d962b
- sha256: 1aeebb88518ab48c927d7360648a2799def172d8fcb0d7e20cb7208a3570ef9e
+ md5: 9c7ec967f4ae263aec56cff05bdbfc07
+ sha256: 32638e79658f76e3700f783c519025290110f207833ae1d166d262572cbec8a8
category: main
optional: false
- name: charset-normalizer
- version: 3.3.2
+ version: 3.4.1
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda
hash:
- md5: 7f4a9e3fcff3f6356ae99244a014da6a
- sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9
- category: main
- optional: false
+ md5: e83a31202d1c0a000fce3e9cf3825875
+ sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b
+ category: dev
+ optional: true
- name: charset-normalizer
- version: 3.3.2
+ version: 3.4.1
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.1-pyhd8ed1ab_0.conda
hash:
- md5: 7f4a9e3fcff3f6356ae99244a014da6a
- sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9
- category: main
- optional: false
+ md5: e83a31202d1c0a000fce3e9cf3825875
+ sha256: 4e0ee91b97e5de3e74567bdacea27f0139709fceca4db8adffbe24deffccb09b
+ category: dev
+ optional: true
- name: click
- version: 8.1.7
+ version: 8.1.8
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda
hash:
- md5: f3ad426304898027fc619827ff428eca
- sha256: f0016cbab6ac4138a429e28dbcb904a90305b34b3fe41a9b89d697c90401caec
+ md5: f22f4d4970e09d68a10b922cbb0408d3
+ sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab
category: main
optional: false
- name: click
- version: 8.1.7
+ version: 8.1.8
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
+ colorama: ''
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh7428d3b_0.conda
hash:
- md5: 3549ecbceb6cd77b91a105511b7d0786
- sha256: 90236b113b9a20041736e80b80ee965167f9aac0468315c55e2bad902d673fb0
+ md5: 90e5571556f7a45db92ee51cb8f97af6
+ sha256: c889ed359ae47eead4ffe8927b7206b22c55e67d6e74a9044c23736919d61e8d
category: main
optional: false
- name: cloudpickle
- version: 3.0.0
+ version: 3.1.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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda
hash:
- md5: 753d29fe41bb881e4b9c004f0abf973f
- sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754
+ md5: 1f76b7e2b3ab88def5aa2f158322c7e6
+ sha256: 918151ad25558a37721055a02c0357ce9a2f51f07da1b238608e48ef17d35260
category: main
optional: false
- name: cloudpickle
- version: 3.0.0
+ version: 3.1.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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda
hash:
- md5: 753d29fe41bb881e4b9c004f0abf973f
- sha256: 0dfbc1ffa72e7a0882f486c9b1e4e9cccb68cf5c576fe53a89d076c9f1d43754
+ md5: 1f76b7e2b3ab88def5aa2f158322c7e6
+ sha256: 918151ad25558a37721055a02c0357ce9a2f51f07da1b238608e48ef17d35260
category: main
optional: false
- name: colorama
@@ -747,11 +824,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
hash:
- md5: 3faab06a954c2a04039983f2c4a50d99
- sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698
+ md5: 962b9857ee8e7018c22f2776ffa0b2d7
+ sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287
category: main
optional: false
- name: colorama
@@ -759,11 +836,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda
hash:
- md5: 3faab06a954c2a04039983f2c4a50d99
- sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698
+ md5: 962b9857ee8e7018c22f2776ffa0b2d7
+ sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287
category: main
optional: false
- name: comm
@@ -771,12 +848,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
traitlets: '>=5.3'
- url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda
hash:
- md5: 948d84721b578d426294e17a02e24cbb
- sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe
+ md5: 74673132601ec2b7fc592755605f4c1b
+ sha256: 7e87ef7c91574d9fac19faedaaee328a70f718c9b4ddadfdc0ba9ac021bd64af
category: dev
optional: true
- name: comm
@@ -784,65 +861,66 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
traitlets: '>=5.3'
- url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_1.conda
hash:
- md5: 948d84721b578d426294e17a02e24cbb
- sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe
+ md5: 74673132601ec2b7fc592755605f4c1b
+ sha256: 7e87ef7c91574d9fac19faedaaee328a70f718c9b4ddadfdc0ba9ac021bd64af
category: dev
optional: true
- name: contourpy
- version: 1.2.1
+ version: 1.3.1
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
- numpy: '>=1.20'
+ __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.2.1-py310hd41b1e2_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py310h3788b33_0.conda
hash:
- md5: 60ee50b1968f802f2a487ba36d4cce0d
- sha256: b9283a52ec79bf71325cde80b8845e86bdf9ac80d8b38f95ad47cbaab32447fe
+ md5: f993b13665fc2bb262b30217c815d137
+ sha256: 1b18ebb72fb20b9ece47c582c6112b1d4f0f7deebaa056eada99e1f994e8a81f
category: main
optional: false
- name: contourpy
- version: 1.2.1
+ version: 1.3.1
manager: conda
platform: win-64
dependencies:
- numpy: '>=1.20'
+ 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.2.1-py310h232114e_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.1-py310hc19bc0b_0.conda
hash:
- md5: 69968a52474279f0c44c08c87752096f
- sha256: 9a53e5c28fc4348743beee9e2700a64e2378cdc8a383653da0501f05df677600
+ md5: 741bcc6a07e77d3102aa23c580cad4f0
+ sha256: b9e50ead1c1a7a7c0bff5b1e72436016037b0187cecba7f626c9feffe5b3deaf
category: main
optional: false
- name: coverage
- version: 7.6.0
+ version: 7.6.10
manager: conda
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
- libgcc-ng: '>=12'
+ 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.0-py310h5b4e0ec_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.10-py310h89163eb_0.conda
hash:
- md5: a13d72c877b47870042897a0e667cd3a
- sha256: 536aeb4327b835552b4f431b1e717a95c1d26eaac400a261c2dac43cd0a648a4
+ md5: f9bf6ea6ddf8349750f1b455f603b0ae
+ sha256: 41336a050be9faa75b5785af036a756acd95adf2319cf258fe1836e2bf55221b
category: dev
optional: true
- name: coverage
- version: 7.6.0
+ version: 7.6.10
manager: conda
platform: win-64
dependencies:
@@ -852,10 +930,23 @@ package:
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.0-py310ha8f682b_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.10-py310h38315fa_0.conda
+ hash:
+ md5: 17a5805f88d2bce1e213b73201ef1007
+ sha256: 187b0afc6fad0078667b1ade42e02623945c884b70554039cd30c5b92ebf46a6
+ 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: 03ace5584d20b0c6c547f5f4c0a08a51
- sha256: 5a3a62aa698517bca10a941f55f29877ad42abb54f77bb06e0a45b653e29357b
+ md5: 5c7fe189f8761cd08a69924554c1ffab
+ sha256: 522b5ff2c5b1ebe0050ad15cd76a1e14696752eead790ab28e29977d7a8a99e6
category: dev
optional: true
- name: cycler
@@ -863,11 +954,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda
hash:
- md5: 5cd86562580f274031ede6aa6aa24441
- sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8
+ md5: 44600c4667a319d67dbe0681fc0bc833
+ sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c
category: main
optional: false
- name: cycler
@@ -875,30 +966,31 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda
hash:
- md5: 5cd86562580f274031ede6aa6aa24441
- sha256: f221233f21b1d06971792d491445fd548224641af9443739b4b7b6d5d72954a8
+ md5: 44600c4667a319d67dbe0681fc0bc833
+ sha256: 9827efa891e507a91a8a2acf64e210d2aff394e1cde432ad08e1f8c66b12293c
category: main
optional: false
- name: cytoolz
- version: 0.12.3
+ version: 1.0.1
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __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-0.12.3-py310h2372a71_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py310ha75aee5_0.conda
hash:
- md5: 21362970a6fea90ca507c253c20465f2
- sha256: a75c195a71b8a1676f057a785515d1f78515d4f59389d5ac6d3cd9a08880566a
+ md5: d0be1adaa04a03aed745f3d02afb59ce
+ sha256: b427689dfc24a6a297363122ce10d502ea00ddb3c43af6cff175ff563cc94eea
category: main
optional: false
- name: cytoolz
- version: 0.12.3
+ version: 1.0.1
manager: conda
platform: win-64
dependencies:
@@ -908,48 +1000,50 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/cytoolz-1.0.1-py310ha8f682b_0.conda
hash:
- md5: 6051dfb72d955bc0355c2a38a5d85493
- sha256: 0e994dcb9da1c419fe9a974234e60b507a375e06bc39b03895e8eac46c0128ee
+ md5: ed2af2a0262d44f753738588640b8534
+ sha256: 670800d13b6cd64b8f53756b28254b47cfc177606dcd42094696582335ed0f02
category: main
optional: false
- name: dask-core
- version: 2022.10.2
+ version: 2024.6.2
manager: conda
platform: linux-64
dependencies:
- click: '>=7.0'
- cloudpickle: '>=1.1.1'
- fsspec: '>=0.6.0'
+ click: '>=8.1'
+ cloudpickle: '>=1.5.0'
+ fsspec: '>=2021.09.0'
+ importlib_metadata: '>=4.13.0'
packaging: '>=20.0'
- partd: '>=0.3.10'
- python: '>=3.8'
+ partd: '>=1.2.0'
+ python: '>=3.9'
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
+ toolz: '>=0.10.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.6.2-pyhd8ed1ab_0.conda
hash:
- md5: 6f837aa0cbc910b39207fe5d97dfdf1e
- sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf
+ md5: 048ca0ec2cd1f3995d2d36dec0efd99a
+ sha256: bf240aa576e75cffb7cec1cd86942f9d62b710cee1a737f19ea32636d3f1bcff
category: main
optional: false
- name: dask-core
- version: 2022.10.2
+ version: 2024.6.2
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- click: '>=7.0'
+ 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.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
+ toolz: '>=0.10.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/dask-core-2024.6.2-pyhd8ed1ab_0.conda
hash:
- md5: 6f837aa0cbc910b39207fe5d97dfdf1e
- sha256: 805cedd9d20088ae705467ee0fc7202ae1152c38fd747f110f797a7d2f9c47cf
+ md5: 048ca0ec2cd1f3995d2d36dec0efd99a
+ sha256: bf240aa576e75cffb7cec1cd86942f9d62b710cee1a737f19ea32636d3f1bcff
category: main
optional: false
- name: dataclasses
@@ -977,22 +1071,23 @@ package:
category: dev
optional: true
- name: debugpy
- version: 1.8.2
+ version: 1.8.11
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
+ __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.2-py310h76e45a6_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.11-py310hf71b8c6_0.conda
hash:
- md5: 285568244bd06fbe2cccf2ee1617f582
- sha256: 774223fe937ab70312502a0dede4a567d16f41ab034444965ba03e5e1b4928fa
+ md5: bac2499f52d962865c59e21b43b9c55a
+ sha256: eac97bca8950021dfb662cf8f630f8d4c2490c15d3bea4f170299b4c4fccd444
category: dev
optional: true
- name: debugpy
- version: 1.8.2
+ version: 1.8.11
manager: conda
platform: win-64
dependencies:
@@ -1001,10 +1096,10 @@ package:
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.2-py310h9e98ed7_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.11-py310h9e98ed7_0.conda
hash:
- md5: 6edfa966360b5df86d7277b0a4829381
- sha256: d9d3b4d1dd3b00a8fd2caae02285902a294aad8d633620f517ffcf89d38fb57a
+ md5: 03379fc126e5e682ed94448ac13ee959
+ sha256: 24c848e475fbf755013686b0a18dbc842b4cf6260d3ce1bacd48a7cdf22606a4
category: dev
optional: true
- name: decorator
@@ -1012,11 +1107,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda
hash:
- md5: 43afe5ab04e35e17ba28649471dd7364
- sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2
+ md5: d622d8d7ee8868870f9cbe259f381181
+ sha256: 84e5120c97502a3785e8c3241c3bf51f64b4d445f13b4d2445db00d9816fe479
category: dev
optional: true
- name: decorator
@@ -1024,11 +1119,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_1.conda
hash:
- md5: 43afe5ab04e35e17ba28649471dd7364
- sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2
+ md5: d622d8d7ee8868870f9cbe259f381181
+ sha256: 84e5120c97502a3785e8c3241c3bf51f64b4d445f13b4d2445db00d9816fe479
category: dev
optional: true
- name: defusedxml
@@ -1056,27 +1151,27 @@ package:
category: dev
optional: true
- name: dill
- version: 0.3.8
+ version: 0.3.9
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda
hash:
- md5: 78745f157d56877a2c6e7b386f66f3e2
- sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4
+ md5: 5e11310fca410e9f31381157079dee55
+ sha256: 499be2f8e4397a46249e8e500535795704af27e56360ae0c964904140b41454a
category: dev
optional: true
- name: dill
- version: 0.3.8
+ version: 0.3.9
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/dill-0.3.9-pyhd8ed1ab_1.conda
hash:
- md5: 78745f157d56877a2c6e7b386f66f3e2
- sha256: 482b5b566ca559119b504c53df12b08f3962a5ef8e48061d62fd58a47f8f2ec4
+ md5: 5e11310fca410e9f31381157079dee55
+ sha256: 499be2f8e4397a46249e8e500535795704af27e56360ae0c964904140b41454a
category: dev
optional: true
- name: discretize
@@ -1115,117 +1210,113 @@ package:
category: main
optional: false
- name: distributed
- version: 2022.10.2
+ version: 2024.6.2
manager: conda
platform: linux-64
dependencies:
- click: '>=6.6'
+ click: '>=8.0'
cloudpickle: '>=1.5.0'
- cytoolz: '>=0.8.2'
- dask-core: '>=2022.10.2,<2022.10.3.0a0'
- jinja2: ''
+ cytoolz: '>=0.10.1'
+ dask-core: '>=2024.6.2,<2024.6.3.0a0'
+ jinja2: '>=2.10.3'
locket: '>=1.0.0'
- msgpack-python: '>=0.6.0'
+ msgpack-python: '>=1.0.0'
packaging: '>=20.0'
- psutil: '>=5.0'
- python: '>=3.8'
- pyyaml: ''
- sortedcontainers: '!=2.0.0,!=2.0.1'
+ psutil: '>=5.7.2'
+ python: '>=3.9'
+ pyyaml: '>=5.3.1'
+ sortedcontainers: '>=2.0.5'
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
+ 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: 7ffdc4f6105bde64a844bbb57653293e
- sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8
+ md5: eecb4c188864376d2b45a5afc4bcb2fa
+ sha256: e322d23e86eb85cf17d096b8ce864d87a509981f372d2c8bfeb085e0397151f1
category: main
optional: false
- name: distributed
- version: 2022.10.2
+ version: 2024.6.2
manager: conda
platform: win-64
dependencies:
- pyyaml: ''
- jinja2: ''
- urllib3: ''
- python: '>=3.8'
- packaging: '>=20.0'
+ click: '>=8.0'
cloudpickle: '>=1.5.0'
- toolz: '>=0.8.2'
- cytoolz: '>=0.8.2'
- psutil: '>=5.0'
- tblib: '>=1.6.0'
+ cytoolz: '>=0.10.1'
+ dask-core: '>=2024.6.2,<2024.6.3.0a0'
+ jinja2: '>=2.10.3'
locket: '>=1.0.0'
- zict: '>=0.1.3'
- click: '>=6.6'
- sortedcontainers: '!=2.0.0,!=2.0.1'
- 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
+ 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: 7ffdc4f6105bde64a844bbb57653293e
- sha256: 89af5ba4a35f4780676aa757ec0396f1ccb7f5cfd528cf9d78338c0fa764ade8
+ md5: eecb4c188864376d2b45a5afc4bcb2fa
+ sha256: e322d23e86eb85cf17d096b8ce864d87a509981f372d2c8bfeb085e0397151f1
category: main
optional: false
- name: docutils
- version: 0.18.1
+ 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.18.1-py310hff52083_1.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2
hash:
- md5: 6405f87c427cdbc25b6b6a21bd6bfc2a
- sha256: 2071bf7c56305d234161bef00c0c2ba7ae345484105d2ccc448c7c734634f346
+ md5: 21b8fa2179290505e607f5ccd65b01b0
+ sha256: f3a564449daedafe5931ab4efe7bc4f240182f2b760e7877f15b2898b7f1c988
category: dev
optional: true
- name: docutils
- version: 0.18.1
+ 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.18.1-py310h5588dad_1.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/win-64/docutils-0.19-py310h5588dad_1.tar.bz2
hash:
- md5: 10fe0cdd2629f3fe5d27db3f084545f5
- sha256: a9c40df47e2c5eb8938198f8d2d90fb0d6342f2409f4283999be44fd5f58574f
+ md5: 88111d95b12d83681d0ecdbbc24eee8e
+ sha256: 6b40f145b1fdf6b45016d29f193a8ca72a9359ea44cc19624901248f7a9b5ba7
category: dev
optional: true
- name: empymod
- version: 2.3.1
+ version: 2.2.2
manager: conda
platform: linux-64
dependencies:
- libdlf: ''
- numba: '>=0.53'
- python: '>=3.9'
- scipy: '>=1.9'
- scooby: ''
- url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.3.1-pyhd8ed1ab_0.conda
+ 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: bdc02c470f5c6b80dcf9fb2b04599635
- sha256: 522860b19c5fedbdb87f6ef18d6bab2c329e6015de2c33eede5bf49c68331543
+ md5: bebcf8f5112a7d755e2781fe9f87ae7b
+ sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5
category: main
optional: false
- name: empymod
- version: 2.3.1
+ version: 2.2.2
manager: conda
platform: win-64
dependencies:
- scooby: ''
- libdlf: ''
- python: '>=3.9'
- scipy: '>=1.9'
- numba: '>=0.53'
- url: https://conda.anaconda.org/conda-forge/noarch/empymod-2.3.1-pyhd8ed1ab_0.conda
+ 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: bdc02c470f5c6b80dcf9fb2b04599635
- sha256: 522860b19c5fedbdb87f6ef18d6bab2c329e6015de2c33eede5bf49c68331543
+ md5: bebcf8f5112a7d755e2781fe9f87ae7b
+ sha256: c489c425cb75c30288516c140f47d109b4643ab31f17c3f230be38aae7d464f5
category: main
optional: false
- name: entrypoints
@@ -1233,11 +1324,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_1.conda
hash:
- md5: 3cf04868fee0a029769bd41f4b2fbf2d
- sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af
+ md5: 3366592d3c219f2731721f11bc93755c
+ sha256: 80f579bfc71b3dab5bef74114b89e26c85cb0df8caf4c27ab5ffc16363d57ee7
category: dev
optional: true
- name: entrypoints
@@ -1245,11 +1336,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_1.conda
hash:
- md5: 3cf04868fee0a029769bd41f4b2fbf2d
- sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af
+ md5: 3366592d3c219f2731721f11bc93755c
+ sha256: 80f579bfc71b3dab5bef74114b89e26c85cb0df8caf4c27ab5ffc16363d57ee7
category: dev
optional: true
- name: exceptiongroup
@@ -1257,11 +1348,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda
hash:
- md5: d02ae936e42063ca46af6cdad2dbd1e0
- sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5
+ md5: a16662747cdeb9abbac74d0057cc976e
+ sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701
category: dev
optional: true
- name: exceptiongroup
@@ -1269,81 +1360,81 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda
hash:
- md5: d02ae936e42063ca46af6cdad2dbd1e0
- sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5
+ md5: a16662747cdeb9abbac74d0057cc976e
+ sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701
category: dev
optional: true
- name: executing
- version: 2.0.1
+ version: 2.1.0
manager: conda
platform: linux-64
dependencies:
- python: '>=2.7'
- url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda
hash:
- md5: e16be50e378d8a4533b989035b196ab8
- sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057
+ md5: ef8b5fca76806159fc25b4f48d8737eb
+ sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60
category: dev
optional: true
- name: executing
- version: 2.0.1
+ version: 2.1.0
manager: conda
platform: win-64
dependencies:
- python: '>=2.7'
- url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_1.conda
hash:
- md5: e16be50e378d8a4533b989035b196ab8
- sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057
+ md5: ef8b5fca76806159fc25b4f48d8737eb
+ sha256: 28d25ea375ebab4bf7479228f8430db20986187b04999136ff5c722ebd32eb60
category: dev
optional: true
- name: fasteners
- version: 0.17.3
+ version: '0.19'
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.19-pyhd8ed1ab_1.conda
hash:
- md5: 348e27e78a5e39090031448c72f66d5e
- sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda
+ md5: dbe9d42e94b5ff7af7b7893f4ce052e7
+ sha256: 42fb170778b47303e82eddfea9a6d1e1b8af00c927cd5a34595eaa882b903a16
category: main
optional: false
- name: fasteners
- version: 0.17.3
+ version: '0.19'
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/fasteners-0.19-pyhd8ed1ab_1.conda
hash:
- md5: 348e27e78a5e39090031448c72f66d5e
- sha256: 42be6ac8478051b26751d778490d6a71de12e5c6443e145ff3eddbc577d9bcda
+ md5: dbe9d42e94b5ff7af7b7893f4ce052e7
+ sha256: 42fb170778b47303e82eddfea9a6d1e1b8af00c927cd5a34595eaa882b903a16
category: main
optional: false
- name: fonttools
- version: 4.53.1
+ version: 4.55.3
manager: conda
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
brotli: ''
- libgcc-ng: '>=12'
+ libgcc: '>=13'
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.53.1-py310h5b4e0ec_0.conda
+ unicodedata2: '>=15.1.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.3-py310h89163eb_1.conda
hash:
- md5: 2c5257cb35d1946f5e80a0cfd69ed7ec
- sha256: 704527a916f81811043921205a7aa4fc8463c6e1069c771ad51078290529e9a9
+ md5: c81251a712a36b477ed2330ec0e1a299
+ sha256: c88ce55e386d77d6bb8b123e99ff338417b716d2ad44848c7423b9194dc4c783
category: main
optional: false
- name: fonttools
- version: 4.53.1
+ version: 4.55.3
manager: conda
platform: win-64
dependencies:
@@ -1352,15 +1443,41 @@ package:
python: '>=3.10,<3.11.0a0'
python_abi: 3.10.*
ucrt: '>=10.0.20348.0'
- unicodedata2: '>=14.0.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.53.1-py310ha8f682b_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.55.3-py310h38315fa_1.conda
hash:
- md5: 2cc3108eee7252ac8dcf22060a97be8d
- sha256: 71940803ccc516c06363badfc4d83b3f730f5916dbacbf6d1f42457785db9525
+ md5: d58ad87c3839221ad0d2747d5a6522c0
+ sha256: 7b9559d269d6d6edb391bd8ca4d4c4c101e533a10738cbd798b626715cd3fd0e
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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: freetype
version: 2.12.1
manager: conda
@@ -1416,63 +1533,60 @@ package:
category: main
optional: false
- name: geoana
- version: 0.4.0
+ version: 0.5.0
manager: conda
platform: linux-64
dependencies:
- empymod: ''
+ libdlf: ''
libgcc-ng: '>=12'
libstdcxx-ng: '>=12'
- matplotlib-base: ''
- numpy: '>=1.23.4,<2.0a0'
+ numpy: '>=1.22.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
+ scipy: '>=1.8'
+ url: https://conda.anaconda.org/conda-forge/linux-64/geoana-0.5.0-py310hcb52e73_4.conda
hash:
- md5: 1bd40020a2aa8efd348d0a7c051d3f22
- sha256: 08a3bdd30b685bcacc097611495175d0b6994f56484a174dc85a0b61945b939c
+ md5: 5a70abcb7d771758abdbefe81367085b
+ sha256: e54743d430e2c98f9d2546cf4420dadccb87a4998ae80fa2985d5a8bd93ade0d
category: main
optional: false
- name: geoana
- version: 0.4.0
+ version: 0.5.0
manager: conda
platform: win-64
dependencies:
- empymod: ''
- matplotlib-base: ''
- numpy: '>=1.23.4,<2.0a0'
+ libdlf: ''
+ numpy: '>=1.22.4,<2.0a0'
python: '>=3.10,<3.11.0a0'
python_abi: 3.10.*
- scipy: '>=0.13'
+ scipy: '>=1.8'
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
+ vc14_runtime: '>=14.29.30139'
+ url: https://conda.anaconda.org/conda-forge/win-64/geoana-0.5.0-py310h4856b71_4.conda
hash:
- md5: dc83eae4fe4c634d111e066e13bada84
- sha256: e67adde2539020fa905a169ad4e06a5d39b6fa94ba87de279e7547c1f7742971
+ md5: ea10d52800881e088c64ee3f2ea024e8
+ sha256: 0cd07365c7d2891e998647a483e2a4590d3c3e52d255eabbdf6162eae527b4c2
category: main
optional: false
- name: greenlet
- version: 3.0.3
+ version: 3.1.1
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
+ __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.0.3-py310hc6cd4ac_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.1.1-py310hf71b8c6_1.conda
hash:
- md5: fb478fd83c001cbf8ab01c29b857262e
- sha256: 18a3ed470b6c4bf4ee5dea3ce134a36f4eda9dafa172acc3799d7465727d57f5
+ md5: 973d74c46d37ed8bbdbe721fb64a4357
+ sha256: 5a03a750d23a26a2660799f60a4cce4e951f5a5ee70db97216ae306b82401c61
category: dev
optional: true
- name: greenlet
- version: 3.0.3
+ version: 3.1.1
manager: conda
platform: win-64
dependencies:
@@ -1481,10 +1595,36 @@ package:
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.0.3-py310h00ffb61_0.conda
+ 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: 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: dev
+ optional: true
+- 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: e4b85f3e27b8210d5736906f8e11d149
- sha256: 9fc5732fb68ec7bfdf6161b6e77b6173da4dff30ac4c1262473aaa71b39efec6
+ md5: 7ee49e89531c0dcbba9466f6d115d585
+ sha256: 622516185a7c740d5c7f27016d0c15b45782c1501e5611deec63fd70344ce7c8
category: dev
optional: true
- name: h2
@@ -1494,11 +1634,11 @@ package:
dependencies:
hpack: '>=4.0,<5'
hyperframe: '>=6.0,<7'
- python: '>=3.6.1'
- url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda
hash:
- md5: b748fbf7060927a6e82df7cb5ee8f097
- sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a
+ md5: 825927dc7b0f287ef8d4d0011bb113b1
+ sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c
category: main
optional: false
- name: h2
@@ -1506,86 +1646,88 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6.1'
hpack: '>=4.0,<5'
hyperframe: '>=6.0,<7'
- url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda
hash:
- md5: b748fbf7060927a6e82df7cb5ee8f097
- sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a
+ md5: 825927dc7b0f287ef8d4d0011bb113b1
+ sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c
category: main
optional: false
- name: h5py
- version: 3.11.0
+ version: 3.12.1
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
cached-property: ''
- hdf5: '>=1.14.3,<1.14.4.0a0'
- libgcc-ng: '>=12'
+ hdf5: '>=1.14.4,<1.14.5.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.11.0-nompi_py310hf054cd7_102.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py310hacc6608_103.conda
hash:
- md5: f74f9a0a4d713f5eec89917883f4ae7e
- sha256: 5f7a00f4c13adacde260a918153057f3fd0221e8528357bb83627a643f148a4c
+ md5: 35b89d96d270933ff94caf9e0e6d23f0
+ sha256: bb08b031298d33a8b5e37e1f16671399d23efc2cb00c679e969ef232f197f2aa
category: main
optional: false
- name: h5py
- version: 3.11.0
+ version: 3.12.1
manager: conda
platform: win-64
dependencies:
cached-property: ''
- hdf5: '>=1.14.3,<1.14.4.0a0'
+ hdf5: '>=1.14.4,<1.14.5.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.11.0-nompi_py310h2b0be38_102.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/h5py-3.12.1-nompi_py310h972678a_103.conda
hash:
- md5: 6ea1515f0984ae6e916cc1f124e6b664
- sha256: 7d1753e538fafea74e36c2da8c0e10d47b057a2623dbb96959395ce5b1dfc80c
+ md5: cf0700db1cf0a5c019f529a572aaafa7
+ sha256: a8543748261336eaf42acf7d9b5f8dc54cc7a1fa04eb5a69c3e4e6cdabd389d2
category: main
optional: false
- name: hdf5
- version: 1.14.3
+ version: 1.14.4
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
libaec: '>=1.1.3,<2.0a0'
- libcurl: '>=8.8.0,<9.0a0'
- libgcc-ng: '>=12'
- libgfortran-ng: ''
- libgfortran5: '>=12.3.0'
- libstdcxx-ng: '>=12'
- libzlib: '>=1.2.13,<2.0a0'
- openssl: '>=3.3.1,<4.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_hdf9ad27_105.conda
+ libcurl: '>=8.10.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.4-nompi_h2d575fe_105.conda
hash:
- md5: 7e1729554e209627636a0f6fabcdd115
- sha256: 2278fa07da6f96e807d402cd55480624d67d2dee202191aaaf278ce5ab23605a
+ md5: d76fff0092b6389a12134ddebc0929bd
+ sha256: 93d2bfc672f3ee0988d277ce463330a467f3686d3f7ee37812a3d8ca11776d77
category: main
optional: false
- name: hdf5
- version: 1.14.3
+ version: 1.14.4
manager: conda
platform: win-64
dependencies:
libaec: '>=1.1.3,<2.0a0'
- libcurl: '>=8.8.0,<9.0a0'
- libzlib: '>=1.2.13,<2.0a0'
- openssl: '>=3.3.1,<4.0a0'
+ libcurl: '>=8.10.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_h2b43c12_105.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.4-nompi_hd5d9e70_105.conda
hash:
- md5: 5788de34381caf624b78c4981618dc0a
- sha256: 56c803607a64b5117a8b4bcfdde722e4fa40970ddc4c61224b0981cbb70fb005
+ md5: 4381be33460283890c34341ecfa42d97
+ sha256: e8ced65c604a3b9e4803758a25149d71d8096f186fe876817a0d1d97190550c0
category: main
optional: false
- name: hpack
@@ -1593,11 +1735,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: ''
- url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 914d6646c4dbb1fd3ff539830a12fd71
- sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8
+ md5: 2aa5ff7fa34a81b9196532c84c10d865
+ sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5
category: main
optional: false
- name: hpack
@@ -1605,75 +1747,127 @@ package:
manager: conda
platform: win-64
dependencies:
- python: ''
- url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 914d6646c4dbb1fd3ff539830a12fd71
- sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8
+ md5: 2aa5ff7fa34a81b9196532c84c10d865
+ sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5
category: main
optional: false
-- name: hyperframe
- version: 6.0.1
+- name: httpcore
+ version: 1.0.7
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+ 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: 9f765cbfab6870c8435b9eefecd7a1f4
- sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330
- category: main
- optional: false
+ md5: 2ca8e6dbc86525c8b95e3c0ffa26442e
+ sha256: c84d012a245171f3ed666a8bf9319580c269b7843ffa79f26468842da3abd5df
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: hyperframe
version: 6.0.1
manager: conda
- platform: win-64
+ platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda
hash:
- md5: 9f765cbfab6870c8435b9eefecd7a1f4
- sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330
+ md5: 566e75c90c1d0c8c459eb0ad9833dc7a
+ sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b
category: main
optional: false
-- name: icu
- version: '75.1'
+- name: hyperframe
+ version: 6.0.1
manager: conda
- platform: linux-64
+ platform: win-64
dependencies:
- __glibc: '>=2.17,<3.0.a0'
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda
hash:
- md5: 8b189310083baabfb622af68fd9d3ae3
- sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e
+ md5: 566e75c90c1d0c8c459eb0ad9833dc7a
+ sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b
category: main
optional: false
- name: idna
- version: '3.7'
+ version: '3.10'
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
hash:
- md5: c0cc1420498b17414d8617d0b9f506ca
- sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b
- category: main
- optional: false
+ md5: 39a4f67be3286c86d696df570b1201b7
+ sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87
+ category: dev
+ optional: true
- name: idna
- version: '3.7'
+ version: '3.10'
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda
hash:
- md5: c0cc1420498b17414d8617d0b9f506ca
- sha256: 9687ee909ed46169395d4f99a0ee94b80a52f87bed69cd454bb6d37ffeb0ec7b
- category: main
- optional: false
+ md5: 39a4f67be3286c86d696df570b1201b7
+ sha256: d7a472c9fd479e2e8dcb83fb8d433fce971ea369d704ece380e876f9c3494e87
+ category: dev
+ optional: true
- name: imagesize
version: 1.4.1
manager: conda
@@ -1699,79 +1893,79 @@ package:
category: dev
optional: true
- name: importlib-metadata
- version: 8.2.0
+ version: 8.5.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
+ python: '>=3.9'
zipp: '>=0.5'
- url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.2.0-pyha770c72_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda
hash:
- md5: c261d14fc7f49cdd403868998a18c318
- sha256: 15dd2beba1c6f780fec6c5351bbce815d27a29561f422fe830133c995ef90b8a
- category: dev
- optional: true
+ md5: 315607a3030ad5d5227e76e0733798ff
+ sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9
+ category: main
+ optional: false
- name: importlib-metadata
- version: 8.2.0
+ version: 8.5.0
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
+ python: '>=3.9'
zipp: '>=0.5'
- url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.2.0-pyha770c72_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda
hash:
- md5: c261d14fc7f49cdd403868998a18c318
- sha256: 15dd2beba1c6f780fec6c5351bbce815d27a29561f422fe830133c995ef90b8a
- category: dev
- optional: true
+ md5: 315607a3030ad5d5227e76e0733798ff
+ sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9
+ category: main
+ optional: false
- name: importlib_metadata
- version: 8.2.0
+ version: 8.5.0
manager: conda
platform: linux-64
dependencies:
- importlib-metadata: '>=8.2.0,<8.2.1.0a0'
- url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.2.0-hd8ed1ab_0.conda
+ importlib-metadata: '>=8.5.0,<8.5.1.0a0'
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_1.conda
hash:
- md5: 0fd030dce707a6654472cf7619b0b01b
- sha256: 4a0eacc41786d97176fb53c19d25c4f9b8ab4c9a0ee1fd6f09bc13ca197c21d9
- category: dev
- optional: true
+ md5: c70dd0718dbccdcc6d5828de3e71399d
+ sha256: 204fc7f02be8acda93073f5126b9707b8847b673d4c6558db208973c92f9af3c
+ category: main
+ optional: false
- name: importlib_metadata
- version: 8.2.0
+ version: 8.5.0
manager: conda
platform: win-64
dependencies:
- importlib-metadata: '>=8.2.0,<8.2.1.0a0'
- url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.2.0-hd8ed1ab_0.conda
+ importlib-metadata: '>=8.5.0,<8.5.1.0a0'
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_1.conda
hash:
- md5: 0fd030dce707a6654472cf7619b0b01b
- sha256: 4a0eacc41786d97176fb53c19d25c4f9b8ab4c9a0ee1fd6f09bc13ca197c21d9
- category: dev
- optional: true
+ md5: c70dd0718dbccdcc6d5828de3e71399d
+ sha256: 204fc7f02be8acda93073f5126b9707b8847b673d4c6558db208973c92f9af3c
+ category: main
+ optional: false
- name: importlib_resources
- version: 6.4.0
+ version: 6.5.2
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
+ python: '>=3.9'
zipp: '>=3.1.0'
- url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda
hash:
- md5: c5d3907ad8bd7bf557521a1833cf7e6d
- sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de
+ md5: c85c76dc67d75619a92f51dfbce06992
+ sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80
category: dev
optional: true
- name: importlib_resources
- version: 6.4.0
+ version: 6.5.2
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
+ python: '>=3.9'
zipp: '>=3.1.0'
- url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda
hash:
- md5: c5d3907ad8bd7bf557521a1833cf7e6d
- sha256: c6ae80c0beaeabb342c5b041f19669992ae6e937dbec56ced766cb035900f9de
+ md5: c85c76dc67d75619a92f51dfbce06992
+ sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80
category: dev
optional: true
- name: iniconfig
@@ -1779,11 +1973,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: f800d2da156d08e289b14e87e43c1ae5
- sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666
+ md5: 6837f3eff7dcea42ecd714ce1ac2b108
+ sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca
category: dev
optional: true
- name: iniconfig
@@ -1791,22 +1985,22 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: f800d2da156d08e289b14e87e43c1ae5
- sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666
+ md5: 6837f3eff7dcea42ecd714ce1ac2b108
+ sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca
category: dev
optional: true
- name: intel-openmp
- version: 2024.2.0
+ version: 2023.2.0
manager: conda
platform: win-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.0-h57928b3_980.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50497.conda
hash:
- md5: 9c28c39e64871a0adef7d1195bd58655
- sha256: e3ddfb67e0a922868e68f83d0b56755ff1c280ffa959a0c5ee6a922aaf7022b0
+ md5: a401f3cae152deb75bbed766a90a6312
+ sha256: dd9fded25ebe5c66af30ac6e3685146efdc2d7787035f01bfb546b347f138f6f
category: main
optional: false
- name: ipykernel
@@ -1839,19 +2033,19 @@ package:
manager: conda
platform: win-64
dependencies:
- packaging: ''
- psutil: ''
__win: ''
- nest-asyncio: ''
- python: '>=3.8'
- tornado: '>=6.1'
+ comm: '>=0.1.1'
+ debugpy: '>=1.6.5'
+ ipython: '>=7.23.1'
jupyter_client: '>=6.1.12'
jupyter_core: '>=4.12,!=5.0.*'
- ipython: '>=7.23.1'
matplotlib-inline: '>=0.1'
- debugpy: '>=1.6.5'
+ nest-asyncio: ''
+ packaging: ''
+ psutil: ''
+ python: '>=3.8'
pyzmq: '>=24'
- comm: '>=0.1.1'
+ tornado: '>=6.1'
traitlets: '>=5.4.0'
url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh4bbf305_0.conda
hash:
@@ -1860,7 +2054,7 @@ package:
category: dev
optional: true
- name: ipython
- version: 8.26.0
+ version: 8.31.0
manager: conda
platform: linux-64
dependencies:
@@ -1877,34 +2071,34 @@ package:
stack_data: ''
traitlets: '>=5.13.0'
typing_extensions: '>=4.6'
- url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.26.0-pyh707e725_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.31.0-pyh707e725_0.conda
hash:
- md5: f64d3520d5d00321c10f4dabb5b903f3
- sha256: a40c2859a055d98ba234d67b233fb1ba55d86cbe632ec96eecb7c5019c16478b
+ md5: 1d7fcd803dfa936a6c3bd051b293241c
+ sha256: e10d1172ebf950f8f087f0d9310d215f5ddb8f3ad247bfa58ab5a909b3cabbdc
category: dev
optional: true
- name: ipython
- version: 8.26.0
+ version: 8.31.0
manager: conda
platform: win-64
dependencies:
- colorama: ''
__win: ''
+ colorama: ''
decorator: ''
exceptiongroup: ''
+ jedi: '>=0.16'
matplotlib-inline: ''
- stack_data: ''
pickleshare: ''
- python: '>=3.10'
- pygments: '>=2.4.0'
- jedi: '>=0.16'
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.26.0-pyh7428d3b_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.31.0-pyh7428d3b_0.conda
hash:
- md5: f5047e2bc6a82dcdf2f169fdb0bbed99
- sha256: b0fd9f89ef87c4b968ae8aae01c4ff8969eb4463f1fb28c77ff0b33b444d9cef
+ md5: 749ce640fcb691daa2579344cca50f6e
+ sha256: bce70d36099dbb2c0a4b9cb7c3f2a8742db94a63aea329a75688d6b93ae07ebb
category: dev
optional: true
- name: ipython_genutils
@@ -1912,11 +2106,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=2.7'
- url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_1.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_2.conda
hash:
- md5: f8ed9f18dce81e4ee55c858cc2f8548a
- sha256: 72fbbe8bc511f20268d347c1a06e279128237e096c4c174b2f9164a661c6b13e
+ md5: 2f0ba4bc12af346bc6c99bdc377e8944
+ sha256: 45821a8986b4cb2421f766b240dbe6998a3c3123f012dd566720c1322e9b6e18
category: dev
optional: true
- name: ipython_genutils
@@ -1924,15 +2118,15 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=2.7'
- url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_1.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_2.conda
hash:
- md5: f8ed9f18dce81e4ee55c858cc2f8548a
- sha256: 72fbbe8bc511f20268d347c1a06e279128237e096c4c174b2f9164a661c6b13e
+ md5: 2f0ba4bc12af346bc6c99bdc377e8944
+ sha256: 45821a8986b4cb2421f766b240dbe6998a3c3123f012dd566720c1322e9b6e18
category: dev
optional: true
- name: ipywidgets
- version: 7.8.3
+ version: 7.8.5
manager: conda
platform: linux-64
dependencies:
@@ -1942,29 +2136,55 @@ package:
jupyterlab_widgets: '>=1.0.0,<3'
python: '>=3.3'
traitlets: '>=4.3.1'
- widgetsnbextension: '>=3.6.8,<3.7.0'
- url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.3-pyhd8ed1ab_0.conda
+ widgetsnbextension: '>=3.6.10,<3.7.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.5-pyhd8ed1ab_0.conda
hash:
- md5: 7bae4ae4c216993c722e2a0d06715236
- sha256: dfba08adde2dd7dbc017846584d2761d5e4a1a839629fa4d27d59bf640165656
+ md5: 47672c493015ab57d5fcde9531ab18ef
+ sha256: 8cc67e44137bb779c76d92952fdc4d8cd475605f4f0d13e8d0f04f25c056939b
category: dev
optional: true
- name: ipywidgets
- version: 7.8.3
+ version: 7.8.5
manager: conda
platform: win-64
dependencies:
- python: '>=3.3'
+ comm: '>=0.1.3'
ipython: '>=4.0.0'
- traitlets: '>=4.3.1'
ipython_genutils: '>=0.2.0,<0.3.0'
- comm: '>=0.1.3'
jupyterlab_widgets: '>=1.0.0,<3'
- widgetsnbextension: '>=3.6.8,<3.7.0'
- url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.3-pyhd8ed1ab_0.conda
+ python: '>=3.3'
+ traitlets: '>=4.3.1'
+ widgetsnbextension: '>=3.6.10,<3.7.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.5-pyhd8ed1ab_0.conda
hash:
- md5: 7bae4ae4c216993c722e2a0d06715236
- sha256: dfba08adde2dd7dbc017846584d2761d5e4a1a839629fa4d27d59bf640165656
+ md5: 47672c493015ab57d5fcde9531ab18ef
+ sha256: 8cc67e44137bb779c76d92952fdc4d8cd475605f4f0d13e8d0f04f25c056939b
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
optional: true
- name: isort
@@ -1972,12 +2192,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8,<4.0'
+ python: '>=3.9,<4.0'
setuptools: ''
- url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda
hash:
- md5: 1d25ed2b95b92b026aaa795eabec8d91
- sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2
+ md5: ef7dc847f19fe4859d5aaa33385bf509
+ sha256: 6ebf6e83c2d449760ad5c5cc344711d6404f9e3cf6952811b8678aca5a4ab01f
category: dev
optional: true
- name: isort
@@ -1985,64 +2205,64 @@ package:
manager: conda
platform: win-64
dependencies:
+ python: '>=3.9,<4.0'
setuptools: ''
- python: '>=3.8,<4.0'
- url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda
hash:
- md5: 1d25ed2b95b92b026aaa795eabec8d91
- sha256: 78a7e2037029366d2149f73c8d02e93cac903d535e208cc4517808b0b42e85f2
+ md5: ef7dc847f19fe4859d5aaa33385bf509
+ sha256: 6ebf6e83c2d449760ad5c5cc344711d6404f9e3cf6952811b8678aca5a4ab01f
category: dev
optional: true
- name: jedi
- version: 0.19.1
+ version: 0.19.2
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda
hash:
- md5: 81a3be0b2023e1ea8555781f0ad904a2
- sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a
+ md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9
+ sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8
category: dev
optional: true
- name: jedi
- version: 0.19.1
+ version: 0.19.2
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda
hash:
- md5: 81a3be0b2023e1ea8555781f0ad904a2
- sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a
+ md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9
+ sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8
category: dev
optional: true
- name: jinja2
- version: 3.1.4
+ version: 3.1.5
manager: conda
platform: linux-64
dependencies:
markupsafe: '>=2.0'
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda
hash:
- md5: 7b86ecb7d3557821c649b3c31e3eb9f2
- sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d
+ md5: 2752a6ed44105bfb18c9bef1177d9dcd
+ sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3
category: main
optional: false
- name: jinja2
- version: 3.1.4
+ version: 3.1.5
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
markupsafe: '>=2.0'
- url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda
hash:
- md5: 7b86ecb7d3557821c649b3c31e3eb9f2
- sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d
+ md5: 2752a6ed44105bfb18c9bef1177d9dcd
+ sha256: 98977694b9ecaa3218662f843425f39501f81973c450f995eec68f1803ed71c3
category: main
optional: false
- name: joblib
@@ -2050,12 +2270,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
+ python: '>=3.9'
setuptools: ''
- url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda
hash:
- md5: 25df261d4523d9f9783bcdb7208d872f
- sha256: 8ad719524b1039510fcbd75eb776123189d75e2c09228189257ddbcab86f5b64
+ md5: bf8243ee348f3a10a14ed0cae323e0c1
+ sha256: 51cc2dc491668af0c4d9299b0ab750f16ccf413ec5e2391b924108c1fbacae9b
category: main
optional: false
- name: joblib
@@ -2063,14 +2283,64 @@ package:
manager: conda
platform: win-64
dependencies:
+ python: '>=3.9'
setuptools: ''
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/joblib-1.4.2-pyhd8ed1ab_1.conda
hash:
- md5: 25df261d4523d9f9783bcdb7208d872f
- sha256: 8ad719524b1039510fcbd75eb776123189d75e2c09228189257ddbcab86f5b64
+ md5: bf8243ee348f3a10a14ed0cae323e0c1
+ sha256: 51cc2dc491668af0c4d9299b0ab750f16ccf413ec5e2391b924108c1fbacae9b
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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: jsonschema
version: 4.23.0
manager: conda
@@ -2080,13 +2350,13 @@ package:
importlib_resources: '>=1.4.0'
jsonschema-specifications: '>=2023.03.6'
pkgutil-resolve-name: '>=1.3.10'
- python: '>=3.8'
+ 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_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda
hash:
- md5: da304c192ad59975202859b367d0f6a2
- sha256: 7d0c4c0346b26be9f220682b7c5c0d84606d48c6dbc36fc238e4452dda733aff
+ md5: a3cead9264b331b32fe8f0aabc967522
+ sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893
category: dev
optional: true
- name: jsonschema
@@ -2094,268 +2364,461 @@ package:
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'
+ 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_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_1.conda
hash:
- md5: da304c192ad59975202859b367d0f6a2
- sha256: 7d0c4c0346b26be9f220682b7c5c0d84606d48c6dbc36fc238e4452dda733aff
+ md5: a3cead9264b331b32fe8f0aabc967522
+ sha256: be992a99e589146f229c58fe5083e0b60551d774511c494f91fe011931bd7893
category: dev
optional: true
- name: jsonschema-specifications
- version: 2023.12.1
+ version: 2024.10.1
manager: conda
platform: linux-64
dependencies:
- importlib_resources: '>=1.4.0'
- python: '>=3.8'
+ python: '>=3.9'
referencing: '>=0.31.0'
- url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda
hash:
- md5: a0e4efb5f35786a05af4809a2fb1f855
- sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2
+ md5: 3b519bc21bc80e60b456f1e62962a766
+ sha256: 37127133837444cf0e6d1a95ff5a505f8214ed4e89e8e9343284840e674c6891
category: dev
optional: true
- name: jsonschema-specifications
- version: 2023.12.1
+ version: 2024.10.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- importlib_resources: '>=1.4.0'
+ python: '>=3.9'
referencing: '>=0.31.0'
- url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_1.conda
+ hash:
+ md5: 3b519bc21bc80e60b456f1e62962a766
+ sha256: 37127133837444cf0e6d1a95ff5a505f8214ed4e89e8e9343284840e674c6891
+ category: dev
+ optional: true
+- 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: a0e4efb5f35786a05af4809a2fb1f855
- sha256: a9630556ddc3121c0be32f4cbf792dd9102bd380d5cd81d57759d172cf0c2da2
+ md5: a5b1a8065857cc4bd8b7a38d063bb728
+ sha256: 6e0184530011961a0802fda100ecdfd4b0eca634ed94c37e553b72e21c26627d
+ category: dev
+ optional: true
+- 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: dev
optional: true
- name: jupyter-book
- version: 0.15.1
+ version: 1.0.3
manager: conda
platform: linux-64
dependencies:
click: '>=7.1,<9'
- docutils: '>=0.15,<0.19'
+ importlib-metadata: '>=4.8.3'
jinja2: ''
jsonschema: <5
- linkify-it-py: '>=2.0.0,<2.1.0'
- myst-nb: '>=0.17.1,<0.18.0'
- python: '>=3.7'
+ linkify-it-py: '>=2,<3'
+ myst-nb: '>=1,<3'
+ myst-parser: '>=1,<3'
+ python: '>=3.9'
pyyaml: ''
- sphinx: '>=4,<6'
- sphinx-book-theme: '>=1.0.0,<1.1.0'
+ sphinx: '>=5,<8'
+ sphinx-book-theme: '>=1.1.0,<2'
sphinx-comments: ''
sphinx-copybutton: ''
- sphinx-design: '>=0.3.0,<0.4.0'
- sphinx-external-toc: '>=0.3.1,<0.4.0'
- sphinx-jupyterbook-latex: '>=0.5.2,<0.6.0'
- sphinx-multitoc-numbering: '>=0.1.3,<0.2.0'
- sphinx-thebe: '>=0.2.0,<0.3.0'
+ 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.2.0,<=2.5.0'
- url: https://conda.anaconda.org/conda-forge/noarch/jupyter-book-0.15.1-pyhd8ed1ab_0.conda
+ sphinxcontrib-bibtex: '>=2.5.0,<3'
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyter-book-1.0.3-pyhd8ed1ab_1.conda
hash:
- md5: f10d556d3b3dc0aeae6aee37c412ea60
- sha256: b50732cd6ab656781f13aa43b8ce420266508235a1fb4ec7d49ca677dbe2a3d0
+ md5: 739a29ac73026e68405153b50d0c60c2
+ sha256: f028c32b5d97d24df44b1a41f771a9932e07815c60c02e24acd9bd2eca31097f
category: dev
optional: true
- name: jupyter-book
- version: 0.15.1
+ version: 1.0.3
manager: conda
platform: win-64
dependencies:
- pyyaml: ''
+ 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: ''
- sphinx-comments: ''
- python: '>=3.7'
- click: '>=7.1,<9'
- sphinx: '>=4,<6'
- sphinx-multitoc-numbering: '>=0.1.3,<0.2.0'
- sphinxcontrib-bibtex: '>=2.2.0,<=2.5.0'
- jsonschema: <5
- docutils: '>=0.15,<0.19'
- linkify-it-py: '>=2.0.0,<2.1.0'
- sphinx-external-toc: '>=0.3.1,<0.4.0'
- sphinx-jupyterbook-latex: '>=0.5.2,<0.6.0'
- myst-nb: '>=0.17.1,<0.18.0'
- sphinx-book-theme: '>=1.0.0,<1.1.0'
- sphinx-design: '>=0.3.0,<0.4.0'
- sphinx-thebe: '>=0.2.0,<0.3.0'
- url: https://conda.anaconda.org/conda-forge/noarch/jupyter-book-0.15.1-pyhd8ed1ab_0.conda
+ sphinxcontrib-bibtex: '>=2.5.0,<3'
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyter-book-1.0.3-pyhd8ed1ab_1.conda
hash:
- md5: f10d556d3b3dc0aeae6aee37c412ea60
- sha256: b50732cd6ab656781f13aa43b8ce420266508235a1fb4ec7d49ca677dbe2a3d0
+ md5: 739a29ac73026e68405153b50d0c60c2
+ sha256: f028c32b5d97d24df44b1a41f771a9932e07815c60c02e24acd9bd2eca31097f
category: dev
optional: true
- name: jupyter-cache
- version: 0.6.1
+ version: 1.0.1
manager: conda
platform: linux-64
dependencies:
attrs: ''
click: ''
importlib-metadata: ''
- nbclient: '>=0.2,<0.8'
+ nbclient: '>=0.2'
nbformat: ''
- python: '>=3.8'
+ python: '>=3.9'
pyyaml: ''
sqlalchemy: '>=1.3.12,<3'
tabulate: ''
- url: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-0.6.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda
hash:
- md5: 2e360820ae68e3d28e1a5a9d2714ca5c
- sha256: b22ba507904f33fcc7b218cc2a3ed8d39027524d0f223f3696b8344b7c5a1e1f
+ md5: b0ee650829b8974202a7abe7f8b81e5a
+ sha256: 054d397dd45ed08bffb0976702e553dfb0d0b0a477da9cff36e2ea702e928f48
category: dev
optional: true
- name: jupyter-cache
- version: 0.6.1
+ version: 1.0.1
manager: conda
platform: win-64
dependencies:
- pyyaml: ''
+ attrs: ''
click: ''
importlib-metadata: ''
- tabulate: ''
- attrs: ''
+ nbclient: '>=0.2'
nbformat: ''
- python: '>=3.8'
+ python: '>=3.9'
+ pyyaml: ''
sqlalchemy: '>=1.3.12,<3'
- nbclient: '>=0.2,<0.8'
- url: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-0.6.1-pyhd8ed1ab_0.conda
+ 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: 2e360820ae68e3d28e1a5a9d2714ca5c
- sha256: b22ba507904f33fcc7b218cc2a3ed8d39027524d0f223f3696b8344b7c5a1e1f
+ md5: 0b4c3908e5a38ea22ebb98ee5888c768
+ sha256: 1565c8b1423a37fca00fe0ab2a17cd8992c2ecf23e7867a1c9f6f86a9831c196
+ category: dev
+ optional: true
+- 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: dev
optional: true
- name: jupyter_client
- version: 7.3.4
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: jupyter_events
+ version: 0.11.0
+ manager: conda
+ platform: linux-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.11.0-pyhd8ed1ab_0.conda
+ hash:
+ md5: 2d8876ca6bda213622dfbc3d1da56ecb
+ sha256: eeb32aa58d37b130387628d5c151092f6d3fcf0a6964294bef06d6bac117f3c4
+ category: dev
+ optional: true
+- name: jupyter_events
+ version: 0.11.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.11.0-pyhd8ed1ab_0.conda
+ hash:
+ md5: 2d8876ca6bda213622dfbc3d1da56ecb
+ sha256: eeb32aa58d37b130387628d5c151092f6d3fcf0a6964294bef06d6bac117f3c4
+ category: dev
+ optional: true
+- name: jupyter_server
+ version: 2.15.0
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
+ 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: dad80938cdccc5c274e954dda56b6eb5
- sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b
+ md5: 6ba8c206b5c6f52b82435056cf74ee46
+ sha256: be5f9774065d94c4a988f53812b83b67618bec33fcaaa005a98067d506613f8a
category: dev
optional: true
-- name: jupyter_client
- version: 7.3.4
+- name: jupyter_server
+ version: 2.15.0
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
+ 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: dad80938cdccc5c274e954dda56b6eb5
- sha256: 181b36306cf9f389785c63199a14df6154583b605c86ab6c81f36c2fe57b4c9b
+ md5: 6ba8c206b5c6f52b82435056cf74ee46
+ sha256: be5f9774065d94c4a988f53812b83b67618bec33fcaaa005a98067d506613f8a
category: dev
optional: true
-- name: jupyter_core
- version: 5.7.2
+- name: jupyter_server_terminals
+ version: 0.5.3
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
+ 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: cb92c27600d5716fd526a206aa43342c
- sha256: 837039256d39a249b5bec850f87948e1967c47c9e747056df8155d80c4d3b094
+ md5: 2d983ff1b82a1ccb6f2e9d8784bdd6bd
+ sha256: 0890fc79422191bc29edf17d7b42cff44ba254aa225d31eb30819f8772b775b8
category: dev
optional: true
-- name: jupyter_core
- version: 5.7.2
+- name: jupyter_server_terminals
+ version: 0.5.3
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
+ 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: 6646c59c6c096e0b99c53dc9d3deaada
- sha256: 220a6fe571d3e9a5b5f4467d7f2fb22080b96f7143c9b2703528032528338d50
+ md5: 2d983ff1b82a1ccb6f2e9d8784bdd6bd
+ sha256: 0890fc79422191bc29edf17d7b42cff44ba254aa225d31eb30819f8772b775b8
category: dev
optional: true
-- name: jupyter_server
- version: 1.24.0
+- name: jupyterlab
+ version: 4.3.4
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'
+ 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: ''
- 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
+ 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.4-pyhd8ed1ab_0.conda
hash:
- md5: 7f0d2ec2d4954188ff23503f39823409
- sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da
+ md5: edc13687180382b4444d9f143a2e1ef7
+ sha256: bcf9fc0ea4bd6cf06a7a23b7f8b7bb7d8520eea8d0cdd6d3b975ede7793ed69b
category: dev
optional: true
-- name: jupyter_server
- version: 1.24.0
+- name: jupyterlab
+ version: 4.3.4
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: ''
- jinja2: ''
- prometheus_client: ''
- websocket-client: ''
- argon2-cffi: ''
- send2trash: ''
- python: '>=3.7'
- pyzmq: '>=17'
- jupyter_client: '>=6.1.12'
- terminado: '>=0.8.3'
- tornado: '>=6.1.0'
- 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
+ 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.4-pyhd8ed1ab_0.conda
hash:
- md5: 7f0d2ec2d4954188ff23503f39823409
- sha256: 061c03642e2ecb81017b914c557755993ff71c6c7a96d4a938fd0c7b761e08da
+ md5: edc13687180382b4444d9f143a2e1ef7
+ sha256: bcf9fc0ea4bd6cf06a7a23b7f8b7bb7d8520eea8d0cdd6d3b975ede7793ed69b
category: dev
optional: true
- name: jupyterlab_pygments
@@ -2364,11 +2827,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_2.conda
hash:
- md5: afcd1b53bcac8844540358e33f33d28f
- sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242
+ md5: fd312693df06da3578383232528c468d
+ sha256: dc24b900742fdaf1e077d9a3458fd865711de80bca95fe3c6d46610c532c6ef0
category: dev
optional: true
- name: jupyterlab_pygments
@@ -2376,40 +2839,80 @@ package:
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
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: afcd1b53bcac8844540358e33f33d28f
- sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242
+ md5: 9dc4b2b0f41f0de41d27f3293e319357
+ sha256: d03d0b7e23fa56d322993bc9786b3a43b88ccc26e58b77c756619a921ab30e86
category: dev
optional: true
- name: jupyterlab_widgets
- version: 1.1.9
+ version: 1.1.11
manager: conda
platform: linux-64
dependencies:
python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.9-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.11-pyhd8ed1ab_0.conda
hash:
- md5: 21a9afd8a0366401d3f6afb921286d0a
- sha256: 63b20fb5ce6ae54db9d69a558bbd265841a5384b8a39fde73ad4f82059fb2d5c
+ md5: 05a08b368343304618b6a88425aa851a
+ sha256: 639544e96969c7513b33bf3201a4dc3095625e34cff16c187f5dec9bee2dfb2f
category: dev
optional: true
- name: jupyterlab_widgets
- version: 1.1.9
+ version: 1.1.11
manager: conda
platform: win-64
dependencies:
python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.9-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.11-pyhd8ed1ab_0.conda
hash:
- md5: 21a9afd8a0366401d3f6afb921286d0a
- sha256: 63b20fb5ce6ae54db9d69a558bbd265841a5384b8a39fde73ad4f82059fb2d5c
+ md5: 05a08b368343304618b6a88425aa851a
+ sha256: 639544e96969c7513b33bf3201a4dc3095625e34cff16c187f5dec9bee2dfb2f
category: dev
optional: true
- name: jupytext
- version: 1.16.3
+ version: 1.16.6
manager: conda
platform: linux-64
dependencies:
@@ -2417,31 +2920,31 @@ package:
mdit-py-plugins: ''
nbformat: ''
packaging: ''
- python: '>=3.8'
+ python: '>=3.9'
pyyaml: ''
tomli: ''
- url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.3-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.6-pyh80e38bb_0.conda
hash:
- md5: cd2b5f8c56bd2f7e890ff06da3700cf6
- sha256: d6a7214f4fe83103f23ff076a4ff5e32428e3709b4a426bfe3bfbab3b881b99f
+ md5: f25972a8da0a44826594059a1bb4d82a
+ sha256: 8704b9547bf444b737f9ff6b9a8855e7ab0b83f2cee58dd913dfd7600a906b78
category: dev
optional: true
- name: jupytext
- version: 1.16.3
+ version: 1.16.6
manager: conda
platform: win-64
dependencies:
- pyyaml: ''
- packaging: ''
+ markdown-it-py: '>=1.0'
+ mdit-py-plugins: ''
nbformat: ''
+ packaging: ''
+ python: '>=3.9'
+ pyyaml: ''
tomli: ''
- mdit-py-plugins: ''
- python: '>=3.8'
- markdown-it-py: '>=1.0'
- url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.3-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.16.6-pyh80e38bb_0.conda
hash:
- md5: cd2b5f8c56bd2f7e890ff06da3700cf6
- sha256: d6a7214f4fe83103f23ff076a4ff5e32428e3709b4a426bfe3bfbab3b881b99f
+ md5: f25972a8da0a44826594059a1bb4d82a
+ sha256: 8704b9547bf444b737f9ff6b9a8855e7ab0b83f2cee58dd913dfd7600a906b78
category: dev
optional: true
- name: keyutils
@@ -2457,22 +2960,23 @@ package:
category: main
optional: false
- name: kiwisolver
- version: 1.4.5
+ version: 1.4.7
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
+ __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.5-py310hd41b1e2_1.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py310h3788b33_0.conda
hash:
- md5: b8d67603d43b23ce7e988a5d81a7ab79
- sha256: bb51906639bced3de1d4d7740ac284cdaa89e2f22e0b1ec796378b090b0648ba
+ md5: 4186d9b4d004b0fe0de6aa62496fb48a
+ sha256: d97a9894803674e4f8155a5e98a49337d28bdee77dfd87e1614a824d190cd086
category: main
optional: false
- name: kiwisolver
- version: 1.4.5
+ version: 1.4.7
manager: conda
platform: win-64
dependencies:
@@ -2481,10 +2985,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.7-py310hc19bc0b_0.conda
hash:
- md5: a340ed8a9c513e2782cb7feb3cfe665d
- sha256: 8969469887a0b72f732ec9250fd25982499270bda473a5db4c04ee252db96d89
+ md5: 50d96539497fc7493cbe469fbb6b8b6e
+ sha256: a87dff54b753a2ee19188ab9491a63d40a08873f17c7797cd5c44467a2ff4f12
category: main
optional: false
- name: krb5
@@ -2551,7 +3055,7 @@ package:
dependencies:
libgcc-ng: '>=12'
libjpeg-turbo: '>=3.0.0,<4.0a0'
- libtiff: '>=4.6.0,<4.7.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
@@ -2564,7 +3068,7 @@ package:
platform: win-64
dependencies:
libjpeg-turbo: '>=3.0.0,<4.0a0'
- libtiff: '>=4.6.0,<4.7.0a0'
+ libtiff: '>=4.6.0,<4.8.0a0'
ucrt: '>=10.0.20348.0'
vc: '>=14.2,<15'
vc14_runtime: '>=14.29.30139'
@@ -2575,14 +3079,15 @@ package:
category: main
optional: false
- name: ld_impl_linux-64
- version: '2.40'
+ version: '2.43'
manager: conda
platform: linux-64
- dependencies: {}
- url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda
+ 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: b80f2f396ca2c28b8c14c437a4ed1e74
- sha256: 764b6950aceaaad0c67ef925417594dd14cd2e22fff864aeef455ac259263d15
+ md5: 048b02e3962f066da18efe3a21b77672
+ sha256: 7c91cea91b13f4314d125d1bedb9d03a29ebbd5080ccdea70260363424646dbe
category: main
optional: false
- name: lerc
@@ -2643,11 +3148,11 @@ package:
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
+ 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: 85f61af03fd291dae33150ffe89dc09a
- sha256: 24e656f13b402b6fceb88df386768445ab9beb657d451a8e5a88d4b3380cf7a4
+ md5: 8bf521f6007b0b0eb91515a1165b5d85
+ sha256: 9e5f27fca79223a5d38ccdf4c468e798c3684ba01bdb6b4b44e61f2103a298eb
category: main
optional: false
- name: libblas
@@ -2655,11 +3160,11 @@ package:
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
+ mkl: 2023.2.0
+ url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-20_win64_mkl.conda
hash:
- md5: b241da5b7a888f72bb3c3e82747334f4
- sha256: 5aef8d69197108f3c320a5d4ad4d19ab9c809cdbbf731c7ab988c227de42d6b5
+ md5: 6cad6cd2fbdeef4d651b8f752a4da960
+ sha256: 34becfe991510be7b9ee05b4ae466c5a26a72af275c3071c1ca7e2308d3f7e64
category: main
optional: false
- name: libbrotlicommon
@@ -2667,11 +3172,12 @@ package:
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
+ __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: aec6c91c7371c26392a06708a73c70e5
- sha256: 40f29d1fab92c847b083739af86ad2f36d8154008cf99b64194e4705a1725d78
+ md5: 41b599ed2b02abcfdd84302bff174b23
+ sha256: d9db2de60ea917298e658143354a530e9ca5f9c63471c65cf47ab39fd2f429e3
category: main
optional: false
- name: libbrotlicommon
@@ -2682,10 +3188,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda
hash:
- md5: f77f319fb82980166569e1280d5b2864
- sha256: f75fed29b0cc503d1b149a4945eaa32df56e19da5e2933de29e8f03947203709
+ md5: f7dc9a8f21d74eab46456df301da2972
+ sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c
category: main
optional: false
- name: libbrotlidec
@@ -2693,12 +3199,13 @@ package:
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
libbrotlicommon: 1.1.0
- libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda
hash:
- md5: f07002e225d7a60a694d42a7bf5ff53f
- sha256: 86fc861246fbe5ad85c1b6b3882aaffc89590a48b42d794d3d5c8e6d99e5f926
+ md5: 9566f0bd264fbd463002e759b8a82401
+ sha256: 2892d512cad096cb03f1b66361deeab58b64e15ba525d6592bb6d609e7045edf
category: main
optional: false
- name: libbrotlidec
@@ -2710,10 +3217,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda
hash:
- md5: 19ce3e1dacc7912b3d6ff40690ba9ae0
- sha256: 1b352ee05931ea24c11cd4a994d673890fd1cc690c21e023e736bdaac2632e93
+ md5: 9bae75ce723fa34e98e239d21d752a7e
+ sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f
category: main
optional: false
- name: libbrotlienc
@@ -2721,12 +3228,13 @@ package:
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
libbrotlicommon: 1.1.0
- libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda
hash:
- md5: 5fc11c6020d421960607d821310fcd4d
- sha256: f751b8b1c4754a2a8dfdc3b4040fa7818f35bbf6b10e905a47d3a194b746b071
+ md5: 06f70867945ea6a84d35836af780f1de
+ sha256: 779f58174e99de3600e939fa46eddb453ec5d3c60bb46cdaa8b4c127224dbf29
category: main
optional: false
- name: libbrotlienc
@@ -2738,10 +3246,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda
hash:
- md5: 71e890a0b361fd58743a13f77e1506b7
- sha256: eae6b76154e594c6d211160c6d1aeed848672618152a562e0eabdfa641d34aca
+ md5: 85741a24d97954a991e55e34bc55990b
+ sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1
category: main
optional: false
- name: libcblas
@@ -2750,10 +3258,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_mkl.conda
hash:
- md5: 361bf757b95488de76c4f123805742d3
- sha256: 892ba10508f22310ccfe748df1fd3b6c7f20e7b6f6b79e69ed337863551c1bd8
+ md5: 7a2972758a03adc92d856072c71c9170
+ sha256: 841b4d44e20e5207f4a74ca98176629ead5ba590384ed6b0fe3c8600248c9fef
category: main
optional: false
- name: libcblas
@@ -2762,110 +3270,113 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-20_win64_mkl.conda
hash:
- md5: fb0b514194c14342a97dfe31a41d60fc
- sha256: d5f60ed6508b3889a77caf5ff2b66203714e45ec4eea6e5cdb12fe6e8ef2bbdb
+ md5: e6d36cfcb2f2dff0f659d2aa0813eb2d
+ sha256: e526023ed8e7f6fde43698cd326dd16c8448f29414bab8a9594b33deb57a5347
category: main
optional: false
- name: libcurl
- version: 8.9.0
+ version: 8.11.1
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
krb5: '>=1.21.3,<1.22.0a0'
- libgcc-ng: '>=12'
- libnghttp2: '>=1.58.0,<2.0a0'
- libssh2: '>=1.11.0,<2.0a0'
+ libgcc: '>=13'
+ libnghttp2: '>=1.64.0,<2.0a0'
+ libssh2: '>=1.11.1,<2.0a0'
libzlib: '>=1.3.1,<2.0a0'
- openssl: '>=3.3.1,<4.0a0'
+ openssl: '>=3.4.0,<4.0a0'
zstd: '>=1.5.6,<1.6.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.9.0-hdb1bdb2_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda
hash:
- md5: 5badfbdb2688d8aaca7bd3c98d557b97
- sha256: ff97a3160117385649e1b7e8b84fefb3561fceae09bb48d2bfdf37bc2b6bfdc9
+ md5: 2b3e0081006dc21e8bf53a91c83a055c
+ sha256: 3cd4075b2a7b5562e46c8ec626f6f9ca57aeecaa94ff7df57eca26daa94c9906
category: main
optional: false
- name: libcurl
- version: 8.9.0
+ version: 8.11.1
manager: conda
platform: win-64
dependencies:
krb5: '>=1.21.3,<1.22.0a0'
- libssh2: '>=1.11.0,<2.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.9.0-h18fefc2_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.11.1-h88aaa65_0.conda
hash:
- md5: 8ae225681b7041c1dccdcd713c9d7424
- sha256: ccf4c2088bb89c88841eb87264050a8c26767222e0b97afb2dbc41a46e0017e0
+ md5: 071d3f18dba5a6a13c6bb70cdb42678f
+ sha256: 1a67f01da0e35296c6d1fdf6baddc45ad3cc2114132ff4638052eb7cf258aab2
category: main
optional: false
- name: libdeflate
- version: '1.20'
+ version: '1.23'
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.20-hd590300_0.conda
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda
hash:
- md5: 8e88f9389f1165d7c0936fe40d9a9a79
- sha256: f8e0f25c382b1d0b87a9b03887a34dbd91485453f1ea991fef726dba57373612
+ md5: 8dfae1d2e74767e9ce36d5fa0d8605db
+ sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66
category: main
optional: false
- name: libdeflate
- version: '1.20'
+ version: '1.23'
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.20-hcfcfb64_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.23-h9062f6e_0.conda
hash:
- md5: b12b5bde5eb201a1df75e49320cc938a
- sha256: 6628a5b76ad70c1a0909563c637ddc446ee824739ba7c348d4da2f0aa6ac9527
+ md5: a9624935147a25b06013099d3038e467
+ sha256: 96c47725a8258159295996ea2758fa0ff9bea330e72b59641642e16be8427ce8
category: main
optional: false
- name: libdlf
- version: 0.2.0
+ version: 0.3.0
manager: conda
platform: linux-64
dependencies:
numpy: ''
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/libdlf-0.2.0-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.10'
+ url: https://conda.anaconda.org/conda-forge/noarch/libdlf-0.3.0-pyhd8ed1ab_1.conda
hash:
- md5: 302f29a6b23069f2605a7842654360c5
- sha256: a71d6cc5eed68ce3089033901ae792b61585e1494413af801b6c7d837b62aca4
+ md5: 2e9654bb2bcf5986c2def3ba35413326
+ sha256: 367c575a6388380d9a0da6ff06571d903ae89366c42d9f16e32de5d359b6971a
category: main
optional: false
- name: libdlf
- version: 0.2.0
+ version: 0.3.0
manager: conda
platform: win-64
dependencies:
numpy: ''
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/libdlf-0.2.0-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.10'
+ url: https://conda.anaconda.org/conda-forge/noarch/libdlf-0.3.0-pyhd8ed1ab_1.conda
hash:
- md5: 302f29a6b23069f2605a7842654360c5
- sha256: a71d6cc5eed68ce3089033901ae792b61585e1494413af801b6c7d837b62aca4
+ md5: 2e9654bb2bcf5986c2def3ba35413326
+ sha256: 367c575a6388380d9a0da6ff06571d903ae89366c42d9f16e32de5d359b6971a
category: main
optional: false
- name: libedit
- version: 3.1.20191231
+ version: 3.1.20240808
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
+ __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.20240808-pl5321h7949ede_0.conda
hash:
- md5: 4d331e44109e3f0e19b4cb8f9b82f3e1
- sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf
+ md5: 8247f80f3dc464d9322e85007e307fe8
+ sha256: 4d0d69ddf9cc7d724a1ccf3a9852e44c8aea9825692582bac2c4e8d21ec95ccd
category: main
optional: false
- name: libev
@@ -2905,41 +3416,53 @@ package:
sha256: 1951ab740f80660e9bc07d2ed3aefb874d78c107264fd810f24a1a6211d4b1a5
category: main
optional: false
-- name: libgcc-ng
- version: 14.1.0
+- 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-ng-14.1.0-h77fa898_0.conda
+ 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-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: ca0fad6a41ddaef54a153b78eccb5037
- sha256: b8e869ac96591cda2704bf7e77a301025e405227791a0bddf14a3dac65125538
+ md5: e39480b9ca41323497b05492a63bc35b
+ sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7
category: main
optional: false
-- name: libgfortran-ng
- version: 14.1.0
+- name: libgfortran
+ version: 14.2.0
manager: conda
platform: linux-64
dependencies:
- libgfortran5: 14.1.0
- url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda
+ libgfortran5: 14.2.0
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda
hash:
- md5: f4ca84fbd6d06b0a052fb2d5b96dde41
- sha256: ef624dacacf97b2b0af39110b36e2fd3e39e358a1a6b7b21b85c9ac22d8ffed9
+ md5: f1fd30127802683586f768875127a987
+ sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977
category: main
optional: false
- name: libgfortran5
- version: 14.1.0
+ version: 14.2.0
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=14.1.0'
- url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda
+ libgcc: '>=14.2.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda
hash:
- md5: 6456c2620c990cd8dde2428a27ba0bc5
- sha256: a67d66b1e60a8a9a9e4440cee627c959acb4810cb182e089a4b0729bfdfbdf90
+ md5: 9822b874ea29af082e5d36098d25427d
+ sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d
category: main
optional: false
- name: libhwloc
@@ -3031,10 +3554,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_mkl.conda
hash:
- md5: a2f166748917d6d6e4707841ca1f519e
- sha256: d6201f860b2d76ed59027e69c2bbad6d1cb211a215ec9705cc487cde488fa1fa
+ md5: 4db0cd03efcdab535f6f066aca4cddbb
+ sha256: 21b4324dd65815f6b5a83c15f0b9a201434d0aa55eeecc37efce7ee70bbbf482
category: main
optional: false
- name: liblapack
@@ -3043,10 +3566,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-20_win64_mkl.conda
hash:
- md5: 82117ef735a916ace2df6f2de4df4824
- sha256: f90d96695938659fad4dd47d92dbeebff4a3824979bfb1aac33c8287a83e9d23
+ md5: 9510d07424d70fcac553d86b3e4a7c14
+ sha256: 7627ef580c26e48c3496b5885fd32be4e4db49fa1077eb21235dc638489565f6
category: main
optional: false
- name: libllvm14
@@ -3063,21 +3586,49 @@ package:
sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a
category: main
optional: false
+- name: liblzma
+ version: 5.6.3
+ 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.3-hb9d3cd8_1.conda
+ hash:
+ md5: 2ecf2f1c7e4e21fcfe6423a51a992d84
+ sha256: e6e425252f3839e2756e4af1ea2074dffd3396c161bf460629f9dfd6a65f15c6
+ category: main
+ optional: false
+- name: liblzma
+ version: 5.6.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/liblzma-5.6.3-h2466b09_1.conda
+ hash:
+ md5: 015b9c0bd1eef60729ab577a38aaf0b5
+ sha256: 24d04bd55adfa44c421c99ce169df38cb1ad2bba5f43151bc847fc802496a1fa
+ category: main
+ optional: false
- name: libnghttp2
- version: 1.58.0
+ version: 1.64.0
manager: conda
platform: linux-64
dependencies:
- c-ares: '>=1.23.0,<2.0a0'
+ __glibc: '>=2.17,<3.0.a0'
+ c-ares: '>=1.32.3,<2.0a0'
libev: '>=4.33,<5.0a0'
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
- libzlib: '>=1.2.13,<2.0.0a0'
- openssl: '>=3.2.0,<4.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda
+ 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: 700ac6ea6d53d5510591c4344d5c989a
- sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb
+ md5: 19e57602824042dfd0446292ef90488b
+ sha256: b0f2b3695b13a989f75d8fd7f4778e1c7aabe3b36db83f0fe80b2cd812c0e975
category: main
optional: false
- name: libnsl
@@ -3093,165 +3644,182 @@ package:
category: main
optional: false
- name: libpng
- version: 1.6.43
+ version: 1.6.45
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/libpng-1.6.43-h2797004_0.conda
+ __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.45-h943b412_0.conda
hash:
- md5: 009981dd9cfcaa4dbfa25ffaed86bcae
- sha256: 502f6ff148ac2777cc55ae4ade01a8fc3543b4ffab25c4e0eaa15f94e90dd997
+ md5: 85cbdaacad93808395ac295b5667d25b
+ sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f
category: main
optional: false
- name: libpng
- version: 1.6.43
+ version: 1.6.45
manager: conda
platform: win-64
dependencies:
- libzlib: '>=1.2.13,<2.0.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/libpng-1.6.43-h19919ed_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.45-had7236b_0.conda
hash:
- md5: 77e398acc32617a0384553aea29e866b
- sha256: 6ad31bf262a114de5bbe0c6ba73b29ed25239d0f46f9d59700310d2ea0b3c142
+ md5: 41fb9e522ec6e0b34a6f23c98b07e1cf
+ sha256: e39c4f1bc8fee08f6a2eb4a88174d14c3a99dbb4850c98f3a87eb83b4dabbfca
category: main
optional: false
- name: libsodium
- version: 1.0.18
+ version: 1.0.20
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
+ libgcc-ng: '>=12'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda
hash:
- md5: c3788462a6fbddafdb413a9f9053e58d
- sha256: 53da0c8b79659df7b53eebdb80783503ce72fb4b10ed6e9e05cc0e9e4207a130
+ md5: a587892d3c13b6621a6091be690dbca2
+ sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161
category: dev
optional: true
- name: libsodium
- version: 1.0.18
+ version: 1.0.20
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
+ 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: 5c1fb45b5e2912c19098750ae8a32604
- sha256: ecc463f0ab6eaf6bc5bd6ff9c17f65595de6c7a38db812222ab8ffde0d3f4bc2
+ md5: 198bb594f202b205c7d18b936fa4524f
+ sha256: 7bcb3edccea30f711b6be9601e083ecf4f435b9407d70fc48fbcf9e5d69a0fc6
category: dev
optional: true
- name: libsqlite
- version: 3.46.0
+ version: 3.47.2
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libzlib: '>=1.2.13,<2.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda
+ __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.47.2-hee588c1_0.conda
hash:
- md5: 18aa975d2094c34aef978060ae7da7d8
- sha256: daee3f68786231dad457d0dfde3f7f1f9a7f2018adabdbb864226775101341a8
+ md5: b58da17db24b6e08bcbf8fed2fb8c915
+ sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352
category: main
optional: false
- name: libsqlite
- version: 3.46.0
+ version: 3.47.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/libsqlite-3.46.0-h2466b09_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.47.2-h67fdade_0.conda
hash:
- md5: 951b0a3a463932e17414cd9f047fa03d
- sha256: 662bd7e0d63c5b8c31cca19b91649e798319b93568a2ba8d1375efb91eeb251b
+ md5: ff00095330e0d35a16bd3bdbd1a2d3e7
+ sha256: ecfc0182c3b2e63c870581be1fa0e4dbdfec70d2011cb4f5bde416ece26c41df
category: main
optional: false
- name: libssh2
- version: 1.11.0
+ version: 1.11.1
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libzlib: '>=1.2.13,<2.0.0a0'
- openssl: '>=3.1.1,<4.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda
+ __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: 1f5a58e686b13bcfde88b93f547d23fe
- sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d
+ md5: be2de152d8073ef1c01b7728475f2fe7
+ sha256: 0407ac9fda2bb67e11e357066eff144c845801d00b5f664efbc48813af1e7bb9
category: main
optional: false
- name: libssh2
- version: 1.11.0
+ version: 1.11.1
manager: conda
platform: win-64
dependencies:
- libzlib: '>=1.2.13,<2.0.0a0'
- openssl: '>=3.1.1,<4.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/libssh2-1.11.0-h7dfc565_0.conda
+ 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: dc262d03aae04fe26825062879141a41
- sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec
+ md5: 234a5554c53625688d51062645337328
+ sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462
category: main
optional: false
- name: libstdcxx-ng
- version: 14.1.0
+ version: 14.2.0
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: 14.1.0
- url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-hc0a3c3a_0.conda
+ libstdcxx: 14.2.0
+ url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda
hash:
- md5: 1cb187a157136398ddbaae90713e2498
- sha256: 88c42b388202ffe16adaa337e36cf5022c63cf09b0405cf06fc6aeacccbe6146
+ md5: 8371ac6457591af2cf6159439c1fd051
+ sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8
category: main
optional: false
- name: libtiff
- version: 4.6.0
+ version: 4.7.0
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
lerc: '>=4.0.0,<5.0a0'
- libdeflate: '>=1.20,<1.21.0a0'
- libgcc-ng: '>=12'
+ libdeflate: '>=1.23,<1.24.0a0'
+ libgcc: '>=13'
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-h1dd3fc0_3.conda
+ liblzma: '>=5.6.3,<6.0a0'
+ libstdcxx: '>=13'
+ libwebp-base: '>=1.4.0,<2.0a0'
+ libzlib: '>=1.3.1,<2.0a0'
+ zstd: '>=1.5.6,<1.6.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda
hash:
- md5: 66f03896ffbe1a110ffda05c7a856504
- sha256: fc3b210f9584a92793c07396cb93e72265ff3f1fa7ca629128bf0a50d5cb15e4
+ md5: 0ea6510969e1296cc19966fad481f6de
+ sha256: b224e16b88d76ea95e4af56e2bc638c603bd26a770b98d117d04541d3aafa002
category: main
optional: false
- name: libtiff
- version: 4.6.0
+ version: 4.7.0
manager: conda
platform: win-64
dependencies:
lerc: '>=4.0.0,<5.0a0'
- libdeflate: '>=1.20,<1.21.0a0'
+ libdeflate: '>=1.23,<1.24.0a0'
libjpeg-turbo: '>=3.0.0,<4.0a0'
- libzlib: '>=1.2.13,<2.0.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'
- 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-hddb2be6_3.conda
+ zstd: '>=1.5.6,<1.6.0a0'
+ url: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.0-h797046b_3.conda
hash:
- md5: 6d1828c9039929e2f185c5fa9d133018
- sha256: 2e04844865cfe0286d70482c129f159542b325f4e45774aaff5fbe5027b30b0a
+ md5: defed79ff7a9164ad40320e3f116a138
+ sha256: c363a8baba4ce12b8f01f0ab74fe8b0dc83facd89c6604f4a191084923682768
category: main
optional: false
- name: libuuid
@@ -3267,44 +3835,46 @@ package:
category: main
optional: false
- name: libwebp-base
- version: 1.4.0
+ version: 1.5.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
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.5.0-h851e524_0.conda
hash:
- md5: b26e8aa824079e1be0294e7152ca4559
- sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f
+ md5: 63f790534398730f59e1b899c3644d4a
+ sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf
category: main
optional: false
- name: libwebp-base
- version: 1.4.0
+ 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.4.0-hcfcfb64_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.5.0-h3b0e114_0.conda
hash:
- md5: abd61d0ab127ec5cd68f62c2969e6f34
- sha256: d0ca51cb1de9192be9a3238e71fbcca5a535619c499c4f4c9b2ed41c14d36770
+ md5: 33f7313967072c6e6d8f865f5493c7ae
+ sha256: 1d75274614e83a5750b8b94f7bad2fc0564c2312ff407e697d99152ed095576f
category: main
optional: false
- name: libxcb
- version: '1.16'
+ version: 1.17.0
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
pthread-stubs: ''
xorg-libxau: '>=1.0.11,<2.0a0'
xorg-libxdmcp: ''
- url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hd590300_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda
hash:
- md5: 151cba22b85a989c2d6ef9633ffee1e4
- sha256: 7180375f37fd264bb50672a63da94536d4abd81ccec059e932728ae056324b3a
+ md5: 92ed62436b625154323d40d5f2f11dd7
+ sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa
category: main
optional: false
- name: libxcb
@@ -3317,10 +3887,10 @@ package:
pthread-stubs: ''
xorg-libxau: '>=1.0.11,<2.0a0'
xorg-libxdmcp: ''
- url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-hcd874cb_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda
hash:
- md5: 7c1217d3b075f195ab17370f2d550f5d
- sha256: 3b1f3b04baa370cfb1c350cfa829e6236519df5f03e3f57ea2cb2eb044eb8616
+ md5: f0b599acdc82d5bc7e3b105833e7c5c8
+ sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e
category: main
optional: false
- name: libxcrypt
@@ -3336,24 +3906,23 @@ package:
category: main
optional: false
- name: libxml2
- version: 2.12.7
+ version: 2.13.5
manager: conda
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
- icu: '>=75.1,<76.0a0'
- libgcc-ng: '>=12'
+ libgcc: '>=13'
libiconv: '>=1.17,<2.0a0'
+ liblzma: '>=5.6.3,<6.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-he7c6b58_4.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda
hash:
- md5: 08a9265c637230c37cb1be4a6cad4536
- sha256: 10e9e0ac52b9a516a17edbc07f8d559e23778e54f1a7721b2e0e8219284fed3b
+ md5: f5b05674697ae7d2c5932766695945e1
+ sha256: 306e18aa647d8208ad2cd0e62d84933222b2fbe93d2d53cd5283d2256b1d54de
category: main
optional: false
- name: libxml2
- version: 2.12.7
+ version: 2.13.5
manager: conda
platform: win-64
dependencies:
@@ -3362,10 +3931,10 @@ package:
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.7-h0f24e4e_4.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.13.5-he286e8c_1.conda
hash:
- md5: ed4d301f0d2149b34deb9c4fecafd836
- sha256: ae78197961b09b0eef4ee194a44e4adc4555c0f2f20c348086b0cd8aaf2f7731
+ md5: 77eaa84f90fc90643c5a0be0aa9bdd1b
+ sha256: 084dd4dde342f13c43ee418d153ac5b2610f95be029073a15fa9dda22b130d06
category: main
optional: false
- name: libzlib
@@ -3373,11 +3942,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda
+ __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: 57d7dc60e9325e3de37ff8dffd18e814
- sha256: adf6096f98b537a11ae3729eaa642b0811478f0ea0402ca67b5108fe2cb0010d
+ md5: edb0dca6bc32e4f4789199455a1dbeb8
+ sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4
category: main
optional: false
- name: libzlib
@@ -3388,10 +3958,10 @@ package:
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_1.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda
hash:
- md5: d4483ca8afc57ddf1f6dded53b36c17f
- sha256: b13846a54a15243e15f96fec06b526d8155adc6a1ac2b6ed47a88f6a71a94b68
+ md5: 41fbfac52c601159df6c01f875de31b9
+ sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402
category: main
optional: false
- name: linkify-it-py
@@ -3399,12 +3969,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9'
uc-micro-py: ''
- url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda
hash:
- md5: f1b64ca4faf563605cf6f6ca93f9ff3f
- sha256: aa99d44e8c83865026575a8af253141c53e0b3ab05f053befaa7757c8525064f
+ md5: b02fe519b5dc0dc55e7299810fcdfb8e
+ sha256: d975a2015803d4fdaaae3f53e21f64996577d7a069eb61c6d2792504f16eb57b
category: dev
optional: true
- name: linkify-it-py
@@ -3412,25 +3982,24 @@ package:
manager: conda
platform: win-64
dependencies:
+ python: '>=3.9'
uc-micro-py: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_1.conda
hash:
- md5: f1b64ca4faf563605cf6f6ca93f9ff3f
- sha256: aa99d44e8c83865026575a8af253141c53e0b3ab05f053befaa7757c8525064f
+ md5: b02fe519b5dc0dc55e7299810fcdfb8e
+ sha256: d975a2015803d4fdaaae3f53e21f64996577d7a069eb61c6d2792504f16eb57b
category: dev
optional: true
- name: llvm-openmp
- version: 18.1.8
+ version: 19.1.6
manager: conda
platform: linux-64
dependencies:
- libzlib: '>=1.3.1,<2.0a0'
- zstd: '>=1.5.6,<1.6.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-18.1.8-hf5423f3_0.conda
+ __glibc: '>=2.17,<3.0.a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-19.1.6-h024ca30_0.conda
hash:
- md5: 322be9d39e030673e105b0abb320514e
- sha256: b620c51d91e55958c91014d89793cd705b1044b5ab157deae9bf8bdb2f11c5a3
+ md5: 96e42ccbd3c067c1713ff5f2d2169247
+ sha256: 9e385c2a8169d951cf153221fb7fbb3dc8f1e5ac77371edee7329f8721dbe1ae
category: main
optional: false
- name: llvmlite
@@ -3438,16 +4007,17 @@ package:
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
libllvm14: '>=14.0.6,<14.1.0a0'
- libstdcxx-ng: '>=12'
+ 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.43.0-py310h4c7c693_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py310h1a6248f_1.conda
hash:
- md5: f1d507e72dfd110f0953f92683de5822
- sha256: 2acd87b1a332bd5ca5a729639688425980dae3586d5da0803c3a4f19c09e994c
+ md5: 8153f0ba820cca5bae3101d1bc178d95
+ sha256: 071ce1a0fed522a19990b1cb49cba01d5b03f0e851a1ea0c364622267e32bca1
category: main
optional: false
- name: llvmlite
@@ -3462,10 +4032,10 @@ package:
vc: '>=14.2,<15'
vc14_runtime: '>=14.29.30139'
vs2015_runtime: ''
- url: https://conda.anaconda.org/conda-forge/win-64/llvmlite-0.43.0-py310h0288bfe_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/llvmlite-0.43.0-py310h0288bfe_1.conda
hash:
- md5: 722927d5664ec4a7f7089a6e7fa165f7
- sha256: e1bec0ef2aa9ceb6e38c45b1cfe4e32d4632c117af153cd353dee4901ab76765
+ md5: f8adf34c61cc1e8f532f7d7f5c04c34f
+ sha256: 3eed3f0b475d698ff947b8d97b4d8e73fd047ee80b416f5c6c052d74afd25971
category: main
optional: false
- name: locket
@@ -3578,9 +4148,9 @@ package:
manager: conda
platform: win-64
dependencies:
+ mdurl: '>=0.1,<1'
python: '>=3.7'
typing_extensions: '>=3.7.4'
- mdurl: '>=0.1,<1'
url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-2.2.0-pyhd8ed1ab_0.conda
hash:
md5: b2928a6c6d52d7e3562b4a59c3214e3a
@@ -3588,21 +4158,22 @@ package:
category: dev
optional: true
- name: markupsafe
- version: 2.1.5
+ version: 3.0.2
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __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-2.1.5-py310h2372a71_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py310h89163eb_1.conda
hash:
- md5: f6703fa0214a00bf49d1bef6dc7672d0
- sha256: 3c18347adf1d091ee9248612308a6bef79038f80b626ef67f58cd0e8d25c65b8
+ md5: 8ce3f0332fd6de0d737e2911d329523f
+ sha256: 0bed20ec27dcbcaf04f02b2345358e1161fb338f8423a4ada1cf0f4d46918741
category: main
optional: false
- name: markupsafe
- version: 2.1.5
+ version: 3.0.2
manager: conda
platform: win-64
dependencies:
@@ -3611,14 +4182,14 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.2-py310h38315fa_1.conda
hash:
- md5: eceba0306d8619bd34a650e673d3e6c3
- sha256: 2fe1bc52085b4b4f63e073803f8cce3da95b6eaaa182abee11c0a34b484f99dc
+ md5: 79dfc050ae5a7dd4e63e392c984e2576
+ sha256: deb8505b7ef76d363174d133e2ff814ae75b91ac4c3ae5550a7686897392f4d0
category: main
optional: false
- name: matplotlib-base
- version: 3.7.3
+ version: 3.8.4
manager: conda
platform: linux-64
dependencies:
@@ -3627,25 +4198,25 @@ package:
cycler: '>=0.10'
fonttools: '>=4.22.0'
freetype: '>=2.12.1,<3.0a0'
- kiwisolver: '>=1.0.1'
+ kiwisolver: '>=1.3.1'
libgcc-ng: '>=12'
libstdcxx-ng: '>=12'
- numpy: '>=1.22.4,<2.0a0'
+ numpy: '>=1.21'
packaging: '>=20.0'
- pillow: '>=6.2.0'
+ pillow: '>=8'
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
+ tk: '>=8.6.13,<8.7.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.4-py310hef631a5_2.conda
hash:
- md5: 15a0409bc579d80e67715f1ce5d864a2
- sha256: 5e60c8ab40fa69f9bb665d8dee53650fc5554edb1193cb5313589c788b7f1af2
+ md5: b3fa3fc2a0fa8b53b913c94297b12e27
+ sha256: 5733c68ff72a04a42d8363965155d4b27a1ed3364a507b8cac582c0b4881d222
category: main
optional: false
- name: matplotlib-base
- version: 3.7.3
+ version: 3.8.4
manager: conda
platform: win-64
dependencies:
@@ -3654,10 +4225,10 @@ package:
cycler: '>=0.10'
fonttools: '>=4.22.0'
freetype: '>=2.12.1,<3.0a0'
- kiwisolver: '>=1.0.1'
- numpy: '>=1.22.4,<2.0a0'
+ kiwisolver: '>=1.3.1'
+ numpy: '>=1.21'
packaging: '>=20.0'
- pillow: '>=6.2.0'
+ pillow: '>=8'
pyparsing: '>=2.3.1'
python: '>=3.10,<3.11.0a0'
python-dateutil: '>=2.7'
@@ -3665,10 +4236,10 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.8.4-py310hadb10a8_2.conda
hash:
- md5: b8452c3adde5873f2d430381d515529b
- sha256: b33df121d3c06700ab6046108aedbeda5e6b97f402903979df684f714c866db1
+ md5: 8f5e26aa64ab245691efb7f87c584060
+ sha256: bc3ecb8e9f68fd1b4214e223f08e94d8f88e6fdc237dc0e86efcb9f090737e96
category: main
optional: false
- name: matplotlib-inline
@@ -3676,12 +4247,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
traitlets: ''
- url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda
hash:
- md5: 779345c95648be40d22aaa89de7d4254
- sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab
+ md5: af6ab708897df59bd6e7283ceab1b56b
+ sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6
category: dev
optional: true
- name: matplotlib-inline
@@ -3689,12 +4260,12 @@ package:
manager: conda
platform: win-64
dependencies:
+ python: '>=3.9'
traitlets: ''
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_1.conda
hash:
- md5: 779345c95648be40d22aaa89de7d4254
- sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab
+ md5: af6ab708897df59bd6e7283ceab1b56b
+ sha256: 69b7dc7131703d3d60da9b0faa6dd8acbf6f6c396224cf6aef3e855b8c0c41c6
category: dev
optional: true
- name: mccabe
@@ -3702,11 +4273,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda
hash:
- md5: 34fc335fc50eef0b5ea708f2b5f54e0c
- sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b
+ md5: 827064ddfe0de2917fb29f1da4f8f533
+ sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1
category: dev
optional: true
- name: mccabe
@@ -3714,37 +4285,37 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda
hash:
- md5: 34fc335fc50eef0b5ea708f2b5f54e0c
- sha256: 0466ad9490b761e9a8c57fab574fc099136b45fa19a0746ce33acdeb2a84766b
+ md5: 827064ddfe0de2917fb29f1da4f8f533
+ sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1
category: dev
optional: true
- name: mdit-py-plugins
- version: 0.4.1
+ version: 0.4.2
manager: conda
platform: linux-64
dependencies:
markdown-it-py: '>=1.0.0,<4.0.0'
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda
hash:
- md5: eb90dd178bcdd0260dfaa6e1cbccf042
- sha256: 3525b8e4598ccaab913a2bcb8a63998c6e5cc1870d0c5a5b4e867aa69c720aa1
+ md5: af2060041d4f3250a7eb6ab3ec0e549b
+ sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449
category: dev
optional: true
- name: mdit-py-plugins
- version: 0.4.1
+ version: 0.4.2
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
markdown-it-py: '>=1.0.0,<4.0.0'
- url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_1.conda
hash:
- md5: eb90dd178bcdd0260dfaa6e1cbccf042
- sha256: 3525b8e4598ccaab913a2bcb8a63998c6e5cc1870d0c5a5b4e867aa69c720aa1
+ md5: af2060041d4f3250a7eb6ab3ec0e549b
+ sha256: c63ed79d9745109c0a70397713b0c07f06e7d3561abcb122cfc80a141ab3b449
category: dev
optional: true
- name: mdurl
@@ -3752,11 +4323,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
hash:
- md5: 776a8dd9e824f77abac30e6ef43a8f7a
- sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1
+ md5: 592132998493b3ff25fd7479396e8351
+ sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7
category: dev
optional: true
- name: mdurl
@@ -3764,81 +4335,84 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda
hash:
- md5: 776a8dd9e824f77abac30e6ef43a8f7a
- sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1
+ md5: 592132998493b3ff25fd7479396e8351
+ sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7
category: dev
optional: true
- name: mistune
- version: 3.0.2
+ version: 3.1.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ typing_extensions: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda
hash:
- md5: 5cbee699846772cc939bef23a0d524ed
- sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c
+ md5: d10024c163a52eeecbb166fdeaef8b12
+ sha256: d932404dc610464130db5f36f59cd29947a687d9708daaad369d0020707de41a
category: dev
optional: true
- name: mistune
- version: 3.0.2
+ version: 3.1.0
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ typing_extensions: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda
hash:
- md5: 5cbee699846772cc939bef23a0d524ed
- sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c
+ md5: d10024c163a52eeecbb166fdeaef8b12
+ sha256: d932404dc610464130db5f36f59cd29947a687d9708daaad369d0020707de41a
category: dev
optional: true
- name: mkl
- version: 2022.1.0
+ version: 2023.2.0
manager: conda
platform: linux-64
dependencies:
_openmp_mutex: '>=4.5'
- llvm-openmp: '>=14.0.3'
+ llvm-openmp: '>=17.0.3'
tbb: 2021.*
- url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.1.0-h84fe81f_915.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda
hash:
- md5: b9c8f925797a93dbff45e1626b025a6b
- sha256: 767318c4f2057822a7ebc238d6065ce12c6ae60df4ab892758adb79b1057ce02
+ md5: 81d4a1a57d618adf0152db973d93b2ad
+ sha256: 046073737bf73153b0c39e343b197cdf0b7867d336962369407465a17ea5979a
category: main
optional: false
- name: mkl
- version: 2022.1.0
+ version: 2023.2.0
manager: conda
platform: win-64
dependencies:
- intel-openmp: ''
+ intel-openmp: 2023.*
tbb: 2021.*
- url: https://conda.anaconda.org/conda-forge/win-64/mkl-2022.1.0-h6a75c08_874.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/win-64/mkl-2023.2.0-h6a75c08_50497.conda
hash:
- md5: 2ff89a7337a9636029b4db9466e9f8e3
- sha256: b130d13dba6a798cbcce8f19c52e9765b75b8668d2f8f95ba8210c63b6fa84eb
+ md5: 064cea9f45531e7b53584acf4bd8b044
+ sha256: 46ec9e767279da219398b6e79c8fa95822b2ed3c8e02ab604615b7d1213a5d5a
category: main
optional: false
- name: msgpack-python
- version: 1.0.8
+ version: 1.1.0
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
+ __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.0.8-py310h25c7140_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py310h3788b33_0.conda
hash:
- md5: ad681a3290620ca6196bcd46ed3101cd
- sha256: d7de996a5188f89b149fcfad848968c279c05f291801a28b10ae758e7355cc44
+ md5: 6b586fb03d84e5bfbb1a8a3d9e2c9b60
+ sha256: 73ca5f0c7d0727a57dcc3c402823ce3aa159ca075210be83078fcc485971e259
category: main
optional: false
- name: msgpack-python
- version: 1.0.8
+ version: 1.1.0
manager: conda
platform: win-64
dependencies:
@@ -3847,10 +4421,10 @@ package:
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.8-py310hc19bc0b_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.1.0-py310hc19bc0b_0.conda
hash:
- md5: f1188194dd35d19b490d8d13f6380f19
- sha256: f880861554e8dc98dec30ae039bcd8d491ce1b411a01e5b1e50270840eb57a8d
+ md5: 2cfcbd596afd76879de4824c2c24f4a2
+ sha256: db5c3d5e2d28ba0e4e1633f6d52079f0e397bdb60a6f58a2fa942e88071182d2
category: main
optional: false
- name: msys2-conda-epoch
@@ -3889,205 +4463,225 @@ package:
category: main
optional: false
- name: myst-nb
- version: 0.17.2
+ version: 1.1.2
manager: conda
platform: linux-64
dependencies:
importlib-metadata: ''
ipykernel: ''
ipython: ''
- jupyter-cache: '>=0.5.0,<0.7.0'
- myst-parser: '>=0.18.0,<0.19.0'
+ jupyter-cache: '>=0.5'
+ myst-parser: '>=1.0.0'
nbclient: ''
- nbformat: '>=5.0,<6'
- python: '>=3.7'
+ nbformat: '>=5.0'
+ python: '>=3.9'
pyyaml: ''
- sphinx: '>=4,<6'
+ sphinx: '>=5'
typing_extensions: ''
- url: https://conda.anaconda.org/conda-forge/noarch/myst-nb-0.17.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.1.2-pyhd8ed1ab_1.conda
hash:
- md5: 40190b7d06f86b63d28fa78aaa39c023
- sha256: 37bcf6de8618a0668ef6b364b14e0eceea87b202a3882c59dcd85bc1172a5402
+ md5: b78625bb0b4b144fe7048523a178986d
+ sha256: 0bc2fdde44340d93834983106fdacad5683c441ae5faa5450444e4ff8560f13b
category: dev
optional: true
- name: myst-nb
- version: 0.17.2
+ version: 1.1.2
manager: conda
platform: win-64
dependencies:
- pyyaml: ''
- typing_extensions: ''
- ipython: ''
importlib-metadata: ''
ipykernel: ''
+ ipython: ''
+ jupyter-cache: '>=0.5'
+ myst-parser: '>=1.0.0'
nbclient: ''
- python: '>=3.7'
- nbformat: '>=5.0,<6'
- sphinx: '>=4,<6'
- myst-parser: '>=0.18.0,<0.19.0'
- jupyter-cache: '>=0.5.0,<0.7.0'
- url: https://conda.anaconda.org/conda-forge/noarch/myst-nb-0.17.2-pyhd8ed1ab_0.conda
+ nbformat: '>=5.0'
+ python: '>=3.9'
+ pyyaml: ''
+ sphinx: '>=5'
+ typing_extensions: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.1.2-pyhd8ed1ab_1.conda
hash:
- md5: 40190b7d06f86b63d28fa78aaa39c023
- sha256: 37bcf6de8618a0668ef6b364b14e0eceea87b202a3882c59dcd85bc1172a5402
+ md5: b78625bb0b4b144fe7048523a178986d
+ sha256: 0bc2fdde44340d93834983106fdacad5683c441ae5faa5450444e4ff8560f13b
category: dev
optional: true
- name: myst-parser
- version: 0.18.1
+ 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.1,<1'
+ mdit-py-plugins: '>=0.3.4,<1'
python: '>=3.7'
pyyaml: ''
- sphinx: '>=4,<6'
+ sphinx: '>=5,<7'
typing-extensions: ''
- url: https://conda.anaconda.org/conda-forge/noarch/myst-parser-0.18.1-pyhd8ed1ab_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/myst-parser-1.0.0-pyhd8ed1ab_0.conda
hash:
- md5: bcfdf5c7d8bf5c6f6be7b4c66fff2eca
- sha256: 260812a430adee3598103d75704c1c855a9816a3895971ca0190d0f5e1e8165a
+ md5: e559708feb0aed1ae24c518e569ea3eb
+ sha256: 87de591aa423932ffec61e06283bf5c3ba5c0a3cc465955984ce58f1de3ded8e
category: dev
optional: true
- name: myst-parser
- version: 0.18.1
+ version: 1.0.0
manager: conda
platform: win-64
dependencies:
- pyyaml: ''
- typing-extensions: ''
+ docutils: '>=0.15,<0.20'
jinja2: ''
- python: '>=3.7'
markdown-it-py: '>=1.0.0,<3.0.0'
- sphinx: '>=4,<6'
- docutils: '>=0.15,<0.20'
- mdit-py-plugins: '>=0.3.1,<1'
- url: https://conda.anaconda.org/conda-forge/noarch/myst-parser-0.18.1-pyhd8ed1ab_0.tar.bz2
+ 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: bcfdf5c7d8bf5c6f6be7b4c66fff2eca
- sha256: 260812a430adee3598103d75704c1c855a9816a3895971ca0190d0f5e1e8165a
+ md5: e559708feb0aed1ae24c518e569ea3eb
+ sha256: 87de591aa423932ffec61e06283bf5c3ba5c0a3cc465955984ce58f1de3ded8e
category: dev
optional: true
-- name: nbclassic
- version: 1.1.0
+- name: nbclient
+ version: 0.10.2
manager: conda
platform: linux-64
dependencies:
- ipykernel: ''
- ipython_genutils: ''
- nest-asyncio: '>=1.5'
- notebook-shim: '>=0.2.3'
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.1.0-pyhd8ed1ab_0.conda
+ 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: 6275b55edf34cfa1f01ba40b699dd915
- sha256: da3330a8ffff1f5b15b558543fbec69e05a48750ed50b53369b93da788abedc5
+ md5: 6bb0d77277061742744176ab555b723c
+ sha256: a20cff739d66c2f89f413e4ba4c6f6b59c50d5c30b5f0d840c13e8c9c2df9135
category: dev
optional: true
-- name: nbclassic
- version: 1.1.0
+- name: nbclient
+ version: 0.10.2
manager: conda
platform: win-64
dependencies:
- ipykernel: ''
- ipython_genutils: ''
- python: '>=3.7'
- nest-asyncio: '>=1.5'
- notebook-shim: '>=0.2.3'
- url: https://conda.anaconda.org/conda-forge/noarch/nbclassic-1.1.0-pyhd8ed1ab_0.conda
+ 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: 6275b55edf34cfa1f01ba40b699dd915
- sha256: da3330a8ffff1f5b15b558543fbec69e05a48750ed50b53369b93da788abedc5
+ md5: 6bb0d77277061742744176ab555b723c
+ sha256: a20cff739d66c2f89f413e4ba4c6f6b59c50d5c30b5f0d840c13e8c9c2df9135
category: dev
optional: true
-- name: nbclient
- version: 0.7.4
+- name: nbconvert
+ version: 7.16.5
manager: conda
platform: linux-64
dependencies:
- jupyter_client: '>=6.1.12'
- jupyter_core: '>=4.12,!=5.0.*'
- nbformat: '>=5.1'
- python: '>=3.7'
- traitlets: '>=5.3'
- url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda
+ nbconvert-core: 7.16.5
+ nbconvert-pandoc: 7.16.5
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.5-hd8ed1ab_1.conda
hash:
- md5: f7aa15f77d29b11caa1df1eb15383c59
- sha256: f26afcbbdd4bd1245db514c6ebc6ef18cc12067145dcab229b6f88653575d44c
+ md5: 82ffc2974cd09b45182f018b5af731c8
+ sha256: 02780c17ea89ff96c229b908201a656affa70c475ebf40a140b7551d016cba31
category: dev
optional: true
-- name: nbclient
- version: 0.7.4
+- name: nbconvert
+ version: 7.16.5
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- jupyter_client: '>=6.1.12'
- jupyter_core: '>=4.12,!=5.0.*'
- nbformat: '>=5.1'
- traitlets: '>=5.3'
- url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda
+ nbconvert-core: 7.16.5
+ nbconvert-pandoc: 7.16.5
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.5-hd8ed1ab_1.conda
hash:
- md5: f7aa15f77d29b11caa1df1eb15383c59
- sha256: f26afcbbdd4bd1245db514c6ebc6ef18cc12067145dcab229b6f88653575d44c
+ md5: 82ffc2974cd09b45182f018b5af731c8
+ sha256: 02780c17ea89ff96c229b908201a656affa70c475ebf40a140b7551d016cba31
category: dev
optional: true
- name: nbconvert-core
- version: 7.16.4
+ version: 7.16.5
manager: conda
platform: linux-64
dependencies:
beautifulsoup4: ''
- bleach: ''
+ bleach-with-css: '!=5.0.0'
defusedxml: ''
entrypoints: '>=0.2.2'
+ 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.1'
+ nbformat: '>=5.7'
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.4-pyhd8ed1ab_1.conda
+ python: '>=3.9'
+ traitlets: '>=5.1'
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.5-pyhd8ed1ab_1.conda
hash:
- md5: e2d2abb421c13456a9a9f80272fdf543
- sha256: 074d858c5808e0a832acc0da37cd70de1565e8d6e17a62d5a11b3902b5e78319
+ md5: dd50a122c5b9782b1e9b2695473bfd95
+ sha256: 9eed80365c012ab3bbb0f0ed1446af496d6810063dfa07dde33ae4a6d8a392ef
category: dev
optional: true
- name: nbconvert-core
- version: 7.16.4
+ version: 7.16.5
manager: conda
platform: win-64
dependencies:
- packaging: ''
beautifulsoup4: ''
+ bleach-with-css: '!=5.0.0'
defusedxml: ''
- bleach: ''
- tinycss2: ''
- jupyterlab_pygments: ''
- python: '>=3.8'
- jinja2: '>=3.0'
entrypoints: '>=0.2.2'
- markupsafe: '>=2.0'
+ importlib-metadata: '>=3.6'
+ jinja2: '>=3.0'
jupyter_core: '>=4.7'
- traitlets: '>=5.0'
+ jupyterlab_pygments: ''
+ markupsafe: '>=2.0'
+ mistune: '>=2.0.3,<4'
+ nbclient: '>=0.5.0'
+ nbformat: '>=5.7'
+ packaging: ''
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.4-pyhd8ed1ab_1.conda
+ python: '>=3.9'
+ traitlets: '>=5.1'
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.5-pyhd8ed1ab_1.conda
+ hash:
+ md5: dd50a122c5b9782b1e9b2695473bfd95
+ sha256: 9eed80365c012ab3bbb0f0ed1446af496d6810063dfa07dde33ae4a6d8a392ef
+ category: dev
+ optional: true
+- name: nbconvert-pandoc
+ version: 7.16.5
+ manager: conda
+ platform: linux-64
+ dependencies:
+ nbconvert-core: 7.16.5
+ pandoc: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.5-hd8ed1ab_1.conda
+ hash:
+ md5: 593a8fd80968f14f8a7b3a685ddc455e
+ sha256: ddef467e066125a86bbb748d5cd6a54f7c0b7021461406d1bf7e48823f2eab9d
+ category: dev
+ optional: true
+- name: nbconvert-pandoc
+ version: 7.16.5
+ manager: conda
+ platform: win-64
+ dependencies:
+ nbconvert-core: 7.16.5
+ pandoc: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.5-hd8ed1ab_1.conda
hash:
- md5: e2d2abb421c13456a9a9f80272fdf543
- sha256: 074d858c5808e0a832acc0da37cd70de1565e8d6e17a62d5a11b3902b5e78319
+ md5: 593a8fd80968f14f8a7b3a685ddc455e
+ sha256: ddef467e066125a86bbb748d5cd6a54f7c0b7021461406d1bf7e48823f2eab9d
category: dev
optional: true
- name: nbformat
@@ -4097,13 +4691,13 @@ package:
dependencies:
jsonschema: '>=2.6'
jupyter_core: '>=4.12,!=5.0.*'
- python: '>=3.8'
+ python: '>=3.9'
python-fastjsonschema: '>=2.15'
traitlets: '>=5.1'
- url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda
hash:
- md5: 0b57b5368ab7fc7cdc9e3511fa867214
- sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c
+ md5: bbe1963f1e47f594070ffe87cdf612ea
+ sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838
category: dev
optional: true
- name: nbformat
@@ -4111,15 +4705,15 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- jupyter_core: '>=4.12,!=5.0.*'
- traitlets: '>=5.1'
jsonschema: '>=2.6'
+ jupyter_core: '>=4.12,!=5.0.*'
+ python: '>=3.9'
python-fastjsonschema: '>=2.15'
- url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda
+ traitlets: '>=5.1'
+ url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda
hash:
- md5: 0b57b5368ab7fc7cdc9e3511fa867214
- sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c
+ md5: bbe1963f1e47f594070ffe87cdf612ea
+ sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838
category: dev
optional: true
- name: ncurses
@@ -4127,11 +4721,12 @@ package:
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
hash:
- md5: fcea371545eda051b6deafb24889fc69
- sha256: 4fc3b384f4072b68853a0013ea83bdfd3d66b0126e2238e1d6e1560747aa7586
+ md5: 70caf8bb6cf39a0b6b7efc885f51c0fe
+ sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a
category: main
optional: false
- name: nest-asyncio
@@ -4139,11 +4734,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda
hash:
- md5: 6598c056f64dc8800d40add25e4e2c34
- sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a
+ md5: 598fd7d4d0de2455fb74f56063969a97
+ sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0
category: dev
optional: true
- name: nest-asyncio
@@ -4151,67 +4746,47 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda
hash:
- md5: 6598c056f64dc8800d40add25e4e2c34
- sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a
+ md5: 598fd7d4d0de2455fb74f56063969a97
+ sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0
category: dev
optional: true
- name: notebook
- version: 6.5.7
+ version: 7.3.2
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'
- 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.7-pyha770c72_0.conda
+ 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: f81a6fe643390df9347984644727d796
- sha256: e37db45223e432bcad809897177e05fff31828dfcfc3ef18f046ae44ec01286c
+ md5: 48b0461a947a0537427fc836b9bd2d33
+ sha256: 07138543549d6672376115a000c5fd26c3711f0b2b5c9464889bccfe711d8e59
category: dev
optional: true
- name: notebook
- version: 6.5.7
+ version: 7.3.2
manager: conda
platform: win-64
dependencies:
- jinja2: ''
- nbformat: ''
- prometheus_client: ''
- ipykernel: ''
- argon2-cffi: ''
- ipython_genutils: ''
- python: '>=3.7'
- tornado: '>=6.1'
- pyzmq: '>=17'
- terminado: '>=0.8.3'
- jupyter_core: '>=4.6.1'
- nest-asyncio: '>=1.5'
- traitlets: '>=4.2.1'
- send2trash: '>=1.8.0'
- nbconvert-core: '>=5'
- nbclassic: '>=0.4.7'
- jupyter_client: '>=5.3.4,<8'
- url: https://conda.anaconda.org/conda-forge/noarch/notebook-6.5.7-pyha770c72_0.conda
+ 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: f81a6fe643390df9347984644727d796
- sha256: e37db45223e432bcad809897177e05fff31828dfcfc3ef18f046ae44ec01286c
+ md5: 48b0461a947a0537427fc836b9bd2d33
+ sha256: 07138543549d6672376115a000c5fd26c3711f0b2b5c9464889bccfe711d8e59
category: dev
optional: true
- name: notebook-shim
@@ -4220,11 +4795,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda
hash:
- md5: 3d85618e2c97ab896b5b5e298d32b5b3
- sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230
+ md5: e7f89ea5f7ea9401642758ff50a2d9c1
+ sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056
category: dev
optional: true
- name: notebook-shim
@@ -4232,12 +4807,12 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_1.conda
hash:
- md5: 3d85618e2c97ab896b5b5e298d32b5b3
- sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230
+ md5: e7f89ea5f7ea9401642758ff50a2d9c1
+ sha256: 7b920e46b9f7a2d2aa6434222e5c8d739021dbc5cc75f32d124a8191d86f9056
category: dev
optional: true
- name: numba
@@ -4277,24 +4852,25 @@ package:
category: main
optional: false
- name: numcodecs
- version: 0.12.1
+ version: 0.13.1
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
+ __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.12.1-py310h76e45a6_1.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.13.1-py310h5eaa309_0.conda
hash:
- md5: 98a05a56ef78fecda552f2880f615835
- sha256: 4b7f8fb9038c6794c5b3c4b52d899bca1fec6cf3c807760c433ff6c2a235e0c6
+ md5: a3e9933fc59e8bcd2aa20753fb56db42
+ sha256: 70cb0fa431ba9e75ef36d94f35324089dfa7da8f967e9c758f60e08aaf29b732
category: main
optional: false
- name: numcodecs
- version: 0.12.1
+ version: 0.13.1
manager: conda
platform: win-64
dependencies:
@@ -4305,14 +4881,14 @@ package:
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-py310h9e98ed7_1.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/numcodecs-0.13.1-py310hb4db72f_0.conda
hash:
- md5: 17be4b18220461bf999a7e96aa52eaf0
- sha256: 6061105610b33a111a5f87addd0c2419b24292813738434afc946fd0c0890452
+ md5: 0d316ad384c5c153a67a416f1a8abf97
+ sha256: 4aa5d7fc0ea81120f2fab5ef6ff3e0c8ea3458a2c8a21935b99dff70b73a349c
category: main
optional: false
- name: numpy
- version: 1.23.5
+ version: 1.26.4
manager: conda
platform: linux-64
dependencies:
@@ -4323,14 +4899,14 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda
hash:
- md5: 3b114b1559def8bad228fec544ac1812
- sha256: c3b2dc03dbae88ae1337e37e672aa44008898395d3508839bf35323b54e71665
+ md5: 6593de64c935768b6bad3e19b3e978be
+ sha256: 028fe2ea8e915a0a032b75165f11747770326f3d767e642880540c60a3256425
category: main
optional: false
- name: numpy
- version: 1.23.5
+ version: 1.26.4
manager: conda
platform: win-64
dependencies:
@@ -4341,62 +4917,63 @@ package:
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
+ vc14_runtime: '>=14.29.30139'
+ url: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda
hash:
- md5: f734ade6fd852582e5c1a09152dd3a60
- sha256: 92900cc7e9561ea177878f838a6a8a105b750d5971affedc648090ef22b4db23
+ md5: 93e881c391880df90e74e43a4b67c16d
+ sha256: 20ca447a8f840c01961f2bdf0847fc7b7785a62968e867d7aa4ca8a66d70f9ad
category: main
optional: false
- name: openjpeg
- version: 2.5.2
+ version: 2.5.3
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,<2.0.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libpng: '>=1.6.44,<1.7.0a0'
+ libstdcxx: '>=13'
+ libtiff: '>=4.7.0,<4.8.0a0'
+ libzlib: '>=1.3.1,<2.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda
hash:
- md5: 7f2e286780f072ed750df46dc2631138
- sha256: 5600a0b82df042bd27d01e4e687187411561dfc11cc05143a08ce29b64bf2af2
+ md5: 9e5816bc95d285c115a3ebc2f8563564
+ sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39
category: main
optional: false
- name: openjpeg
- version: 2.5.2
+ version: 2.5.3
manager: conda
platform: win-64
dependencies:
- libpng: '>=1.6.43,<1.7.0a0'
- libtiff: '>=4.6.0,<4.7.0a0'
- libzlib: '>=1.2.13,<2.0.0a0'
+ libpng: '>=1.6.44,<1.7.0a0'
+ libtiff: '>=4.7.0,<4.8.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/openjpeg-2.5.2-h3d672ee_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.3-h4d64b90_0.conda
hash:
- md5: 7e7099ad94ac3b599808950cec30ad4e
- sha256: dda71cbe094234ab208f3552dec1f4ca6f2e614175d010808d6cb66ecf0bc753
+ md5: fc050366dd0b8313eb797ed1ffef3a29
+ sha256: 410175815df192f57a07c29a6b3fdd4231937173face9e63f0830c1234272ce3
category: main
optional: false
- name: openssl
- version: 3.3.1
+ version: 3.4.0
manager: conda
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
ca-certificates: ''
- libgcc-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.4.0-h7b32b05_1.conda
hash:
- md5: e1b454497f9f7c1147fdde4b53f1b512
- sha256: b294b3cc706ad1048cdb514f0db3da9f37ae3fcc0c53a7104083dd0918adb200
+ md5: 4ce6875f75469b2757a65e10a5d05e31
+ sha256: f62f6bca4a33ca5109b6d571b052a394d836956d21b25b7ffd03376abf7a481f
category: main
optional: false
- name: openssl
- version: 3.3.1
+ version: 3.4.0
manager: conda
platform: win-64
dependencies:
@@ -4404,75 +4981,124 @@ package:
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.3.1-h2466b09_2.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.4.0-ha4e3fda_1.conda
hash:
- md5: 375dbc2a4d5a2e4c738703207e8e368b
- sha256: d86c4fa31294ad9068717788197e97e5637e056c82745ffb6d0e88fd1fef1a9d
+ md5: fb45308ba8bfe1abf1f4a27bad24a743
+ sha256: 519a06eaab7c878fbebb8cab98ea4a4465eafb1e9ed8c6ce67226068a80a92f0
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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: packaging
- version: '24.1'
+ version: '24.2'
manager: conda
platform: linux-64
dependencies:
python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda
hash:
- md5: cbe1bb1f21567018ce595d9c2be0f0db
- sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81
+ md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa
+ sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1
category: main
optional: false
- name: packaging
- version: '24.1'
+ version: '24.2'
manager: conda
platform: win-64
dependencies:
python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda
hash:
- md5: cbe1bb1f21567018ce595d9c2be0f0db
- sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81
+ md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa
+ sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1
category: main
optional: false
- name: pandas
- version: 2.2.2
+ version: 2.2.3
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libstdcxx-ng: '>=12'
- numpy: '>=1.19,<3'
+ __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'
- url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.2-py310hf9f9076_1.conda
+ pytz: '>=2020.1,<2024.2'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda
hash:
- md5: 18100768350158f1795ab9ad7d06d5ca
- sha256: 7f7ed5de8066c1b275942ac183472acc9501c91cc4c25ab3197020a87f5a3495
+ md5: e67778e1cac3bca3b3300f6164f7ffb9
+ sha256: d772223fd1ca882717ec6db55a13a6be9439c64ca3532231855ce7834599b8a5
category: main
optional: false
- name: pandas
- version: 2.2.2
+ version: 2.2.3
manager: conda
platform: win-64
dependencies:
- numpy: '>=1.19,<3'
+ 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'
+ 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.2-py310hb4db72f_1.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda
hash:
- md5: b1fa9819662ccab5d381a9efac90f58b
- sha256: 3377ce9a559547f1434f430f7d17f9ff0d44c8cdd70d413b647e867ee520189f
+ md5: 565b3f19282642a23e5ff9bbfb01569c
+ sha256: 1fa40b4a351f1eb7a878d1f25f6bec71664699cd4a39c8ed5e2221f53ecca0c4
category: main
optional: false
+- name: pandoc
+ version: 3.6.1
+ manager: conda
+ platform: linux-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.1-ha770c72_0.conda
+ hash:
+ md5: e94dd7479ba12963364d855fb23cce4f
+ sha256: 08092ddd880a58c75feaf37a374826d004c9dacd2cc73bbb623ad4e0bb321b82
+ category: dev
+ optional: true
+- name: pandoc
+ version: 3.6.1
+ manager: conda
+ platform: win-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.6.1-h57928b3_0.conda
+ hash:
+ md5: 5d2bd384ec8ed9f60454e1260eb08220
+ sha256: 5015bea3441ae0e919960633f55fb5f7dee757a6f893f2be2065001e8e8b18c0
+ category: dev
+ optional: true
- name: pandocfilters
version: 1.5.0
manager: conda
@@ -4502,11 +5128,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda
hash:
- md5: 81534b420deb77da8833f2289b8d47ac
- sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae
+ md5: 5c092057b6badd30f75b06244ecd01c9
+ sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc
category: dev
optional: true
- name: parso
@@ -4514,11 +5140,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_1.conda
hash:
- md5: 81534b420deb77da8833f2289b8d47ac
- sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae
+ md5: 5c092057b6badd30f75b06244ecd01c9
+ sha256: 17131120c10401a99205fc6fe436e7903c0fa092f1b3e80452927ab377239bcc
category: dev
optional: true
- name: partd
@@ -4540,9 +5166,9 @@ package:
manager: conda
platform: win-64
dependencies:
- toolz: ''
locket: ''
python: '>=3.9'
+ toolz: ''
url: https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda
hash:
md5: 0badf9c54e24cecfb0ad2f99d680c163
@@ -4555,11 +5181,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda
hash:
- md5: 629f3203c99b32e0988910c93e77f3b6
- sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e
+ md5: d0d408b1f18883a944376da5cf8101ea
+ sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a
category: dev
optional: true
- name: pickleshare
@@ -4567,11 +5193,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3'
- url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda
hash:
- md5: 415f0ebb6198cc2801c73438a9fb5761
- sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738
+ md5: 11a9d1d09a3615fc07c3faf79bc0b943
+ sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b
category: dev
optional: true
- name: pickleshare
@@ -4579,11 +5205,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3'
- url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-pyhd8ed1ab_1004.conda
hash:
- md5: 415f0ebb6198cc2801c73438a9fb5761
- sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738
+ md5: 11a9d1d09a3615fc07c3faf79bc0b943
+ sha256: e2ac3d66c367dada209fc6da43e645672364b9fd5f9d28b9f016e24b81af475b
category: dev
optional: true
- name: pillow
@@ -4595,9 +5221,9 @@ package:
lcms2: '>=2.16,<3.0a0'
libgcc-ng: '>=12'
libjpeg-turbo: '>=3.0.0,<4.0a0'
- libtiff: '>=4.6.0,<4.7.0a0'
+ libtiff: '>=4.6.0,<4.8.0a0'
libwebp-base: '>=1.4.0,<2.0a0'
- libxcb: '>=1.16,<1.17.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'
@@ -4617,9 +5243,9 @@ package:
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'
+ libtiff: '>=4.6.0,<4.8.0a0'
libwebp-base: '>=1.4.0,<2.0a0'
- libxcb: '>=1.16,<1.17.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'
@@ -4635,31 +5261,31 @@ package:
category: main
optional: false
- name: pip
- version: '24.0'
+ version: 24.3.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9,<3.13.0a0'
setuptools: ''
wheel: ''
- url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_2.conda
hash:
- md5: f586ac1e56c8638b64f9c8122a7b8a67
- sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a
+ md5: 04e691b9fadd93a8a9fad87a81d4fd8f
+ sha256: da8c8888de10c1e4234ebcaa1550ac2b4b5408ac20f093fe641e4bc8c9c9f3eb
category: main
optional: false
- name: pip
- version: '24.0'
+ version: 24.3.1
manager: conda
platform: win-64
dependencies:
+ python: '>=3.9,<3.13.0a0'
setuptools: ''
wheel: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_2.conda
hash:
- md5: f586ac1e56c8638b64f9c8122a7b8a67
- sha256: b7c1c5d8f13e8cb491c4bd1d0d1896a4cf80fc47de01059ad77509112b664a4a
+ md5: 04e691b9fadd93a8a9fad87a81d4fd8f
+ sha256: da8c8888de10c1e4234ebcaa1550ac2b4b5408ac20f093fe641e4bc8c9c9f3eb
category: main
optional: false
- name: pkgutil-resolve-name
@@ -4667,11 +5293,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda
hash:
- md5: 405678b942f2481cecdb3e010f4925d9
- sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a
+ md5: 5a5870a74432aa332f7d32180633ad05
+ sha256: adb2dde5b4f7da70ae81309cce6188ed3286ff280355cf1931b45d91164d2ad8
category: dev
optional: true
- name: pkgutil-resolve-name
@@ -4679,47 +5305,47 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_2.conda
hash:
- md5: 405678b942f2481cecdb3e010f4925d9
- sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a
+ md5: 5a5870a74432aa332f7d32180633ad05
+ sha256: adb2dde5b4f7da70ae81309cce6188ed3286ff280355cf1931b45d91164d2ad8
category: dev
optional: true
- name: platformdirs
- version: 4.2.2
+ version: 4.3.6
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda
hash:
- md5: 6f6cf28bf8e021933869bae3f84b8fc9
- sha256: adc59384cf0b2fc6dc7362840151e8cb076349197a38f7230278252698a88442
- category: main
- optional: false
+ md5: 577852c7e53901ddccc7e6a9959ddebe
+ sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27
+ category: dev
+ optional: true
- name: platformdirs
- version: 4.2.2
+ version: 4.3.6
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.2.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_1.conda
hash:
- md5: 6f6cf28bf8e021933869bae3f84b8fc9
- sha256: adc59384cf0b2fc6dc7362840151e8cb076349197a38f7230278252698a88442
- category: main
- optional: false
+ md5: 577852c7e53901ddccc7e6a9959ddebe
+ sha256: bb50f6499e8bc1d1a26f17716c97984671121608dc0c3ecd34858112bce59a27
+ category: dev
+ optional: true
- name: pluggy
version: 1.5.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda
hash:
- md5: d3483c8fc2dc2cc3f5cf43e26d60cabf
- sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26
+ md5: e9dcbce5f45f9ee500e728ae58b605b6
+ sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819
category: dev
optional: true
- name: pluggy
@@ -4727,109 +5353,80 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda
hash:
- md5: d3483c8fc2dc2cc3f5cf43e26d60cabf
- sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26
+ md5: e9dcbce5f45f9ee500e728ae58b605b6
+ sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819
category: dev
optional: true
-- name: pooch
- version: 1.8.2
- 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.2-pyhd8ed1ab_0.conda
- hash:
- md5: 8dab97d8a9616e07d779782995710aed
- sha256: f2ee98740ac62ff46700c3cae8a18c78bdb3d6dd80832c6e691e789b844830d8
- category: main
- optional: false
-- name: pooch
- version: 1.8.2
- 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.2-pyhd8ed1ab_0.conda
- hash:
- md5: 8dab97d8a9616e07d779782995710aed
- sha256: f2ee98740ac62ff46700c3cae8a18c78bdb3d6dd80832c6e691e789b844830d8
- category: main
- optional: false
- name: prometheus_client
- version: 0.20.0
+ version: 0.21.1
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda
hash:
- md5: 9a19b94034dd3abb2b348c8b93388035
- sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9
+ md5: 3e01e386307acc60b2f89af0b2e161aa
+ sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab
category: dev
optional: true
- name: prometheus_client
- version: 0.20.0
+ version: 0.21.1
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.1-pyhd8ed1ab_0.conda
hash:
- md5: 9a19b94034dd3abb2b348c8b93388035
- sha256: 757cd91d01c2e0b64fadf6bc9a11f558cf7638d897dfbaf7415ddf324d5405c9
+ md5: 3e01e386307acc60b2f89af0b2e161aa
+ sha256: bc8f00d5155deb7b47702cb8370f233935704100dbc23e30747c161d1b6cf3ab
category: dev
optional: true
- name: prompt-toolkit
- version: 3.0.47
+ version: 3.0.48
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9'
wcwidth: ''
- url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda
hash:
- md5: 1247c861065d227781231950e14fe817
- sha256: d93ac5853e398aaa10f0dd7addd64b411f94ace1f9104d619cd250e19a5ac5b4
+ md5: 368d4aa48358439e07a97ae237491785
+ sha256: 79fb7d1eeb490d4cc1b79f781bb59fe302ae38cf0a30907ecde75a7d399796cc
category: dev
optional: true
- name: prompt-toolkit
- version: 3.0.47
+ version: 3.0.48
manager: conda
platform: win-64
dependencies:
+ python: '>=3.9'
wcwidth: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda
hash:
- md5: 1247c861065d227781231950e14fe817
- sha256: d93ac5853e398aaa10f0dd7addd64b411f94ace1f9104d619cd250e19a5ac5b4
+ md5: 368d4aa48358439e07a97ae237491785
+ sha256: 79fb7d1eeb490d4cc1b79f781bb59fe302ae38cf0a30907ecde75a7d399796cc
category: dev
optional: true
- name: psutil
- version: 6.0.0
+ version: 6.1.1
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __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.0.0-py310hc51659f_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.1-py310ha75aee5_0.conda
hash:
- md5: b04405826f96f4eb2f502e642d121bb5
- sha256: d23e0a2bf49a752fcc8267484c5eff3e5b267703853c11cc7b4f762412d0f7ef
+ md5: 00838ea1d4e87b1e6e2552bba98cc899
+ sha256: a643a57e5338fb3a154c5d57fdc72d80170cf7868f20acbbeedde014195f0d92
category: main
optional: false
- name: psutil
- version: 6.0.0
+ version: 6.1.1
manager: conda
platform: win-64
dependencies:
@@ -4838,10 +5435,10 @@ package:
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.0.0-py310ha8f682b_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/psutil-6.1.1-py310ha8f682b_0.conda
hash:
- md5: 32f5673b7aa2309dda74ccd01822caca
- sha256: 9801a18aa6fadd3a6286fd89e83fe6affbcb3ca275bb2a00ab0da299d32e92ad
+ md5: e7da623f94edbf9c66f816bee03432a2
+ sha256: 88ed52584b3d838ec10c10ad445823bb9b52a0002071e79c9bb63433ff934026
category: main
optional: false
- name: pthread-stubs
@@ -4849,11 +5446,12 @@ package:
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
+ __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: 22dad4df6e8630e8dff2428f6f6a7036
- sha256: 67c84822f87b641d89df09758da498b2d4558d47b920fd1d3fe6d3a871e000ff
+ md5: b3c17d95b5a10c6e64a21fa17573e70e
+ sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973
category: main
optional: false
- name: pthread-stubs
@@ -4873,11 +5471,13 @@ package:
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
+ ucrt: '>=10.0.20348.0'
+ vc: '>=14.2,<15'
+ vc14_runtime: '>=14.29.30139'
+ url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
hash:
- md5: e2da8758d7d51ff6aa78a14dfb9dbed4
- sha256: 576a228630a72f25d255a5e345e5f10878e153221a96560f2498040cd6f54005
+ md5: cf98a67a1ec8040b42455002a24f0b0b
+ sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45
category: main
optional: false
- name: ptyprocess
@@ -4885,11 +5485,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: ''
- url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda
hash:
- md5: 359eeb6536da0e687af562ed265ec263
- sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a
+ md5: 7d9daffbb8d8e0af0f769dbbcd173a54
+ sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83
category: dev
optional: true
- name: pure_eval
@@ -4897,11 +5497,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.5'
- url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
hash:
- md5: 0f051f09d992e0d08941706ad519ee0e
- sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8
+ md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04
+ sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0
category: dev
optional: true
- name: pure_eval
@@ -4909,11 +5509,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.5'
- url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda
hash:
- md5: 0f051f09d992e0d08941706ad519ee0e
- sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8
+ md5: 3bfdfb8dbcdc4af1ae3f9a8eb3948f04
+ sha256: 71bd24600d14bb171a6321d523486f6a06f855e75e547fa0cb2a0953b02047f0
category: dev
optional: true
- name: pybtex
@@ -4922,14 +5522,14 @@ package:
platform: linux-64
dependencies:
latexcodec: '>=1.0.4'
- python: '>=3.6'
+ python: '>=3.9'
pyyaml: '>=3.01'
setuptools: ''
six: ''
- url: https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_2.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_3.conda
hash:
- md5: 2099b86a7399c44c0c61cdb6de6915ba
- sha256: 258fbf46050bbd51fbaa504116e56e8f3064156f0e08cad4e2fec97f5f29e6dc
+ md5: 556a52a96313364aa79990ed1337b9a5
+ sha256: c87615fcc7327c5dcc247f309731c98f7b9867a48e6265e9584af6dc8cd82345
category: dev
optional: true
- name: pybtex
@@ -4937,15 +5537,15 @@ package:
manager: conda
platform: win-64
dependencies:
- setuptools: ''
- six: ''
- python: '>=3.6'
latexcodec: '>=1.0.4'
+ python: '>=3.9'
pyyaml: '>=3.01'
- url: https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_2.tar.bz2
+ setuptools: ''
+ six: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_3.conda
hash:
- md5: 2099b86a7399c44c0c61cdb6de6915ba
- sha256: 258fbf46050bbd51fbaa504116e56e8f3064156f0e08cad4e2fec97f5f29e6dc
+ md5: 556a52a96313364aa79990ed1337b9a5
+ sha256: c87615fcc7327c5dcc247f309731c98f7b9867a48e6265e9584af6dc8cd82345
category: dev
optional: true
- name: pybtex-docutils
@@ -4958,10 +5558,10 @@ package:
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_1.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/pybtex-docutils-1.0.3-py310hff52083_2.conda
hash:
- md5: 034283fbf3c33795e7fa63b25ddbe70c
- sha256: c7317b100c3721fbd1876125707053d955c027605a83a0b0b9d5f57737aa18ff
+ md5: e9a2e0883b856ff34cea07ff02f702d3
+ sha256: c19926680a369df0a45f61bb1762e3e722afc9e28b7f50a4dc053435a322dbdc
category: dev
optional: true
- name: pybtex-docutils
@@ -4974,10 +5574,10 @@ package:
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_1.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/pybtex-docutils-1.0.3-py310h5588dad_2.conda
hash:
- md5: a285c3e15bcb7b4b6824377f6b1db8f8
- sha256: 8aa1def3e646f90d2e45ad98298885473646578ce114e6096fd6e2b90f723ea7
+ md5: 0caf4a3d5cf845e8d693e7f9bc8a7182
+ sha256: 1a6a996ff1bfb607f88d71dbbee0df3cfe71ca135f7d42583f0e548b5e55d9d2
category: dev
optional: true
- name: pycparser
@@ -4985,11 +5585,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+ python: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
hash:
- md5: 844d9eb3b43095b031874477f7d70088
- sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64
+ md5: 12c566707c80111f9799308d9e265aef
+ sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6
category: main
optional: false
- name: pycparser
@@ -4997,60 +5597,63 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda
+ python: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda
hash:
- md5: 844d9eb3b43095b031874477f7d70088
- sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64
+ md5: 12c566707c80111f9799308d9e265aef
+ sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6
category: main
optional: false
- name: pydantic
- version: 2.5.3
+ version: 2.10.5
manager: conda
platform: linux-64
dependencies:
- annotated-types: '>=0.4.0'
- pydantic-core: 2.14.6
- python: '>=3.7,<3.12.4.0a0'
+ annotated-types: '>=0.6.0'
+ pydantic-core: 2.27.2
+ python: '>=3.9'
typing-extensions: '>=4.6.1'
- url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.5.3-pyhd8ed1ab_0.conda
+ typing_extensions: '>=4.12.2'
+ url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.5-pyh3cfb1c2_0.conda
hash:
- md5: 3569001fd8b37e542aaefdf5de124e19
- sha256: 07ec778cbf17737b740f0547fb5cba91a7bff52945fe637287458e4119c58ffe
+ md5: e8ea30925c8271c4128375810d7d3d7a
+ sha256: 0f32c30ddc610cd1113335d8b4f311f20f4d72754b7c1a5d0d9493f597cf11d2
category: main
optional: false
- name: pydantic
- version: 2.5.3
+ version: 2.10.5
manager: conda
platform: win-64
dependencies:
+ annotated-types: '>=0.6.0'
+ pydantic-core: 2.27.2
+ python: '>=3.9'
typing-extensions: '>=4.6.1'
- annotated-types: '>=0.4.0'
- python: '>=3.7,<3.12.4.0a0'
- pydantic-core: 2.14.6
- url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.5.3-pyhd8ed1ab_0.conda
+ typing_extensions: '>=4.12.2'
+ url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.5-pyh3cfb1c2_0.conda
hash:
- md5: 3569001fd8b37e542aaefdf5de124e19
- sha256: 07ec778cbf17737b740f0547fb5cba91a7bff52945fe637287458e4119c58ffe
+ md5: e8ea30925c8271c4128375810d7d3d7a
+ sha256: 0f32c30ddc610cd1113335d8b4f311f20f4d72754b7c1a5d0d9493f597cf11d2
category: main
optional: false
- name: pydantic-core
- version: 2.14.6
+ version: 2.27.2
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __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.14.6-py310hcb5633a_1.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.27.2-py310h505e2c1_0.conda
hash:
- md5: f0f6b7e4b3d134f070288963ed4fbeee
- sha256: 3bdc1ef89f9e431392aec8ed5695d8aefc7b65a014cc46934f75e87779f89745
+ md5: 3f804346d970a0343c46afc21cf5f16e
+ sha256: 6c58cdbb007f2dc8b0a8d96eacaba45bedf6ddfe9ed4558c40f899cb3438f3cb
category: main
optional: false
- name: pydantic-core
- version: 2.14.6
+ version: 2.27.2
manager: conda
platform: win-64
dependencies:
@@ -5060,10 +5663,10 @@ package:
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.14.6-py310h87d50f1_1.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/pydantic-core-2.27.2-py310hc226416_0.conda
hash:
- md5: e1055e9fe6ac345e7b8d85acda87dacc
- sha256: 88dbd555fbf8fdc1dbf54c000e82061527d8bd7905ae85e5f9c034450d8b1d3c
+ md5: 3df8c74e13bd1b7ec1292b5c6b744509
+ sha256: 9c5e8eb73caa4c8f1945ac22af392495221f1809055114c4cc23609a8622a1eb
category: main
optional: false
- name: pydata-sphinx-theme
@@ -5091,15 +5694,15 @@ package:
manager: conda
platform: win-64
dependencies:
- packaging: ''
- typing_extensions: ''
- beautifulsoup4: ''
- babel: ''
accessible-pygments: ''
- python: '>=3.9'
+ babel: ''
+ beautifulsoup4: ''
+ docutils: '!=0.17.0'
+ packaging: ''
pygments: '>=2.7'
+ python: '>=3.9'
sphinx: '>=5.0'
- docutils: '!=0.17.0'
+ typing_extensions: ''
url: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda
hash:
md5: c7c50dd5192caa58a05e6a4248a27acb
@@ -5107,105 +5710,106 @@ package:
category: dev
optional: true
- name: pydiso
- version: 0.0.3
+ version: 0.1.2
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- mkl: '>=2022.1.0,<2023.0a0'
- numpy: '>=1.21.6,<2.0a0'
+ __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.0.3-py310h1dd1467_4.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/linux-64/pydiso-0.1.2-py310h7b68af5_0.conda
hash:
- md5: 35402d207b798650a58e15f2a12335ef
- sha256: 1a81cfce8a9bd81e6b6ed099ef1939ee53fd119dfe11c4169ad2422e245967aa
+ md5: d70757c06c05a699982906150738d0fa
+ sha256: 620757472baf508531f142611d409ebd0d21cb3cacf8fa2488a33dc8fe1292b7
category: main
optional: false
- name: pydiso
- version: 0.0.3
+ version: 0.1.2
manager: conda
platform: win-64
dependencies:
- mkl: '>=2022.1.0,<2023.0a0'
- numpy: '>=1.21.6,<2.0a0'
+ 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'
- vs2015_runtime: '>=14.29.30139'
- url: https://conda.anaconda.org/conda-forge/win-64/pydiso-0.0.3-py310h847dae0_4.tar.bz2
+ vc14_runtime: '>=14.29.30139'
+ url: https://conda.anaconda.org/conda-forge/win-64/pydiso-0.1.2-py310h5da8fee_0.conda
hash:
- md5: be5580cf9f16fe52820c00c8edc39e15
- sha256: a2d0ef0294fff49ee8e927ecb56562c0ae71f2217cdf8bbe4d574dded0f989d7
+ md5: aeb651d2c58b022f815fd488c9ae0e2d
+ sha256: 4398403f1dfde0db3a4c42d88f6f61f1ba7070766aa0eec4231af761fd68f91f
category: main
optional: false
- name: pygments
- version: 2.18.0
+ version: 2.19.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda
hash:
- md5: b7f5c092b8f9800150d998a71b76d5a1
- sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b
+ md5: 232fb4577b6687b2d503ef8e254270c9
+ sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b
category: dev
optional: true
- name: pygments
- version: 2.18.0
+ version: 2.19.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.1-pyhd8ed1ab_0.conda
hash:
- md5: b7f5c092b8f9800150d998a71b76d5a1
- sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b
+ md5: 232fb4577b6687b2d503ef8e254270c9
+ sha256: 28a3e3161390a9d23bc02b4419448f8d27679d9e2c250e29849e37749c8de86b
category: dev
optional: true
- name: pylint
- version: 3.2.6
+ version: 3.3.3
manager: conda
platform: linux-64
dependencies:
- astroid: '>=3.2.4,<3.3.0-dev0'
+ astroid: '>=3.3.8,<3.4.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'
+ 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.2.6-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.3.3-pyhd8ed1ab_0.conda
hash:
- md5: 3bd59de4ef6ca2d96cfd5b36b33f9de9
- sha256: 8802f83f8940005c11eb47ecc906c7ebd7076f252f3490fab0ca1ea78c4049ee
+ md5: 5842a1fa3b9b4f9fe7069b9ca5ed068d
+ sha256: a8192c823bfb6cdc57d2e12a8748ac1acb588c960c53e71c763f6359c5602e46
category: dev
optional: true
- name: pylint
- version: 3.2.6
+ version: 3.3.3
manager: conda
platform: win-64
dependencies:
- python: '>=3.8.0'
- tomli: '>=1.1.0'
- typing_extensions: '>=3.10.0'
- platformdirs: '>=2.2.0'
- tomlkit: '>=0.10.1'
+ astroid: '>=3.3.8,<3.4.0-dev0'
colorama: '>=0.4.5'
- mccabe: '>=0.6,<0.8'
dill: '>=0.3.7'
isort: '>=4.2.5,<6,!=5.13.0'
- astroid: '>=3.2.4,<3.3.0-dev0'
- url: https://conda.anaconda.org/conda-forge/noarch/pylint-3.2.6-pyhd8ed1ab_0.conda
+ 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.3-pyhd8ed1ab_0.conda
hash:
- md5: 3bd59de4ef6ca2d96cfd5b36b33f9de9
- sha256: 8802f83f8940005c11eb47ecc906c7ebd7076f252f3490fab0ca1ea78c4049ee
+ md5: 5842a1fa3b9b4f9fe7069b9ca5ed068d
+ sha256: a8192c823bfb6cdc57d2e12a8748ac1acb588c960c53e71c763f6359c5602e46
category: dev
optional: true
- name: pymatsolver
@@ -5253,8 +5857,8 @@ package:
manager: conda
platform: win-64
dependencies:
- python: ''
numpy: ''
+ python: ''
scipy: ''
url: https://conda.anaconda.org/conda-forge/noarch/pymatsolver-base-0.2.0-pyh44b312d_3.conda
hash:
@@ -5263,27 +5867,27 @@ package:
category: main
optional: false
- name: pyparsing
- version: 3.1.2
+ version: 3.2.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.1-pyhd8ed1ab_0.conda
hash:
- md5: b9a4dacf97241704529131a0dfc0494f
- sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b
+ md5: 285e237b8f351e85e7574a2c7bfa6d46
+ sha256: f513fed4001fd228d3bf386269237b4ca6bff732c99ffc11fcbad8529b35407c
category: main
optional: false
- name: pyparsing
- version: 3.1.2
+ version: 3.2.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.1-pyhd8ed1ab_0.conda
hash:
- md5: b9a4dacf97241704529131a0dfc0494f
- sha256: 06c77cb03e5dde2d939b216c99dd2db52ea93a4c7c599f3882f136005c359c7b
+ md5: 285e237b8f351e85e7574a2c7bfa6d46
+ sha256: f513fed4001fd228d3bf386269237b4ca6bff732c99ffc11fcbad8529b35407c
category: main
optional: false
- name: pysocks
@@ -5292,11 +5896,11 @@ package:
platform: linux-64
dependencies:
__unix: ''
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda
hash:
- md5: 2a7de29fb590ca14b5243c4c812c8025
- sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b
+ md5: 461219d1a5bd61342293efa2c0c90eac
+ sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8
category: main
optional: false
- name: pysocks
@@ -5305,16 +5909,16 @@ package:
platform: win-64
dependencies:
__win: ''
+ python: '>=3.9'
win_inet_pton: ''
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda
hash:
- md5: 56cd9fe388baac0e90c7149cfac95b60
- sha256: b3a612bc887f3dd0fb7c4199ad8e342bd148cf69a9b74fd9468a18cf2bef07b7
+ md5: e2fd202833c4a981ce8a65974fe4abd1
+ sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca
category: main
optional: false
- name: pytest
- version: 8.3.2
+ version: 8.3.4
manager: conda
platform: linux-64
dependencies:
@@ -5323,159 +5927,185 @@ package:
iniconfig: ''
packaging: ''
pluggy: <2,>=1.5
- python: '>=3.8'
+ python: '>=3.9'
tomli: '>=1'
- url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda
hash:
- md5: e010a224b90f1f623a917c35addbb924
- sha256: 72c84a3cd9fe82835a88e975fd2a0dbf2071d1c423ea4f79e7930578c1014873
+ md5: 799ed216dc6af62520f32aa39bc1c2bb
+ sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3
category: dev
optional: true
- name: pytest
- version: 8.3.2
+ version: 8.3.4
manager: conda
platform: win-64
dependencies:
- packaging: ''
colorama: ''
- iniconfig: ''
- python: '>=3.8'
exceptiongroup: '>=1.0.0rc8'
- tomli: '>=1'
+ iniconfig: ''
+ packaging: ''
pluggy: <2,>=1.5
- url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ tomli: '>=1'
+ url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda
hash:
- md5: e010a224b90f1f623a917c35addbb924
- sha256: 72c84a3cd9fe82835a88e975fd2a0dbf2071d1c423ea4f79e7930578c1014873
+ md5: 799ed216dc6af62520f32aa39bc1c2bb
+ sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3
category: dev
optional: true
- name: pytest-cov
- version: 5.0.0
+ version: 6.0.0
manager: conda
platform: linux-64
dependencies:
- coverage: '>=5.2.1'
+ coverage: '>=7.5'
pytest: '>=4.6'
- python: '>=3.8'
+ python: '>=3.9'
toml: ''
- url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda
hash:
- md5: c54c0107057d67ddf077751339ec2c63
- sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c
+ md5: 79963c319d1be62c8fd3e34555816e01
+ sha256: 09acac1974e10a639415be4be326dd21fa6d66ca51a01fb71532263fba6dccf6
category: dev
optional: true
- name: pytest-cov
- version: 5.0.0
+ version: 6.0.0
manager: conda
platform: win-64
dependencies:
- toml: ''
- python: '>=3.8'
+ coverage: '>=7.5'
pytest: '>=4.6'
- coverage: '>=5.2.1'
- url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-5.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ toml: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.0.0-pyhd8ed1ab_1.conda
hash:
- md5: c54c0107057d67ddf077751339ec2c63
- sha256: 218306243faf3c36347131c2b36bb189daa948ac2e92c7ab52bb26cc8c157b3c
+ md5: 79963c319d1be62c8fd3e34555816e01
+ sha256: 09acac1974e10a639415be4be326dd21fa6d66ca51a01fb71532263fba6dccf6
category: dev
optional: true
- name: python
- version: 3.10.14
+ 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-ng: '>=12'
+ libgcc: '>=13'
+ liblzma: '>=5.6.3,<6.0a0'
libnsl: '>=2.0.1,<2.1.0a0'
- libsqlite: '>=3.45.2,<4.0a0'
+ libsqlite: '>=3.47.0,<4.0a0'
libuuid: '>=2.38.1,<3.0a0'
libxcrypt: '>=4.4.36'
- libzlib: '>=1.2.13,<2.0.0a0'
- ncurses: '>=6.4.20240210,<7.0a0'
- openssl: '>=3.2.1,<4.0a0'
+ 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: ''
- xz: '>=5.2.6,<6.0a0'
- pip: ''
- url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.14-hd12c33a_0_cpython.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.16-he725a3c_1_cpython.conda
hash:
- md5: 2b4ba962994e8bd4be9ff5b64b75aff2
- sha256: 76a5d12e73542678b70a94570f7b0f7763f9a938f77f0e75d9ea615ef22aa84c
+ md5: b887811a901b3aa622a92caf03bc8917
+ sha256: 3f90a2d5062a73cd2dd8a0027718aee1db93f7975b9cfe529e2c9aeec2db262e
category: main
optional: false
- name: python
- version: 3.10.14
+ version: 3.10.16
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,<2.0.0a0'
- openssl: '>=3.2.1,<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: ''
- 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
+ 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: 4a00e84f29d1eb418d84970598c444e1
- sha256: 332f97d9927b65857d6d2d4d50d66dce9b37da81edb67833ae6b88ad52acbd0c
+ md5: 5c292a7bd9c32a256ba7939b3e6dee03
+ sha256: 3392db6a7a90864d3fd1ce281859a49e27ee68121b63eece2ae6f1dbb2a8aaf1
category: main
optional: false
- name: python-dateutil
- version: 2.9.0
+ version: 2.9.0.post0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9'
six: '>=1.5'
- url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda
hash:
- md5: 2cf4264fffb9e6eff6031c5b6884d61c
- sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320
+ md5: 5ba79d7c71f03c678c8ead841f347d6e
+ sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79
category: main
optional: false
- name: python-dateutil
- version: 2.9.0
+ version: 2.9.0.post0
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
+ python: '>=3.9'
six: '>=1.5'
- url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhff2d567_1.conda
hash:
- md5: 2cf4264fffb9e6eff6031c5b6884d61c
- sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320
+ md5: 5ba79d7c71f03c678c8ead841f347d6e
+ sha256: a50052536f1ef8516ed11a844f9413661829aa083304dc624c5925298d078d79
category: main
optional: false
- name: python-fastjsonschema
- version: 2.20.0
+ version: 2.21.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.3'
- url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.1-pyhd8ed1ab_0.conda
hash:
- md5: b98d2018c01ce9980c03ee2850690fab
- sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60
+ md5: 38e34d2d1d9dca4fb2b9a0a04f604e2c
+ sha256: 1b09a28093071c1874862422696429d0d35bd0b8420698003ac004746c5e82a2
category: dev
optional: true
- name: python-fastjsonschema
- version: 2.20.0
+ version: 2.21.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.3'
- url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: b98d2018c01ce9980c03ee2850690fab
- sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60
+ md5: a61bf9ec79426938ff785eb69dbb1960
+ sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca
category: dev
optional: true
- name: python-tzdata
@@ -5507,10 +6137,10 @@ package:
manager: conda
platform: linux-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-5_cp310.conda
hash:
- md5: 26322ec5d7712c3ded99dd656142b8ce
- sha256: 456bec815bfc2b364763084d08b412fdc4c17eb9ccc66a36cb775fa7ac3cbaec
+ md5: 2921c34715e74b3587b4cff4d36844f9
+ sha256: 074d2f0b31f0333b7e553042b17ea54714b74263f8adda9a68a4bd8c7e219971
category: main
optional: false
- name: python_abi
@@ -5518,10 +6148,10 @@ package:
manager: conda
platform: win-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-4_cp310.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-5_cp310.conda
hash:
- md5: b41195997c14fb7473d26637ea4c3946
- sha256: 19066c462fd0e32c64503c688f77cb603beb4019b812caf855d03f2a5447960b
+ md5: 3c510f4c4383f5fbdb12fdd971b30d49
+ sha256: 0671bea4d5c5b8618ee7e2b1117d5a90901348ac459db57b654007f1644fa087
category: main
optional: false
- name: pytz
@@ -5549,7 +6179,7 @@ package:
category: main
optional: false
- name: pywin32
- version: '306'
+ version: '307'
manager: conda
platform: win-64
dependencies:
@@ -5558,14 +6188,14 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py310h9e98ed7_3.conda
hash:
- md5: a65056c5f52aa83455577958872e4776
- sha256: 24fd15c118974da18c38870380195e633d2452a7fb7dbc0ecb96b44416989b33
+ md5: 1fd1de4af8c39bb0efa5c9d5b092aa42
+ sha256: 712a131fadba8236830fc33d04154865a611e489f595b96370ade21cc2c1a5a2
category: dev
optional: true
- name: pywinpty
- version: 2.0.13
+ version: 2.0.14
manager: conda
platform: win-64
dependencies:
@@ -5575,29 +6205,30 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.14-py310h9e98ed7_0.conda
hash:
- md5: 8f81af709ee7a920f101037dd97bdea9
- sha256: be943bcecf57be5e6856390ef0b160988bca6c4f16742804f3ab9f9423a5e80f
+ md5: 9b36cc37a04410f4067b5e6dc35d5064
+ sha256: 8a7993fd661e0f5f544d152eae668706b2ae373a288dbd1243f5882bb044f6d7
category: dev
optional: true
- name: pyyaml
- version: 6.0.1
+ version: 6.0.2
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __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.1-py310h2372a71_1.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda
hash:
- md5: bb010e368de4940771368bc3dc4c63e7
- sha256: aa78ccddb0a75fa722f0f0eb3537c73ee1219c9dd46cea99d6b9eebfdd780f3d
+ md5: 0d4c5c76ae5f5aac6f0be419963a19dd
+ sha256: bf6002aef0fd9753fa6de54e82307b2d7e67a1d701dba018869471426078d5d1
category: main
optional: false
- name: pyyaml
- version: 6.0.1
+ version: 6.0.2
manager: conda
platform: win-64
dependencies:
@@ -5607,45 +6238,46 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda
hash:
- md5: ce279186f68d0f12812dc9955ea909a4
- sha256: ea51291e477b44c5bb9d91cc095db0dfe07b9576831e9682100d68c820c43ae3
+ md5: 308f62d05cbcbc633eeab4843def3b51
+ sha256: b30056440fdff1d52e96303f539ba3b4a33c19070993a75cc15c5414cb2a8b1d
category: main
optional: false
- name: pyzmq
- version: 26.0.3
+ version: 26.2.0
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
- libsodium: '>=1.0.18,<1.0.19.0a0'
- libstdcxx-ng: '>=12'
+ __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.0.3-py310h6883aea_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_3.conda
hash:
- md5: af2e86793164f8bd11e892142d0faa4c
- sha256: 64a1b5362c070ccae0687651dee40987540e43d4a968a41b3de85f7fd8ef340d
+ md5: 0c3fe057cc758c8fa1beba31ff4e5c35
+ sha256: d5bbafe00fbed64134f5c3cc38a2f16a9dc0f24c747f81f8341c53758d8b5d96
category: dev
optional: true
- name: pyzmq
- version: 26.0.3
+ version: 26.2.0
manager: conda
platform: win-64
dependencies:
- libsodium: '>=1.0.18,<1.0.19.0a0'
+ 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.0.3-py310h656833d_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/pyzmq-26.2.0-py310h656833d_3.conda
hash:
- md5: 8add222e6a146d96ac213db83d854f7d
- sha256: 2e582fd6637243d751bd1cbc76ccb4b82aeecaa5c10dc6d493de67cbfde5b64c
+ md5: 0006cd398c60696f009db3d60d27366a
+ sha256: 56d8c857a689d1133e08c1842edb7fea252b5918de685cf45a775cd8dc38f92b
category: dev
optional: true
- name: readline
@@ -5668,12 +6300,12 @@ package:
dependencies:
jinja2: '>=2.9'
packaging: ''
- python: '>=3.7'
+ python: '>=3.9'
requests: ''
- url: https://conda.anaconda.org/conda-forge/noarch/readthedocs-sphinx-ext-2.2.5-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/readthedocs-sphinx-ext-2.2.5-pyhd8ed1ab_1.conda
hash:
- md5: 4b639db3b362998c696f7abf4784ee80
- sha256: cf8660b64d62fb5a631bb9344fd4c2fbc6b2529799c8a38ecaf996b05652567d
+ md5: 42840a95562a02bef45e7b7fb24dcba4
+ sha256: e391356581919077b1639ebd13f4cbb0773acfd5710cfe4188921e8a0387dc6b
category: dev
optional: true
- name: readthedocs-sphinx-ext
@@ -5681,14 +6313,14 @@ package:
manager: conda
platform: win-64
dependencies:
- requests: ''
- packaging: ''
- python: '>=3.7'
jinja2: '>=2.9'
- url: https://conda.anaconda.org/conda-forge/noarch/readthedocs-sphinx-ext-2.2.5-pyhd8ed1ab_0.conda
+ packaging: ''
+ python: '>=3.9'
+ requests: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/readthedocs-sphinx-ext-2.2.5-pyhd8ed1ab_1.conda
hash:
- md5: 4b639db3b362998c696f7abf4784ee80
- sha256: cf8660b64d62fb5a631bb9344fd4c2fbc6b2529799c8a38ecaf996b05652567d
+ md5: 42840a95562a02bef45e7b7fb24dcba4
+ sha256: e391356581919077b1639ebd13f4cbb0773acfd5710cfe4188921e8a0387dc6b
category: dev
optional: true
- name: referencing
@@ -5697,12 +6329,12 @@ package:
platform: linux-64
dependencies:
attrs: '>=22.2.0'
- python: '>=3.8'
+ python: '>=3.9'
rpds-py: '>=0.7.0'
- url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda
hash:
- md5: 0fc8b52192a8898627c3efae1003e9f6
- sha256: be8d6d9e86b1a3fef5424127ff81782f8ca63d3058980859609f6f1ecdd34cb3
+ md5: 8c9083612c1bfe6878715ed5732605f8
+ sha256: f972eecb4dc8e06257af37642f92b0f2df04a7fe4c950f2e1045505e5e93985f
category: dev
optional: true
- name: referencing
@@ -5710,13 +6342,13 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
attrs: '>=22.2.0'
+ python: '>=3.9'
rpds-py: '>=0.7.0'
- url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda
hash:
- md5: 0fc8b52192a8898627c3efae1003e9f6
- sha256: be8d6d9e86b1a3fef5424127ff81782f8ca63d3058980859609f6f1ecdd34cb3
+ md5: 8c9083612c1bfe6878715ed5732605f8
+ sha256: f972eecb4dc8e06257af37642f92b0f2df04a7fe4c950f2e1045505e5e93985f
category: dev
optional: true
- name: requests
@@ -5727,47 +6359,97 @@ package:
certifi: '>=2017.4.17'
charset-normalizer: '>=2,<4'
idna: '>=2.5,<4'
- python: '>=3.8'
+ python: '>=3.9'
urllib3: '>=1.21.1,<3'
- url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda
hash:
- md5: 5ede4753180c7a550a443c430dc8ab52
- sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc
- category: main
- optional: false
+ md5: a9b9368f3701a417eac9edbcae7cb737
+ sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad
+ category: dev
+ optional: true
- name: requests
version: 2.32.3
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- idna: '>=2.5,<4'
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_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_1.conda
hash:
- md5: 5ede4753180c7a550a443c430dc8ab52
- sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc
- category: main
- optional: false
+ md5: a9b9368f3701a417eac9edbcae7cb737
+ sha256: d701ca1136197aa121bbbe0e8c18db6b5c94acbd041c2b43c70e5ae104e1d8ad
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: rpds-py
- version: 0.19.1
+ version: 0.22.3
manager: conda
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
- libgcc-ng: '>=12'
+ libgcc: '>=13'
python: '>=3.10,<3.11.0a0'
python_abi: 3.10.*
- url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.19.1-py310h42e942d_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.22.3-py310h505e2c1_0.conda
hash:
- md5: e475e081b969944abf635b7484b8661e
- sha256: bded054638611b028d354b581d70e4353be5f4bd43a331c2d9bb829f80a18f1b
+ md5: 3c12053527c50b3f825dd6dd0861832d
+ sha256: e13019600e75707126118cf3f02187e7dd96f475a82e8fa06e59091f76159274
category: dev
optional: true
- name: rpds-py
- version: 0.19.1
+ version: 0.22.3
manager: conda
platform: win-64
dependencies:
@@ -5776,10 +6458,10 @@ package:
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.19.1-py310hc226416_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.22.3-py310hc226416_0.conda
hash:
- md5: b28b00ebca0c20ce4cb5433b83c79a72
- sha256: ee9aa7b1cab4efe12f47f47f1042f0345f2fe44295f65d4cc0b8d642170d99f7
+ md5: 9830bfdf323849d4575a0036f184a3ad
+ sha256: 30ceeaf10fa48ac63ca5ef72e7ed611241c852f7f980fff1ac37571fde635b31
category: dev
optional: true
- name: scikit-learn
@@ -5823,72 +6505,45 @@ package:
category: main
optional: false
- name: scipy
- version: 1.10.1
+ 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-ng: '>=12'
- libgfortran-ng: ''
- libgfortran5: '>=12.2.0'
+ libgcc: '>=13'
+ libgfortran: ''
+ libgfortran5: '>=13.3.0'
liblapack: '>=3.9.0,<4.0a0'
- libstdcxx-ng: '>=12'
- numpy: '>=1.21.6,<2.0a0'
- pooch: ''
+ 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.10.1-py310ha4c1d20_3.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310hfcf56fc_2.conda
hash:
- md5: 0414d57832172f3cdcf56b5f053e177d
- sha256: c7beb091db82a1be2fa9dafb878695b1e8bd6d7efe7764afa457cabfea2a93d3
+ md5: b5d548b2a7cf8d0c74fc6c4bf42d1ca5
+ sha256: a15008a51fd6b6dcaeb5563869ff0a8a015f1e0a8634a9d89d2c189eefbd7182
category: main
optional: false
- name: scipy
- version: 1.10.1
+ 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'
- m2w64-gcc-libs: ''
- m2w64-gcc-libs-core: ''
- numpy: '>=1.21.6,<2.0a0'
- pooch: ''
+ 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.10.1-py310h578b7cb_3.conda
- hash:
- md5: d44c1bad75bb3e4d40066b3d3dd718ed
- sha256: 4a02b93fae869bc4e188aa808b1bed276dd7c06450b85bbb964d102ffc940184
- category: main
- optional: false
-- name: scooby
- version: 0.10.0
- manager: conda
- platform: linux-64
- dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/scooby-0.10.0-pyhd8ed1ab_0.conda
- hash:
- md5: 9e57330f431abbb4c88a5f898a4ba223
- sha256: e47c80ff6c06898e7f49fbea5b0fd3a97dda0c11348004ada2070071d03b34cf
- category: main
- optional: false
-- name: scooby
- version: 0.10.0
- manager: conda
- platform: win-64
- dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/scooby-0.10.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310hbd0dde3_2.conda
hash:
- md5: 9e57330f431abbb4c88a5f898a4ba223
- sha256: e47c80ff6c06898e7f49fbea5b0fd3a97dda0c11348004ada2070071d03b34cf
+ md5: 72a2a7c264a8b48d113111756c2bbbb4
+ sha256: 761829fa9c91fdffff0ba5a1f56f7d4cc00bec71ca7fa06859dc7f5a98117273
category: main
optional: false
- name: send2trash
@@ -5897,11 +6552,11 @@ package:
platform: linux-64
dependencies:
__linux: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_1.conda
hash:
- md5: 778594b20097b5a948c59e50ae42482a
- sha256: c4401b071e86ddfa0ea4f34b85308db2516b6aeca50053535996864cfdee7b3f
+ md5: 938c8de6b9de091997145b3bf25cdbf9
+ sha256: 00926652bbb8924e265caefdb1db100f86a479e8f1066efe395d5552dde54d02
category: dev
optional: true
- name: send2trash
@@ -5910,60 +6565,60 @@ package:
platform: win-64
dependencies:
__win: ''
+ python: '>=3.9'
pywin32: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_1.conda
hash:
- md5: 5a86a21050ca3831ec7f77fb302f1132
- sha256: d8aa230501a33250af2deee03006a2579f0335e7240a9c7286834788dcdcfaa8
+ md5: e6a4e906051565caf5fdae5b0415b654
+ sha256: ba8b93df52e0d625177907852340d735026c81118ac197f61f1f5baea19071ad
category: dev
optional: true
- name: setuptools
- version: 71.0.4
+ version: 75.8.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/setuptools-71.0.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda
hash:
- md5: ee78ac9c720d0d02fcfd420866b82ab1
- sha256: e1b5dd28d2ea2a7ad660fbc8d1f2ef682a2f8460f80240d836d62e56225ac680
+ md5: 8f28e299c11afdd79e0ec1e279dcdc52
+ sha256: e0778e4f276e9a81b51c56f51ec22a27b4d8fc955abc0be77ad09ca9bea06bb9
category: main
optional: false
- name: setuptools
- version: 71.0.4
+ version: 75.8.0
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/setuptools-71.0.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.8.0-pyhff2d567_0.conda
hash:
- md5: ee78ac9c720d0d02fcfd420866b82ab1
- sha256: e1b5dd28d2ea2a7ad660fbc8d1f2ef682a2f8460f80240d836d62e56225ac680
+ md5: 8f28e299c11afdd79e0ec1e279dcdc52
+ sha256: e0778e4f276e9a81b51c56f51ec22a27b4d8fc955abc0be77ad09ca9bea06bb9
category: main
optional: false
- name: six
- version: 1.16.0
+ version: 1.17.0
manager: conda
platform: linux-64
dependencies:
- python: ''
- url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda
hash:
- md5: e5f25f8dbc060e9a8d912e432202afc2
- sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6
+ md5: a451d576819089b0d672f18768be0f65
+ sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db
category: main
optional: false
- name: six
- version: 1.16.0
+ version: 1.17.0
manager: conda
platform: win-64
dependencies:
- python: ''
- url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhd8ed1ab_0.conda
hash:
- md5: e5f25f8dbc060e9a8d912e432202afc2
- sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6
+ md5: a451d576819089b0d672f18768be0f65
+ sha256: 41db0180680cc67c3fa76544ffd48d6a5679d96f4b71d7498a759e94edc9a2db
category: main
optional: false
- name: sniffio
@@ -5971,11 +6626,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda
hash:
- md5: 490730480d76cf9c8f8f2849719c6e2b
- sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b
+ md5: bf7a226e58dfb8346c70df36065d86c9
+ sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012
category: dev
optional: true
- name: sniffio
@@ -5983,11 +6638,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_1.conda
hash:
- md5: 490730480d76cf9c8f8f2849719c6e2b
- sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b
+ md5: bf7a226e58dfb8346c70df36065d86c9
+ sha256: c2248418c310bdd1719b186796ae50a8a77ce555228b6acd32768e2543a15012
category: dev
optional: true
- name: snowballstemmer
@@ -6063,89 +6718,89 @@ package:
category: dev
optional: true
- name: sphinx
- version: 5.0.2
+ version: 5.3.0
manager: conda
platform: linux-64
dependencies:
alabaster: '>=0.7,<0.8'
- babel: '>=1.3'
- colorama: '>=0.3.5'
- docutils: '>=0.14,<0.19'
- imagesize: ''
- importlib-metadata: '>=4.4'
- jinja2: '>=2.3'
- packaging: ''
- pygments: '>=2.0'
- python: '>=3.6'
+ 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: '>=1.1'
+ 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.0.2-pyh6c4a22f_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2
hash:
- md5: d4eaa1f50733a377480ce1d5aac556c7
- sha256: 27fc8d942d1cedba71035399f71e2d81fd411b86c5d8717c813c46143b8d74f8
+ md5: f9e1fcfe235d655900bfeb6aee426472
+ sha256: f11fd5fb4ae2c65f41ae86e7408e3ab44844898d928264aa9e89929fffc685c8
category: dev
optional: true
- name: sphinx
- version: 5.0.2
+ version: 5.3.0
manager: conda
platform: win-64
dependencies:
- packaging: ''
- sphinxcontrib-jsmath: ''
- sphinxcontrib-applehelp: ''
- sphinxcontrib-qthelp: ''
- sphinxcontrib-devhelp: ''
- imagesize: ''
- python: '>=3.6'
- importlib-metadata: '>=4.4'
- pygments: '>=2.0'
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'
- jinja2: '>=2.3'
- snowballstemmer: '>=1.1'
- babel: '>=1.3'
+ snowballstemmer: '>=2.0'
+ sphinxcontrib-applehelp: ''
+ sphinxcontrib-devhelp: ''
sphinxcontrib-htmlhelp: '>=2.0.0'
+ sphinxcontrib-jsmath: ''
+ sphinxcontrib-qthelp: ''
sphinxcontrib-serializinghtml: '>=1.1.5'
- colorama: '>=0.3.5'
- docutils: '>=0.14,<0.19'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.0.2-pyh6c4a22f_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2
hash:
- md5: d4eaa1f50733a377480ce1d5aac556c7
- sha256: 27fc8d942d1cedba71035399f71e2d81fd411b86c5d8717c813c46143b8d74f8
+ md5: f9e1fcfe235d655900bfeb6aee426472
+ sha256: f11fd5fb4ae2c65f41ae86e7408e3ab44844898d928264aa9e89929fffc685c8
category: dev
optional: true
- name: sphinx-book-theme
- version: 1.0.1
+ version: 1.1.3
manager: conda
platform: linux-64
dependencies:
- pydata-sphinx-theme: '>=0.13.3'
- python: '>=3.7'
- sphinx: '>=4,<7'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.0.1-pyhd8ed1ab_0.conda
+ 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: 1ef419576de2c51b6e3a5a393eb35cda
- sha256: bbd622f59265f80a320afa7cd71d7d95b91ff009796481a7d0875b25c0d079c0
+ md5: 501e2d6d8aa1b8d82d2707ce8c90b287
+ sha256: cf1d3ae6d28042954ac750f6948678fefa619681c3994d2637d747d96a1139ea
category: dev
optional: true
- name: sphinx-book-theme
- version: 1.0.1
+ version: 1.1.3
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- sphinx: '>=4,<7'
- pydata-sphinx-theme: '>=0.13.3'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.0.1-pyhd8ed1ab_0.conda
+ 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: 1ef419576de2c51b6e3a5a393eb35cda
- sha256: bbd622f59265f80a320afa7cd71d7d95b91ff009796481a7d0875b25c0d079c0
+ md5: 501e2d6d8aa1b8d82d2707ce8c90b287
+ sha256: cf1d3ae6d28042954ac750f6948678fefa619681c3994d2637d747d96a1139ea
category: dev
optional: true
- name: sphinx-comments
@@ -6153,12 +6808,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: ''
+ python: '>=3.9'
sphinx: '>=1.8'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-comments-0.0.3-pyh9f0ad1d_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-comments-0.0.3-pyhd8ed1ab_1.conda
hash:
- md5: 2ae3ce35de0c1cec45c94182694f8d1b
- sha256: 2578e9a84f3d4435ad1065daa55ad22a401968c09842220337e8195336f94839
+ md5: 30e02fa8e40287da066e348c95ff5609
+ sha256: 00129f91b905441a9e27c46ef32c22617743eb4a4f7207e1dd84bc19505d4381
category: dev
optional: true
- name: sphinx-comments
@@ -6166,12 +6821,12 @@ package:
manager: conda
platform: win-64
dependencies:
- python: ''
+ python: '>=3.9'
sphinx: '>=1.8'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-comments-0.0.3-pyh9f0ad1d_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-comments-0.0.3-pyhd8ed1ab_1.conda
hash:
- md5: 2ae3ce35de0c1cec45c94182694f8d1b
- sha256: 2578e9a84f3d4435ad1065daa55ad22a401968c09842220337e8195336f94839
+ md5: 30e02fa8e40287da066e348c95ff5609
+ sha256: 00129f91b905441a9e27c46ef32c22617743eb4a4f7207e1dd84bc19505d4381
category: dev
optional: true
- name: sphinx-copybutton
@@ -6179,12 +6834,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3'
+ python: '>=3.9'
sphinx: '>=1.8'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda
hash:
- md5: ac832cc43adc79118cf6e23f1f9b8995
- sha256: 7ea21f009792e7c69612ddba367afe0412b3fdff2e92f439e8cd222de4b40bfe
+ md5: bf22cb9c439572760316ce0748af3713
+ sha256: 8cd892e49cb4d00501bc4439fb0c73ca44905f01a65b2b7fa05ba0e8f3924f19
category: dev
optional: true
- name: sphinx-copybutton
@@ -6192,96 +6847,96 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3'
+ python: '>=3.9'
sphinx: '>=1.8'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda
hash:
- md5: ac832cc43adc79118cf6e23f1f9b8995
- sha256: 7ea21f009792e7c69612ddba367afe0412b3fdff2e92f439e8cd222de4b40bfe
+ md5: bf22cb9c439572760316ce0748af3713
+ sha256: 8cd892e49cb4d00501bc4439fb0c73ca44905f01a65b2b7fa05ba0e8f3924f19
category: dev
optional: true
- name: sphinx-design
- version: 0.3.0
+ version: 0.6.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- sphinx: '>=4,<6'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.3.0-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ sphinx: '>=5,<8'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_0.conda
hash:
- md5: 83d1a712e6d2bab6b298b1d2f42ad355
- sha256: 6b193a483a02bbc7a785dcd28614b4c082d1795fec0a1c48690d8d7a0a876e20
+ md5: 51b2433e4a223b14defee96d3caf9bab
+ sha256: 99a44df1d09a27e40002ebaf76792dac75c9cb1386af313b272a4251c8047640
category: dev
optional: true
- name: sphinx-design
- version: 0.3.0
+ version: 0.6.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- sphinx: '>=4,<6'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.3.0-pyhd8ed1ab_0.tar.bz2
+ python: '>=3.9'
+ sphinx: '>=5,<8'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_0.conda
hash:
- md5: 83d1a712e6d2bab6b298b1d2f42ad355
- sha256: 6b193a483a02bbc7a785dcd28614b4c082d1795fec0a1c48690d8d7a0a876e20
+ md5: 51b2433e4a223b14defee96d3caf9bab
+ sha256: 99a44df1d09a27e40002ebaf76792dac75c9cb1386af313b272a4251c8047640
category: dev
optional: true
- name: sphinx-external-toc
- version: 0.3.1
+ version: 1.0.1
manager: conda
platform: linux-64
dependencies:
- click: '>=7.1,<9'
- python: '>=3.7'
+ click: '>=7.1'
+ python: '>=3.9'
pyyaml: ''
- sphinx: '>=4,<6'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-external-toc-0.3.1-pyhd8ed1ab_1.conda
+ sphinx: '>=5'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-external-toc-1.0.1-pyhd8ed1ab_1.conda
hash:
- md5: d9a56bf4dce363e8e7e2466691668895
- sha256: db3113a9e2077e4177880f4e9f01335ca1cfc336ac034265ecf997014c7572c5
+ md5: d248f9db0f1c2e7c480b058925afa9c5
+ sha256: 47dda7135f9fb1777b7066c3b9260fdd796d6ec2aeb8804161f39c65b3461401
category: dev
optional: true
- name: sphinx-external-toc
- version: 0.3.1
+ version: 1.0.1
manager: conda
platform: win-64
dependencies:
+ click: '>=7.1'
+ python: '>=3.9'
pyyaml: ''
- python: '>=3.7'
- click: '>=7.1,<9'
- sphinx: '>=4,<6'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-external-toc-0.3.1-pyhd8ed1ab_1.conda
+ sphinx: '>=5'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-external-toc-1.0.1-pyhd8ed1ab_1.conda
hash:
- md5: d9a56bf4dce363e8e7e2466691668895
- sha256: db3113a9e2077e4177880f4e9f01335ca1cfc336ac034265ecf997014c7572c5
+ md5: d248f9db0f1c2e7c480b058925afa9c5
+ sha256: 47dda7135f9fb1777b7066c3b9260fdd796d6ec2aeb8804161f39c65b3461401
category: dev
optional: true
- name: sphinx-jupyterbook-latex
- version: 0.5.2
+ version: 1.0.0
manager: conda
platform: linux-64
dependencies:
- importlib_resources: ''
- python: '>=3.6'
- sphinx: '>=3,<5.1'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-jupyterbook-latex-0.5.2-pyhd8ed1ab_0.tar.bz2
+ 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: 88fc7863c8675f297b03e0ca50500b7f
- sha256: d1f1ccb786934955b500a8006ab84db075d34b8be66571dccf4e270109db433f
+ md5: 9261bc5d987013f5d8dc58061c34f1a3
+ sha256: b64c031795918f26ddeb5148ede2d3a4944cd9f5461cf72bde3f28acdc71d2f3
category: dev
optional: true
- name: sphinx-jupyterbook-latex
- version: 0.5.2
+ version: 1.0.0
manager: conda
platform: win-64
dependencies:
- importlib_resources: ''
- python: '>=3.6'
- sphinx: '>=3,<5.1'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-jupyterbook-latex-0.5.2-pyhd8ed1ab_0.tar.bz2
+ 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: 88fc7863c8675f297b03e0ca50500b7f
- sha256: d1f1ccb786934955b500a8006ab84db075d34b8be66571dccf4e270109db433f
+ md5: 9261bc5d987013f5d8dc58061c34f1a3
+ sha256: b64c031795918f26ddeb5148ede2d3a4944cd9f5461cf72bde3f28acdc71d2f3
category: dev
optional: true
- name: sphinx-multitoc-numbering
@@ -6289,12 +6944,12 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
sphinx: '>=3'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-multitoc-numbering-0.1.3-pyhd8ed1ab_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-multitoc-numbering-0.1.3-pyhd8ed1ab_1.conda
hash:
- md5: 40749a4d0f0d2e11c65fb26c1cd16a90
- sha256: 6c8241fdb4222799c04677b06b2e1f480a6c11f27c8fccc9f73f98798d3c44d8
+ md5: cc5fc0988f0fedab436361b9b5906a58
+ sha256: 9fa48b33334c3a9971c96dd3d921950e8350cfa88a8e8ebaec6d8261071ea2ac
category: dev
optional: true
- name: sphinx-multitoc-numbering
@@ -6302,38 +6957,38 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
+ python: '>=3.9'
sphinx: '>=3'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-multitoc-numbering-0.1.3-pyhd8ed1ab_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-multitoc-numbering-0.1.3-pyhd8ed1ab_1.conda
hash:
- md5: 40749a4d0f0d2e11c65fb26c1cd16a90
- sha256: 6c8241fdb4222799c04677b06b2e1f480a6c11f27c8fccc9f73f98798d3c44d8
+ md5: cc5fc0988f0fedab436361b9b5906a58
+ sha256: 9fa48b33334c3a9971c96dd3d921950e8350cfa88a8e8ebaec6d8261071ea2ac
category: dev
optional: true
- name: sphinx-thebe
- version: 0.2.1
+ version: 0.3.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- sphinx: '>=4,<7'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-thebe-0.2.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ sphinx: '>=4'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-thebe-0.3.1-pyhd8ed1ab_1.conda
hash:
- md5: 8a4151bde2af98c6cbc42ee12b48eb7f
- sha256: 4b083e89ec6ee314e4971dbb442d5ea5d54539629090eb90e5688ec0648afabd
+ md5: f6627ce09745a0f822cc6e7de8cf4f99
+ sha256: 9d0cd52edcb2274bf7c8e9327317d9bb48e1d092afeaed093e0242876ad3c008
category: dev
optional: true
- name: sphinx-thebe
- version: 0.2.1
+ version: 0.3.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- sphinx: '>=4,<7'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinx-thebe-0.2.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ sphinx: '>=4'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinx-thebe-0.3.1-pyhd8ed1ab_1.conda
hash:
- md5: 8a4151bde2af98c6cbc42ee12b48eb7f
- sha256: 4b083e89ec6ee314e4971dbb442d5ea5d54539629090eb90e5688ec0648afabd
+ md5: f6627ce09745a0f822cc6e7de8cf4f99
+ sha256: 9d0cd52edcb2274bf7c8e9327317d9bb48e1d092afeaed093e0242876ad3c008
category: dev
optional: true
- name: sphinx-togglebutton
@@ -6355,9 +7010,9 @@ package:
manager: conda
platform: win-64
dependencies:
- sphinx: ''
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
@@ -6371,10 +7026,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 9075bd8c033f0257122300db914e49c9
- sha256: 8ac476358cf26098e3a360b2a9037bd809243f72934c103953e25f4fda4b9f31
+ md5: 16e3f039c0aa6446513e94ab18a8784b
+ sha256: d7433a344a9ad32a680b881c81b0034bc61618d12c39dd6e3309abeffa9577ba
category: dev
optional: true
- name: sphinxcontrib-applehelp
@@ -6384,10 +7039,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 9075bd8c033f0257122300db914e49c9
- sha256: 8ac476358cf26098e3a360b2a9037bd809243f72934c103953e25f4fda4b9f31
+ md5: 16e3f039c0aa6446513e94ab18a8784b
+ sha256: d7433a344a9ad32a680b881c81b0034bc61618d12c39dd6e3309abeffa9577ba
category: dev
optional: true
- name: sphinxcontrib-bibtex
@@ -6414,11 +7069,11 @@ package:
platform: win-64
dependencies:
dataclasses: ''
- python: '>=3.6'
- pybtex: '>=0.24'
- importlib_metadata: '>=3.6'
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:
@@ -6433,10 +7088,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: b3bcc38c471ebb738854f52a36059b48
- sha256: 6790efe55f168816dfc9c14235054d5156e5150d28546c5baf2ff4973eff8f6b
+ md5: 910f28a05c178feba832f842155cbfff
+ sha256: 55d5076005d20b84b20bee7844e686b7e60eb9f683af04492e598a622b12d53d
category: dev
optional: true
- name: sphinxcontrib-devhelp
@@ -6446,10 +7101,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: b3bcc38c471ebb738854f52a36059b48
- sha256: 6790efe55f168816dfc9c14235054d5156e5150d28546c5baf2ff4973eff8f6b
+ md5: 910f28a05c178feba832f842155cbfff
+ sha256: 55d5076005d20b84b20bee7844e686b7e60eb9f683af04492e598a622b12d53d
category: dev
optional: true
- name: sphinxcontrib-htmlhelp
@@ -6459,10 +7114,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda
hash:
- md5: e25640d692c02e8acfff0372f547e940
- sha256: 55e14b77ed786ab6ff752b8d75f8448536f385ed250f432bd408d2eff5ea4a9e
+ md5: e9fb3fe8a5b758b4aff187d434f94f03
+ sha256: c1492c0262ccf16694bdcd3bb62aa4627878ea8782d5cd3876614ffeb62b3996
category: dev
optional: true
- name: sphinxcontrib-htmlhelp
@@ -6472,10 +7127,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda
hash:
- md5: e25640d692c02e8acfff0372f547e940
- sha256: 55e14b77ed786ab6ff752b8d75f8448536f385ed250f432bd408d2eff5ea4a9e
+ md5: e9fb3fe8a5b758b4aff187d434f94f03
+ sha256: c1492c0262ccf16694bdcd3bb62aa4627878ea8782d5cd3876614ffeb62b3996
category: dev
optional: true
- name: sphinxcontrib-jsmath
@@ -6483,11 +7138,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda
hash:
- md5: da1d979339e2714c30a8e806a33ec087
- sha256: d4337d83b8edba688547766fc80f1ac86d6ec86ceeeda93f376acc04079c5ce2
+ md5: fa839b5ff59e192f411ccc7dae6588bb
+ sha256: 578bef5ec630e5b2b8810d898bbbf79b9ae66d49b7938bcc3efc364e679f2a62
category: dev
optional: true
- name: sphinxcontrib-jsmath
@@ -6495,11 +7150,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda
hash:
- md5: da1d979339e2714c30a8e806a33ec087
- sha256: d4337d83b8edba688547766fc80f1ac86d6ec86ceeeda93f376acc04079c5ce2
+ md5: fa839b5ff59e192f411ccc7dae6588bb
+ sha256: 578bef5ec630e5b2b8810d898bbbf79b9ae66d49b7938bcc3efc364e679f2a62
category: dev
optional: true
- name: sphinxcontrib-qthelp
@@ -6509,10 +7164,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: d6e5ea5fe00164ac6c2dcc5d76a42192
- sha256: 7ae639b729844de2ec74dbaf1acccc14843868a82fa46cd2ceb735bc8266af5b
+ md5: 00534ebcc0375929b45c3039b5ba7636
+ sha256: c664fefae4acdb5fae973bdde25836faf451f41d04342b64a358f9a7753c92ca
category: dev
optional: true
- name: sphinxcontrib-qthelp
@@ -6522,10 +7177,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda
hash:
- md5: d6e5ea5fe00164ac6c2dcc5d76a42192
- sha256: 7ae639b729844de2ec74dbaf1acccc14843868a82fa46cd2ceb735bc8266af5b
+ md5: 00534ebcc0375929b45c3039b5ba7636
+ sha256: c664fefae4acdb5fae973bdde25836faf451f41d04342b64a358f9a7753c92ca
category: dev
optional: true
- name: sphinxcontrib-serializinghtml
@@ -6535,10 +7190,10 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda
hash:
- md5: e507335cb4ca9cff4c3d0fa9cdab255e
- sha256: bf80e4c0ff97d5e8e5f6db0831ba60007e820a3a438e8f1afd868aa516d67d6f
+ md5: 3bc61f7161d28137797e038263c04c54
+ sha256: 64d89ecc0264347486971a94487cb8d7c65bfc0176750cf7502b8a272f4ab557
category: dev
optional: true
- name: sphinxcontrib-serializinghtml
@@ -6548,30 +7203,31 @@ package:
dependencies:
python: '>=3.9'
sphinx: '>=5'
- url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda
hash:
- md5: e507335cb4ca9cff4c3d0fa9cdab255e
- sha256: bf80e4c0ff97d5e8e5f6db0831ba60007e820a3a438e8f1afd868aa516d67d6f
+ md5: 3bc61f7161d28137797e038263c04c54
+ sha256: 64d89ecc0264347486971a94487cb8d7c65bfc0176750cf7502b8a272f4ab557
category: dev
optional: true
- name: sqlalchemy
- version: 2.0.31
+ version: 2.0.37
manager: conda
platform: linux-64
dependencies:
+ __glibc: '>=2.17,<3.0.a0'
greenlet: '!=0.4.17'
- libgcc-ng: '>=12'
+ 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.31-py310hc51659f_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.37-py310ha75aee5_0.conda
hash:
- md5: 938cc25cbacaf9612e34b431855c76d0
- sha256: 166b883f88740ab8f473c3bfe728aed7c3ffcf448f85682e586b74e8ae40bcd5
+ md5: c54931e147566053f774738dc5caaa4e
+ sha256: 22e5d1fea4606b7ba3700f68f733b76d8012ef1b1cc9af85256fd2f0dd3c1fd6
category: dev
optional: true
- name: sqlalchemy
- version: 2.0.31
+ version: 2.0.37
manager: conda
platform: win-64
dependencies:
@@ -6582,40 +7238,40 @@ package:
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.31-py310ha8f682b_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.37-py310ha8f682b_0.conda
hash:
- md5: bdfa8874d6699251efe882053b9a2972
- sha256: 4e8ab8aabb096a6d3873f68ec4dff462cbe02e110930fc4c2fbb60b3866af7cc
+ md5: 73d7dad251d3c87b69f40c72f9bac8e7
+ sha256: 510e46d3c619902f4b611ba88441148b13de23e3d591e2b0ae15ea215c1fd33b
category: dev
optional: true
- name: stack_data
- version: 0.6.2
+ version: 0.6.3
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
hash:
- md5: e7df0fdd404616638df5ece6e69ba7af
- sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec
+ md5: b1b505328da7a6b246787df4b5a49fbc
+ sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41
category: dev
optional: true
- name: stack_data
- version: 0.6.2
+ version: 0.6.3
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda
hash:
- md5: e7df0fdd404616638df5ece6e69ba7af
- sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec
+ md5: b1b505328da7a6b246787df4b5a49fbc
+ sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41
category: dev
optional: true
- name: tabulate
@@ -6623,11 +7279,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda
hash:
- md5: 4759805cce2d914c38472f70bf4d8bcb
- sha256: f6e4a0dd24ba060a4af69ca79d32361a6678e61d78c73eb5e357909b025b4620
+ md5: 959484a66b4b76befcddc4fa97c95567
+ sha256: 090023bddd40d83468ef86573976af8c514f64119b2bd814ee63a838a542720a
category: dev
optional: true
- name: tabulate
@@ -6635,11 +7291,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_2.conda
hash:
- md5: 4759805cce2d914c38472f70bf4d8bcb
- sha256: f6e4a0dd24ba060a4af69ca79d32361a6678e61d78c73eb5e357909b025b4620
+ md5: 959484a66b4b76befcddc4fa97c95567
+ sha256: 090023bddd40d83468ef86573976af8c514f64119b2bd814ee63a838a542720a
category: dev
optional: true
- name: tbb
@@ -6648,13 +7304,15 @@ package:
platform: linux-64
dependencies:
__glibc: '>=2.17,<3.0.a0'
- libgcc-ng: '>=12'
+ libgcc: ''
+ libgcc-ng: '>=13'
libhwloc: '>=2.11.1,<2.11.2.0a0'
- libstdcxx-ng: '>=12'
- url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h434a139_3.conda
+ libstdcxx: ''
+ libstdcxx-ng: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h84d6215_4.conda
hash:
- md5: c667c11d1e488a38220ede8a34441bff
- sha256: e901e1887205a3f90d6a77e1302ccc5ffe48fd30de16907dfdbdbf1dbef0a177
+ md5: 1fa72fdeb88f538018612ce2ed9fc789
+ sha256: a079dcf42804a841ac2b63784f42e0d2e93401833d4a7d44ddf05b767794d578
category: main
optional: false
- name: tbb
@@ -6666,10 +7324,10 @@ package:
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-hc790b64_3.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.12.0-hc790b64_4.conda
hash:
- md5: a16e2a639e87c554abee5192ce6ee308
- sha256: 721a88d702e31efd9437d387774ef9157846743e66648f5f863b29ae322e8479
+ md5: bce92c19a6cb64b47866b7271363f747
+ sha256: d23e589311be6aeacbfb8371bd65d8637c5acc83a149baccc57d2621644fe158
category: main
optional: false
- name: tblib
@@ -6677,11 +7335,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 04eedddeb68ad39871c8127dd1c21f4f
- sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a
+ md5: 60ce69f73f3e75b21f1c27b1b471320c
+ sha256: 6869cd2e043426d30c84d0ff6619f176b39728f9c75dc95dca89db994548bb8a
category: main
optional: false
- name: tblib
@@ -6689,11 +7347,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 04eedddeb68ad39871c8127dd1c21f4f
- sha256: 2e2c255b6f24a6d75b9938cb184520e27db697db2c24f04e18342443ae847c0a
+ md5: 60ce69f73f3e75b21f1c27b1b471320c
+ sha256: 6869cd2e043426d30c84d0ff6619f176b39728f9c75dc95dca89db994548bb8a
category: main
optional: false
- name: terminado
@@ -6718,8 +7376,8 @@ package:
dependencies:
__win: ''
python: '>=3.8'
- tornado: '>=6.1.0'
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
@@ -6751,29 +7409,29 @@ package:
category: main
optional: false
- name: tinycss2
- version: 1.3.0
+ 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.3.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda
hash:
- md5: 8662629d9a05f9cff364e31ca106c1ac
- sha256: bc55e5899e66805589c02061e315bfc23ae6cc2f2811f5cc13fb189a5ed9d90f
+ md5: f1acf5fdefa8300de697982bcb1761c9
+ sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2
category: dev
optional: true
- name: tinycss2
- version: 1.3.0
+ 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.3.0-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda
hash:
- md5: 8662629d9a05f9cff364e31ca106c1ac
- sha256: bc55e5899e66805589c02061e315bfc23ae6cc2f2811f5cc13fb189a5ed9d90f
+ md5: f1acf5fdefa8300de697982bcb1761c9
+ sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2
category: dev
optional: true
- name: tk
@@ -6808,11 +7466,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda
hash:
- md5: f832c45a477c78bebd107098db465095
- sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1
+ md5: b0dd904de08b7db706167240bf37b164
+ sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938
category: dev
optional: true
- name: toml
@@ -6820,138 +7478,140 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda
hash:
- md5: f832c45a477c78bebd107098db465095
- sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1
+ md5: b0dd904de08b7db706167240bf37b164
+ sha256: 34f3a83384ac3ac30aefd1309e69498d8a4aa0bf2d1f21c645f79b180e378938
category: dev
optional: true
- name: tomli
- version: 2.0.1
+ version: 2.2.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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
hash:
- md5: 5844808ffab9ebdb694585b50ba02a96
- sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f
+ md5: ac944244f1fed2eb49bae07193ae8215
+ sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e
category: dev
optional: true
- name: tomli
- version: 2.0.1
+ version: 2.2.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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda
hash:
- md5: 5844808ffab9ebdb694585b50ba02a96
- sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f
+ md5: ac944244f1fed2eb49bae07193ae8215
+ sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e
category: dev
optional: true
- name: tomlkit
- version: 0.13.0
+ version: 0.13.2
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.0-pyha770c72_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda
hash:
- md5: 810ba6f354ddef812d0ddc4669cc8de6
- sha256: 8e61623213c620776f1328da4bee03f8828dbf2730f1a4fbd9b8af5398f5848e
+ md5: 1d9ab4fc875c52db83f9c9b40af4e2c8
+ sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2
category: dev
optional: true
- name: tomlkit
- version: 0.13.0
+ version: 0.13.2
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.0-pyha770c72_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.13.2-pyha770c72_1.conda
hash:
- md5: 810ba6f354ddef812d0ddc4669cc8de6
- sha256: 8e61623213c620776f1328da4bee03f8828dbf2730f1a4fbd9b8af5398f5848e
+ md5: 1d9ab4fc875c52db83f9c9b40af4e2c8
+ sha256: 986fae65f5568e95dbf858d08d77a0f9cca031345a98550f1d4b51d36d8811e2
category: dev
optional: true
- name: toolz
- version: 0.12.1
+ version: 1.0.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 2fcb582444635e2c402e8569bb94e039
- sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6
+ md5: 40d0ed782a8aaa16ef248e68c06c168d
+ sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87
category: main
optional: false
- name: toolz
- version: 0.12.1
+ version: 1.0.0
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda
hash:
- md5: 2fcb582444635e2c402e8569bb94e039
- sha256: 22b0a9790317526e08609d5dfdd828210ae89e6d444a9e954855fc29012e90c6
+ md5: 40d0ed782a8aaa16ef248e68c06c168d
+ sha256: eda38f423c33c2eaeca49ed946a8d3bf466cc3364970e083a65eb2fd85258d87
category: main
optional: false
- name: tornado
- version: '6.1'
+ version: 6.4.2
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=10.3.0'
+ __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.1-py310h5764c6d_3.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda
hash:
- md5: 8a5770e6392d29d99c9bc9c3635bba60
- sha256: 67347d4755ffbb969e581f9c0d7210490142aa7cfec15ff421b499c6dcf162aa
+ md5: 166d59aab40b9c607b4cc21c03924e9d
+ sha256: 9c2b86d4e58c8b0e7d13a7f4c440f34e2201bae9cfc1d7e1d30a5bc7ffb1d4c8
category: main
optional: false
- name: tornado
- version: '6.1'
+ version: 6.4.2
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
+ 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: f5e310d96e266e6acda33c31c722e2cb
- sha256: 0af2d677ec17d9c00311b5cba56a1ed5e62328d8c160523b66c8e243fe99dcb0
+ md5: e6819d3a0cae0f1b1838875f858421d1
+ sha256: 2e5671d0db03961692b3390778ce6aba40702bd57584fa60badf4baa7614679b
category: main
optional: false
- name: tqdm
- version: 4.66.4
+ version: 4.67.1
manager: conda
platform: linux-64
dependencies:
colorama: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda
hash:
- md5: e74cd796e70a4261f86699ee0a3a7a24
- sha256: 75342f40a69e434a1a23003c3e254a95dca695fb14955bc32f1819cd503964b2
+ md5: 9efbfdc37242619130ea42b1cc4ed861
+ sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40
category: main
optional: false
- name: tqdm
- version: 4.66.4
+ version: 4.67.1
manager: conda
platform: win-64
dependencies:
colorama: ''
- python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.4-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.1-pyhd8ed1ab_1.conda
hash:
- md5: e74cd796e70a4261f86699ee0a3a7a24
- sha256: 75342f40a69e434a1a23003c3e254a95dca695fb14955bc32f1819cd503964b2
+ md5: 9efbfdc37242619130ea42b1cc4ed861
+ sha256: 11e2c85468ae9902d24a27137b6b39b4a78099806e551d390e394a8c34b48e40
category: main
optional: false
- name: traitlets
@@ -6959,11 +7619,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda
hash:
- md5: 3df84416a021220d8b5700c613af2dc5
- sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592
+ md5: 019a7385be9af33791c989871317e1ed
+ sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959
category: dev
optional: true
- name: traitlets
@@ -6971,11 +7631,35 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda
hash:
- md5: 3df84416a021220d8b5700c613af2dc5
- sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592
+ md5: 019a7385be9af33791c989871317e1ed
+ sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
optional: true
- name: typing-extensions
@@ -6984,10 +7668,10 @@ package:
platform: linux-64
dependencies:
typing_extensions: 4.12.2
- url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda
hash:
- md5: 52d648bd608f5737b123f510bb5514b5
- sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73
+ md5: b6a408c64b78ec7b779a3e5c7a902433
+ sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32
category: main
optional: false
- name: typing-extensions
@@ -6996,10 +7680,10 @@ package:
platform: win-64
dependencies:
typing_extensions: 4.12.2
- url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_1.conda
hash:
- md5: 52d648bd608f5737b123f510bb5514b5
- sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73
+ md5: b6a408c64b78ec7b779a3e5c7a902433
+ sha256: c8e9c1c467b5f960b627d7adc1c65fece8e929a3de89967e91ef0f726422fd32
category: main
optional: false
- name: typing_extensions
@@ -7007,11 +7691,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda
hash:
- md5: ebe6952715e1d5eb567eeebf25250fa7
- sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb
+ md5: d17f13df8b65464ca316cbc000a3cb64
+ sha256: 337be7af5af8b2817f115b3b68870208b30c31d3439bec07bfb2d8f4823e3568
category: main
optional: false
- name: typing_extensions
@@ -7019,33 +7703,57 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_1.conda
hash:
- md5: ebe6952715e1d5eb567eeebf25250fa7
- sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: tzdata
- version: 2024a
+ version: 2024b
manager: conda
platform: linux-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
hash:
- md5: 161081fc7cec0bfda0d86d7cb595f8d8
- sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122
+ md5: 8ac3367aafb1cc0a068483c580af8015
+ sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
category: main
optional: false
- name: tzdata
- version: 2024a
+ version: 2024b
manager: conda
platform: win-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
hash:
- md5: 161081fc7cec0bfda0d86d7cb595f8d8
- sha256: 7b2b69c54ec62a243eb6fba2391b5e443421608c3ae5dbff938ad33ca8db5122
+ md5: 8ac3367aafb1cc0a068483c580af8015
+ sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
category: main
optional: false
- name: uc-micro-py
@@ -7053,11 +7761,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda
hash:
- md5: 3b7fc78d7be7b450952aaa916fb78877
- sha256: 54293cd94da3a6b978b353eb7897555055d925ad0008bc73e85cca19e2587ed0
+ md5: 9c96c9876ba45368a03056ddd0f20431
+ sha256: a2f837780af450d633efc052219c31378bcad31356766663fb88a99e8e4c817b
category: dev
optional: true
- name: uc-micro-py
@@ -7065,11 +7773,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.6'
- url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_1.conda
hash:
- md5: 3b7fc78d7be7b450952aaa916fb78877
- sha256: 54293cd94da3a6b978b353eb7897555055d925ad0008bc73e85cca19e2587ed0
+ md5: 9c96c9876ba45368a03056ddd0f20431
+ sha256: a2f837780af450d633efc052219c31378bcad31356766663fb88a99e8e4c817b
category: dev
optional: true
- name: ucrt
@@ -7077,10 +7785,10 @@ package:
manager: conda
platform: win-64
dependencies: {}
- url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2
+ url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda
hash:
- md5: 72608f6cd3e5898229c3ea16deb1ac43
- sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6
+ md5: 6797b005cd0f439c4c5c9ac565783700
+ sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450
category: main
optional: false
- name: unicodedata2
@@ -7088,13 +7796,14 @@ package:
manager: conda
platform: linux-64
dependencies:
- libgcc-ng: '>=12'
+ __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-15.1.0-py310h2372a71_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310ha75aee5_1.conda
hash:
- md5: 72637c58d36d9475fda24700c9796f19
- sha256: 5ab2f2d4542ba0cc27d222c08ae61706babe7173b0c6dfa748aa37ff2fa9d824
+ md5: ee18e67b0bd283f6a75369936451d6ac
+ sha256: 4fa13f63d1e3e524a793733e7802110eba62f9734667da5990a172b4dc631d08
category: main
optional: false
- name: unicodedata2
@@ -7107,66 +7816,66 @@ package:
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
+ url: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-15.1.0-py310ha8f682b_1.conda
hash:
- md5: f9f25aeb0eed2dd8c770f137c45da3c2
- sha256: 7beadca7de88d62b65124a98e0c442cef787dac2ac41768deb7200fd33d07603
+ md5: c79b8d93f7cf51200011a9eede124b6e
+ sha256: 4d5e8d7e59cd916c19ef57d7623de99eb3d0e5122a4023793e7cea209717a04e
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: dev
+ optional: true
+- 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: dev
+ optional: true
- name: urllib3
- version: 2.2.2
+ 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.8'
+ python: '>=3.9'
zstandard: '>=0.18.0'
- url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda
hash:
- md5: e804c43f58255e977093a2298e442bb8
- sha256: 00c47c602c03137e7396f904eccede8cc64cc6bad63ce1fc355125df8882a748
+ md5: 32674f8dbfb7b26410ed580dd3c10a29
+ sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e
category: main
optional: false
- name: urllib3
- version: 2.2.2
+ version: 2.3.0
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
brotli-python: '>=1.0.9'
- pysocks: '>=1.5.6,<2.0,!=1.5.7'
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.2.2-pyhd8ed1ab_1.conda
- hash:
- md5: e804c43f58255e977093a2298e442bb8
- sha256: 00c47c602c03137e7396f904eccede8cc64cc6bad63ce1fc355125df8882a748
- 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: main
- optional: false
-- 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
+ url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.3.0-pyhd8ed1ab_0.conda
hash:
- md5: 4864e2f5c746f45e02ec46221caccb7e
- sha256: da75b1b3b0674bf14d32cb00d6d070bf273772c73c787694d438104a486e7627
+ md5: 32674f8dbfb7b26410ed580dd3c10a29
+ sha256: 114919ffa80c328127dab9c8e7a38f9d563c617691fb81fccb11c1e86763727e
category: main
optional: false
- name: vc
@@ -7174,35 +7883,35 @@ package:
manager: conda
platform: win-64
dependencies:
- vc14_runtime: '>=14.40.33810'
- url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_20.conda
+ vc14_runtime: '>=14.38.33135'
+ url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda
hash:
- md5: 8558f367e1d7700554f7cdb823c46faf
- sha256: 23ac5feb15a9adf3ab2b8c4dcd63650f8b7ae860c5ceb073e49cf71d203eddef
+ md5: 7c10ec3158d1eb4ddff7007c9101adb0
+ sha256: 986ddaf8feec2904eac9535a7ddb7acda1a1dfb9482088fdb8129f1595181663
category: main
optional: false
- name: vc14_runtime
- version: 14.40.33810
+ 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.40.33810-ha82c5b3_20.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.42.34433-he29a5d6_23.conda
hash:
- md5: e39cc4c34c53654ec939558993d9dc5b
- sha256: af3cfa347e3d7c1277e9b964b0849a9a9f095bff61836cb3c3a89862fbc32e17
+ md5: 32b37d0cfa80da34548501cdc913a832
+ sha256: c483b090c4251a260aba6ff3e83a307bcfb5fb24ad7ced872ab5d02971bd3a49
category: main
optional: false
- name: vs2015_runtime
- version: 14.40.33810
+ version: 14.42.34433
manager: conda
platform: win-64
dependencies:
- vc14_runtime: '>=14.40.33810'
- url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_20.conda
+ vc14_runtime: '>=14.42.34433'
+ url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.42.34433-hdffcdeb_23.conda
hash:
- md5: c21f1b4a3a30bbc3ef35a50957578e0e
- sha256: 0c2803f7a788c51f28235a7228dc2ab3f107b4b16ab0845a3e595c8c51e50a7a
+ md5: 5c176975ca2b8366abad3c97b3cd1e83
+ sha256: 568ce8151eaae256f1cef752fc78651ad7a86ff05153cc7a4740b52ae6536118
category: main
optional: false
- name: wcwidth
@@ -7210,11 +7919,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda
hash:
- md5: 68f0738df502a14213624b288c60c9ad
- sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3
+ md5: b68980f2495d096e71c7fd9d7ccf63e6
+ sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5
category: dev
optional: true
- name: wcwidth
@@ -7222,11 +7931,35 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_1.conda
+ hash:
+ md5: b68980f2495d096e71c7fd9d7ccf63e6
+ sha256: f21e63e8f7346f9074fd00ca3b079bd3d2fa4d71f1f89d5b6934bf31446dc2a5
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 68f0738df502a14213624b288c60c9ad
- sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3
+ md5: b49f7b291e15494aafb0a7d74806f337
+ sha256: 08315dc2e61766a39219b2d82685fc25a56b2817acf84d5b390176080eaacf99
category: dev
optional: true
- name: webencodings
@@ -7234,11 +7967,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=2.6'
- url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda
hash:
- md5: daf5160ff9cde3a468556965329085b9
- sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944
+ md5: 2841eb5bfc75ce15e9a0054b98dcd64d
+ sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6
category: dev
optional: true
- name: webencodings
@@ -7246,11 +7979,11 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=2.6'
- url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda
hash:
- md5: daf5160ff9cde3a468556965329085b9
- sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944
+ md5: 2841eb5bfc75ce15e9a0054b98dcd64d
+ sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6
category: dev
optional: true
- name: websocket-client
@@ -7258,11 +7991,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda
hash:
- md5: f372c576b8774922da83cda2b12f9d29
- sha256: 44a5e3b97feef24cd719f7851cca9af9799dc9c17d3e0298d5856baab2d682f5
+ md5: 84f8f77f0a9c6ef401ee96611745da8f
+ sha256: 1dd84764424ffc82030c19ad70607e6f9e3b9cb8e633970766d697185652053e
category: dev
optional: true
- name: websocket-client
@@ -7270,61 +8003,61 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda
hash:
- md5: f372c576b8774922da83cda2b12f9d29
- sha256: 44a5e3b97feef24cd719f7851cca9af9799dc9c17d3e0298d5856baab2d682f5
+ md5: 84f8f77f0a9c6ef401ee96611745da8f
+ sha256: 1dd84764424ffc82030c19ad70607e6f9e3b9cb8e633970766d697185652053e
category: dev
optional: true
- name: wheel
- version: 0.43.0
+ version: 0.45.1
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda
hash:
- md5: 0b5293a157c2b5cd513dd1b03d8d3aae
- sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc
+ md5: 75cb7132eb58d97896e173ef12ac9986
+ sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce
category: main
optional: false
- name: wheel
- version: 0.43.0
+ version: 0.45.1
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda
hash:
- md5: 0b5293a157c2b5cd513dd1b03d8d3aae
- sha256: cb318f066afd6fd64619f14c030569faf3f53e6f50abf743b4c865e7d95b96bc
+ md5: 75cb7132eb58d97896e173ef12ac9986
+ sha256: 1b34021e815ff89a4d902d879c3bd2040bc1bd6169b32e9427497fa05c55f1ce
category: main
optional: false
- name: widgetsnbextension
- version: 3.6.8
+ version: 3.6.10
manager: conda
platform: linux-64
dependencies:
notebook: '>=4.4.1'
python: '>=3.7'
- url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.8-pyhd8ed1ab_0.conda
+ url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.10-pyhd8ed1ab_0.conda
hash:
- md5: f36acc13e47c73b3a218caf98d52c3ee
- sha256: 5e77dbfb4e1e5e206a9ead7970708e7456f707a248e483736625412817c50c0e
+ md5: 4d52bbdb661dc1b5a1c2aeb1afcd9a67
+ sha256: 6aeb16d2aacdae68ba7afd980925264f5d0459dd165e3406f13f23949df346c1
category: dev
optional: true
- name: widgetsnbextension
- version: 3.6.8
+ version: 3.6.10
manager: conda
platform: win-64
dependencies:
- python: '>=3.7'
notebook: '>=4.4.1'
- url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.8-pyhd8ed1ab_0.conda
+ python: '>=3.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.10-pyhd8ed1ab_0.conda
hash:
- md5: f36acc13e47c73b3a218caf98d52c3ee
- sha256: 5e77dbfb4e1e5e206a9ead7970708e7456f707a248e483736625412817c50c0e
+ md5: 4d52bbdb661dc1b5a1c2aeb1afcd9a67
+ sha256: 6aeb16d2aacdae68ba7afd980925264f5d0459dd165e3406f13f23949df346c1
category: dev
optional: true
- name: win_inet_pton
@@ -7333,11 +8066,11 @@ package:
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
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda
hash:
- md5: 30878ecc4bd36e8deeea1e3c151b2e0b
- sha256: a11ae693a0645bf6c7b8a47bac030be9c0967d0b1924537b9ff7458e832c0511
+ md5: 46e441ba871f524e2b067929da3051c2
+ sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f
category: main
optional: false
- name: winpty
@@ -7352,15 +8085,16 @@ package:
category: dev
optional: true
- name: xorg-libxau
- version: 1.0.11
+ version: 1.0.12
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
+ __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: 2c80dc38fface310c9bd81b17037fee5
- sha256: 309751371d525ce50af7c87811b435c176915239fc9e132b99a25d5e1703f2d4
+ md5: f6ebe2cb3f82ba6c057dde5d9debe4f7
+ sha256: ed10c9283974d311855ae08a16dfd7e56241fac632aec3b92e3cfe73cff31038
category: main
optional: false
- name: xorg-libxau
@@ -7377,15 +8111,16 @@ package:
category: main
optional: false
- name: xorg-libxdmcp
- version: 1.1.3
+ version: 1.1.5
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
+ __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: be93aabceefa2fac576e971aef407908
- sha256: 4df7c5ee11b8686d3453e7f3f4aa20ceef441262b49860733066c52cfd0e4a77
+ md5: 8035c64cb77ed555e3f150b7b3972480
+ sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee
category: main
optional: false
- name: xorg-libxdmcp
@@ -7400,31 +8135,6 @@ package:
sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93
category: main
optional: false
-- 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: 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
@@ -7471,11 +8181,11 @@ package:
manager: conda
platform: win-64
dependencies:
- fasteners: ''
asciitree: ''
- python: '>=3.5'
- numpy: '>=1.7'
+ 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
@@ -7487,14 +8197,15 @@ package:
manager: conda
platform: linux-64
dependencies:
- krb5: '>=1.21.2,<1.22.0a0'
- 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-h75354e8_4.conda
+ __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: 03cc8d9838ad9dd0060ab532e81ccb21
- sha256: bc9aaee39e7be107d7daff237435dfd8f791aca460a98583a36a263615205262
+ md5: 3947a35e916fcc6b9825449affbf4214
+ sha256: a4dc72c96848f764bb5a5176aa93dd1e9b9e52804137b99daeebba277b31ea10
category: dev
optional: true
- name: zeromq
@@ -7502,15 +8213,15 @@ package:
manager: conda
platform: win-64
dependencies:
- krb5: '>=1.21.2,<1.22.0a0'
- libsodium: '>=1.0.18,<1.0.19.0a0'
+ 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-he1f189c_4.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_7.conda
hash:
- md5: b755eb545c2728b9a53729f02e627834
- sha256: 0f375034a88659f764ce837f324698a883da227fcb517561ffaf6a89474211b4
+ md5: e03f2c245a5ee6055752465519363b1c
+ sha256: 15cc8e2162d0a33ffeb3f7b7c7883fd830c54a4b1be6a4b8c7ee1f4fef0088fb
category: dev
optional: true
- name: zict
@@ -7518,11 +8229,11 @@ package:
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda
hash:
- md5: cf30c2c15b82aacb07f9c09e28ff2275
- sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5
+ md5: e52c2ef711ccf31bb7f70ca87d144b9e
+ sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d
category: main
optional: false
- name: zict
@@ -7530,37 +8241,37 @@ package:
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda
hash:
- md5: cf30c2c15b82aacb07f9c09e28ff2275
- sha256: 3d65c081514569ab3642ba7e6c2a6b4615778b596db6b1c82ee30a2d912539e5
+ md5: e52c2ef711ccf31bb7f70ca87d144b9e
+ sha256: 5488542dceeb9f2874e726646548ecc5608060934d6f9ceaa7c6a48c61f9cc8d
category: main
optional: false
- name: zipp
- version: 3.19.2
+ version: 3.21.0
manager: conda
platform: linux-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.19.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda
hash:
- md5: 49808e59df5535116f6878b2a820d6f4
- sha256: e3e9c8501f581bfdc4700b83ea283395e237ec6b9b5cbfbedb556e1da6f4fdc9
- category: dev
- optional: true
+ md5: 0c3cc595284c5e8f0f9900a9b228a332
+ sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1
+ category: main
+ optional: false
- name: zipp
- version: 3.19.2
+ version: 3.21.0
manager: conda
platform: win-64
dependencies:
- python: '>=3.8'
- url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.19.2-pyhd8ed1ab_0.conda
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.21.0-pyhd8ed1ab_1.conda
hash:
- md5: 49808e59df5535116f6878b2a820d6f4
- sha256: e3e9c8501f581bfdc4700b83ea283395e237ec6b9b5cbfbedb556e1da6f4fdc9
- category: dev
- optional: true
+ md5: 0c3cc595284c5e8f0f9900a9b228a332
+ sha256: 567c04f124525c97a096b65769834b7acb047db24b15a56888a322bf3966c3e1
+ category: main
+ optional: false
- name: zstandard
version: 0.23.0
manager: conda
@@ -7568,14 +8279,14 @@ package:
dependencies:
__glibc: '>=2.17,<3.0.a0'
cffi: '>=1.11'
- libgcc-ng: '>=12'
+ libgcc: '>=13'
python: '>=3.10,<3.11.0a0'
python_abi: 3.10.*
zstd: '>=1.5.6,<1.6.0a0'
- url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310h64cae3c_0.conda
+ url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda
hash:
- md5: b527de1849629f2635dafc77745b015a
- sha256: de35f156899fc51bf28895989bd04a048849657ddd7a8baa29d09c4e254cd336
+ md5: f49de34fb99934bf49ab330b5caffd64
+ sha256: fcd784735205d6c5f19dcb339f92d2eede9bc42a01ec2c384381ee1b6089d4f6
category: main
optional: false
- name: zstandard
@@ -7590,10 +8301,10 @@ package:
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_0.conda
+ url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda
hash:
- md5: b2566258cb2785003ed52f08f98fb16f
- sha256: 9056ac084dfa12fba1d50352c68d3b9b9311d2741199cf75f94c25148431ab86
+ md5: 2a879227ccc1a10a2caddf12607ffaeb
+ sha256: 4e8aff4d0d42024e9f70783e51666186a681384d59fdd03fafda4b28f1fd540e
category: main
optional: false
- name: zstd
@@ -7626,160 +8337,160 @@ package:
category: main
optional: false
- name: geoapps-utils
- version: 0.3.0
+ version: 0.4.0rc1
manager: pip
platform: linux-64
dependencies:
- pillow: '>=10.3.0,<10.4.0'
- geoh5py: '>=0.9.0,<0.10.0'
- h5py: '>=3.2.1,<4.0.0'
- numpy: '>=1.23.5,<1.24.0'
- pydantic: '>=2.5.2,<2.6.0'
- scipy: '>=1.10.1,<1.11.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/geoapps-utils/0.3.0/geoapps_utils-0.3.0-py3-none-any.whl
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoapps-utils/0.4.0-rc.1/geoapps_utils-0.4.0rc1-py3-none-any.whl
hash:
- sha256: c5bc5169d35105a4d0bead9b43a4c115a45ec82852fc8b02700a2b8b28b31abc
+ sha256: 248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
category: main
optional: false
- name: geoapps-utils
- version: 0.3.0
+ version: 0.4.0rc1
manager: pip
platform: win-64
dependencies:
- pillow: '>=10.3.0,<10.4.0'
- geoh5py: '>=0.9.0,<0.10.0'
- h5py: '>=3.2.1,<4.0.0'
- numpy: '>=1.23.5,<1.24.0'
- pydantic: '>=2.5.2,<2.6.0'
- scipy: '>=1.10.1,<1.11.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/geoapps-utils/0.3.0/geoapps_utils-0.3.0-py3-none-any.whl
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoapps-utils/0.4.0-rc.1/geoapps_utils-0.4.0rc1-py3-none-any.whl
hash:
- sha256: c5bc5169d35105a4d0bead9b43a4c115a45ec82852fc8b02700a2b8b28b31abc
+ sha256: 248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
category: main
optional: false
- name: geoh5py
- version: 0.9.0
+ version: 0.10.0rc1
manager: pip
platform: linux-64
dependencies:
- pillow: '>=10.3.0,<10.4.0'
h5py: '>=3.2.1,<4.0.0'
- numpy: '>=1.23.5,<1.24.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/geoh5py/0.9.0/geoh5py-0.9.0-py3-none-any.whl
+ numpy: '>=1.26.0,<1.27.0'
+ pillow: '>=10.3.0,<10.4.0'
+ pydantic: '>=2.5.2,<3.0.0'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoh5py/0.10.0-rc.1/geoh5py-0.10.0rc1-py3-none-any.whl
hash:
- sha256: dd2d16a9ed409f4bad13e165d1ad81641e3be941ba35c6c6a66a8ed4950271f7
+ sha256: 50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
category: main
optional: false
- name: geoh5py
- version: 0.9.0
+ version: 0.10.0rc1
manager: pip
platform: win-64
dependencies:
- pillow: '>=10.3.0,<10.4.0'
h5py: '>=3.2.1,<4.0.0'
- numpy: '>=1.23.5,<1.24.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/geoh5py/0.9.0/geoh5py-0.9.0-py3-none-any.whl
+ numpy: '>=1.26.0,<1.27.0'
+ pillow: '>=10.3.0,<10.4.0'
+ pydantic: '>=2.5.2,<3.0.0'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoh5py/0.10.0-rc.1/geoh5py-0.10.0rc1-py3-none-any.whl
hash:
- sha256: dd2d16a9ed409f4bad13e165d1ad81641e3be941ba35c6c6a66a8ed4950271f7
+ sha256: 50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
category: main
optional: false
- name: mira-simpeg
- version: 0.19.0.8
+ version: 0.21.2.1rc1
manager: pip
platform: linux-64
dependencies:
- discretize: '>=0.8.0'
+ dask: '*'
+ discretize: '>=0.10.0'
+ distributed: '*'
empymod: '>=2.0.0'
- geoana: '*'
- geoh5py: '*'
+ fsspec: '>=0.3.3'
+ geoana: '>=0.5.0'
+ geoh5py: '>=0.10.0-alpha.1,<0.11'
matplotlib: '*'
numpy: '>=1.20'
pandas: '*'
- pymatsolver: '>=0.2'
+ pymatsolver: '>=0.2,<0.3.0'
scikit-learn: '>=1.2'
scipy: '>=1.8.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/Mira-SimPEG/0.19.0.8/mira_simpeg-0.19.0.8-py2.py3-none-any.whl
+ zarr: '*'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/packages/packages/82/e7/5648143ed4aa1248b406f6596cd1aee8ab3c29df95813c96a22757f83b36/mira_simpeg-0.21.2.1rc1-py3-none-any.whl
hash:
- sha256: af1b216d4126bc0b9668c395842d6203c06e5720a3e3395e78de34cc19f09841
+ sha256: c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
category: main
optional: false
- name: mira-simpeg
- version: 0.19.0.8
+ version: 0.21.2.1rc1
manager: pip
platform: win-64
dependencies:
- discretize: '>=0.8.0'
+ dask: '*'
+ discretize: '>=0.10.0'
+ distributed: '*'
empymod: '>=2.0.0'
- geoana: '*'
- geoh5py: '*'
+ fsspec: '>=0.3.3'
+ geoana: '>=0.5.0'
+ geoh5py: '>=0.10.0-alpha.1,<0.11'
matplotlib: '*'
numpy: '>=1.20'
pandas: '*'
- pymatsolver: '>=0.2'
+ pymatsolver: '>=0.2,<0.3.0'
scikit-learn: '>=1.2'
scipy: '>=1.8.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/Mira-SimPEG/0.19.0.8/mira_simpeg-0.19.0.8-py2.py3-none-any.whl
+ zarr: '*'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/packages/packages/82/e7/5648143ed4aa1248b406f6596cd1aee8ab3c29df95813c96a22757f83b36/mira_simpeg-0.21.2.1rc1-py3-none-any.whl
hash:
- sha256: af1b216d4126bc0b9668c395842d6203c06e5720a3e3395e78de34cc19f09841
+ sha256: c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
category: main
optional: false
- name: octree-creation-app
- version: 0.1.1
+ version: 0.2.0rc1
manager: pip
platform: linux-64
dependencies:
- pillow: '>=10.3.0,<10.4.0'
- discretize: '>=0.10.0,<0.11.0'
- geoapps-utils: '>=0.3.0,<0.4.0'
- geoh5py: '>=0.9.0,<0.10.0'
- h5py: '>=3.2.1,<4.0.0'
- numpy: '>=1.23.5,<1.24.0'
- pydantic: '>=2.5.2,<2.6.0'
- scipy: '>=1.10.1,<1.11.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/octree-creation-app/0.1.1/octree_creation_app-0.1.1-py3-none-any.whl
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/octree-creation-app/0.2.0-rc.1/octree_creation_app-0.2.0rc1-py3-none-any.whl
hash:
- sha256: 0a3c93b029e63df520b91d3aca29a40f7839cb8a152bf99e87b177573198a15f
+ sha256: ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
category: main
optional: false
- name: octree-creation-app
- version: 0.1.1
+ version: 0.2.0rc1
manager: pip
platform: win-64
dependencies:
- pillow: '>=10.3.0,<10.4.0'
- discretize: '>=0.10.0,<0.11.0'
- geoapps-utils: '>=0.3.0,<0.4.0'
- geoh5py: '>=0.9.0,<0.10.0'
- h5py: '>=3.2.1,<4.0.0'
- numpy: '>=1.23.5,<1.24.0'
- pydantic: '>=2.5.2,<2.6.0'
- scipy: '>=1.10.1,<1.11.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/octree-creation-app/0.1.1/octree_creation_app-0.1.1-py3-none-any.whl
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/octree-creation-app/0.2.0-rc.1/octree_creation_app-0.2.0rc1-py3-none-any.whl
hash:
- sha256: 0a3c93b029e63df520b91d3aca29a40f7839cb8a152bf99e87b177573198a15f
+ sha256: ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
category: main
optional: false
- name: param-sweeps
- version: 0.1.8
+ version: 0.2.0rc1
manager: pip
platform: linux-64
dependencies:
- geoh5py: '>=0.9.0,<0.10.0'
- numpy: '>=1.23.5,<1.24.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/param-sweeps/0.1.8/param_sweeps-0.1.8-py3-none-any.whl
+ geoh5py: '>=0.10.0b1,<0.11.0a.dev'
+ numpy: '>=1.26.0,<1.27.0'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/param-sweeps/0.2.0-rc.1/param_sweeps-0.2.0rc1-py3-none-any.whl
hash:
- sha256: ea43e35f1e88933352adb193a5adf49b71188891dfb6224589cfa88b4422d5d7
+ sha256: 0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
category: main
optional: false
- name: param-sweeps
- version: 0.1.8
+ version: 0.2.0rc1
manager: pip
platform: win-64
dependencies:
- geoh5py: '>=0.9.0,<0.10.0'
- numpy: '>=1.23.5,<1.24.0'
- url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/analyst-pypi-local/param-sweeps/0.1.8/param_sweeps-0.1.8-py3-none-any.whl
+ geoh5py: '>=0.10.0b1,<0.11.0a.dev'
+ numpy: '>=1.26.0,<1.27.0'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/param-sweeps/0.2.0-rc.1/param_sweeps-0.2.0rc1-py3-none-any.whl
hash:
- sha256: ea43e35f1e88933352adb193a5adf49b71188891dfb6224589cfa88b4422d5d7
+ sha256: 0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
category: main
optional: false
diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml
new file mode 100644
index 00000000..dde57a07
--- /dev/null
+++ b/py-3.11.conda-lock.yml
@@ -0,0 +1,8523 @@
+# 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.11.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.11.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.11.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.11.yml --lockfile py-3.11.conda-lock.yml
+version: 1
+metadata:
+ content_hash:
+ win-64: 1f408dede137845ecfd9697ee5aa5178e999050353f3ec77e0b568556a08e3f3
+ linux-64: 9c3e25825af8abcb842ba2f79959145635a430c75e68f1f6da8e4712ccea421f
+ channels:
+ - url: conda-forge
+ used_env_vars: []
+ - url: nodefaults
+ used_env_vars: []
+ platforms:
+ - win-64
+ - linux-64
+ sources:
+ - pyproject.toml
+ - environments/env-python-3.11.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: 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: 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py311h9ecbd09_5.conda
+ hash:
+ md5: 18143eab7fcd6662c604b85850f0db1e
+ sha256: d1af1fbcb698c2e07b0d1d2b98384dd6021fa55c8bcb920e3652e0b0c393881b
+ category: dev
+ optional: true
+- name: argon2-cffi-bindings
+ version: 21.2.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ cffi: '>=1.0.1'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_5.conda
+ hash:
+ md5: 8917bf795c40ec1839ed9d0ab3ad9735
+ sha256: 8bbce5e61e012a06e248f58bb675fdc82ba2900c78590696d185150fb9cea91f
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ 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: 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/astroid-3.3.8-py311h38be061_0.conda
+ hash:
+ md5: 1d40246388ce17d0ada77a5da37d72d8
+ sha256: f99e14e537e4d5a57275b788c2ac5ef19b7c2b00f706ab5262d27a5d5f85471e
+ category: dev
+ optional: true
+- name: astroid
+ version: 3.3.8
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/win-64/astroid-3.3.8-py311h1ea47a8_0.conda
+ hash:
+ md5: 1eb65d33ea4f51068bb40220d65c2f33
+ sha256: 47921cda617bf75c9005ba3f2844c46ceeb7beff37dc256a1c77e9bd00b6e2cd
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: attrs
+ version: 24.3.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda
+ hash:
+ md5: 356927ace43302bf6f5926e2a58dae6a
+ sha256: 750186af694a7130eaf7119fbb56db0d2326d8995ad5b8eae23c622b85fea29a
+ category: dev
+ optional: true
+- name: attrs
+ version: 24.3.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.3.0-pyh71513ae_0.conda
+ hash:
+ md5: 356927ace43302bf6f5926e2a58dae6a
+ sha256: 750186af694a7130eaf7119fbb56db0d2326d8995ad5b8eae23c622b85fea29a
+ category: dev
+ optional: true
+- name: babel
+ version: 2.16.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ pytz: '>=2015.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 3e23f7db93ec14c80525257d8affac28
+ sha256: f6205d3a62e87447e06e98d911559be0208d824976d77ab092796c9176611fcb
+ category: dev
+ optional: true
+- name: babel
+ version: 2.16.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ pytz: '>=2015.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/babel-2.16.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 3e23f7db93ec14c80525257d8affac28
+ sha256: f6205d3a62e87447e06e98d911559be0208d824976d77ab092796c9176611fcb
+ category: dev
+ optional: true
+- name: beautifulsoup4
+ version: 4.12.3
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ soupsieve: '>=1.2'
+ url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda
+ hash:
+ md5: d48f7e9fdec44baf6d1da416fe402b04
+ sha256: fca842ab7be052eea1037ebee17ac25cc79c626382dd2187b5c6e007b9d9f65f
+ category: dev
+ optional: true
+- name: beautifulsoup4
+ version: 4.12.3
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ soupsieve: '>=1.2'
+ url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_1.conda
+ hash:
+ md5: d48f7e9fdec44baf6d1da416fe402b04
+ sha256: fca842ab7be052eea1037ebee17ac25cc79c626382dd2187b5c6e007b9d9f65f
+ category: dev
+ optional: true
+- name: bleach
+ version: 6.2.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ webencodings: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.2.0-pyhd8ed1ab_3.conda
+ hash:
+ md5: b33551d9bac06d754762e8ccb3c4df03
+ sha256: 9278622f54b6b4bce5d73663b282a8ab35d1b331d6ff92f4112906a526039827
+ category: dev
+ optional: true
+- 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-pyhd8ed1ab_3.conda
+ hash:
+ md5: b33551d9bac06d754762e8ccb3c4df03
+ sha256: 9278622f54b6b4bce5d73663b282a8ab35d1b331d6ff92f4112906a526039827
+ category: dev
+ optional: true
+- 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-hd8ed1ab_3.conda
+ hash:
+ md5: e250a492fc70bf604737328dbe02846c
+ sha256: 8161cf35253f7646a1fd39f90abbcc6cb69248b8fdff61cfffce4cc8448f8c02
+ category: dev
+ optional: true
+- 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-hd8ed1ab_3.conda
+ hash:
+ md5: e250a492fc70bf604737328dbe02846c
+ sha256: 8161cf35253f7646a1fd39f90abbcc6cb69248b8fdff61cfffce4cc8448f8c02
+ category: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hfdbb021_2.conda
+ hash:
+ md5: d21daab070d76490cb39a8f1d1729d79
+ sha256: 949913bbd1f74d1af202d3e4bff2e0a4e792ec00271dc4dd08641d4221aa2e12
+ category: main
+ optional: false
+- name: brotli-python
+ version: 1.1.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311hda3d55a_2.conda
+ hash:
+ md5: a0ea2839841a06740a1c110ba3317b42
+ sha256: aa3ac5dbf63db2f145235708973c626c2189ee4040d769fdf0076286fa45dc26
+ 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: ca-certificates
+ version: 2024.12.14
+ manager: conda
+ platform: linux-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.12.14-hbcca054_0.conda
+ hash:
+ md5: 720523eb0d6a9b0f6120c16b2aa4e7de
+ sha256: 1afd7274cbc9a334d6d0bc62fa760acc7afdaceb0b91a8df370ec01fd75dc7dd
+ category: main
+ optional: false
+- name: ca-certificates
+ version: 2024.12.14
+ manager: conda
+ platform: win-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.12.14-h56e8100_0.conda
+ hash:
+ md5: cb2eaeb88549ddb27af533eccf9a45c1
+ sha256: 424d82db36cd26234bc4772426170efd60e888c2aed0099a257a95e131683a5e
+ 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: certifi
+ version: 2024.12.14
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda
+ hash:
+ md5: 6feb87357ecd66733be3279f16a8c400
+ sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad
+ category: main
+ optional: false
+- name: certifi
+ version: 2024.12.14
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.12.14-pyhd8ed1ab_0.conda
+ hash:
+ md5: 6feb87357ecd66733be3279f16a8c400
+ sha256: 048c16a9cbcb1fbad02083414d3bc7c1d0eea4b39aee6aa6bf8d1d5089ca8bad
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py311hf29c0ef_0.conda
+ hash:
+ md5: 55553ecd5328336368db611f350b7039
+ sha256: bc47aa39c8254e9e487b8bcd74cfa3b4a3de3648869eb1a0b89905986b668e35
+ category: main
+ optional: false
+- name: cffi
+ version: 1.17.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ pycparser: ''
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_0.conda
+ hash:
+ md5: e1c69be23bd05471a6c623e91680ad59
+ sha256: 9689fbd8a31fdf273f826601e90146006f6631619767a67955048c7ad7798a1d
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: cloudpickle
+ version: 3.1.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda
+ hash:
+ md5: 1f76b7e2b3ab88def5aa2f158322c7e6
+ sha256: 918151ad25558a37721055a02c0357ce9a2f51f07da1b238608e48ef17d35260
+ category: main
+ optional: false
+- name: cloudpickle
+ version: 3.1.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.0-pyhd8ed1ab_2.conda
+ hash:
+ md5: 1f76b7e2b3ab88def5aa2f158322c7e6
+ sha256: 918151ad25558a37721055a02c0357ce9a2f51f07da1b238608e48ef17d35260
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.1-py311hd18a35c_0.conda
+ hash:
+ md5: 351cb68d2081e249069748b6e60b3cd2
+ sha256: 08be6120dc9369f07858677dde2a8474644cc7ec2ae146b39a6953aadc536dfd
+ category: main
+ optional: false
+- name: contourpy
+ version: 1.3.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ numpy: '>=1.23'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h3257749_0.conda
+ hash:
+ md5: 91d8504588e1b3c77e605503e5a1bc11
+ sha256: dbb0c161dd75e72e66c13f31715941adb094a45471016f89d6a1cfab30967ba8
+ category: main
+ optional: false
+- name: coverage
+ version: 7.6.10
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ tomli: ''
+ url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.10-py311h2dc5d0c_0.conda
+ hash:
+ md5: 2a772b30e69ba8319651e9f3ab01608f
+ sha256: c5782231c9255f0492728bfb74ebcddf2dd8f5561d4f792d9d186d9d360242b8
+ category: dev
+ optional: true
+- name: coverage
+ version: 7.6.10
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.10-py311h5082efb_0.conda
+ hash:
+ md5: b985c39f9a9e62e2c16cd71e3832968a
+ sha256: f634fc561dc5969bf1614c724d5961804fb213100c08a9fad5aa543e51995daf
+ category: dev
+ optional: true
+- name: cpython
+ version: 3.11.11
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: 3.11.11.*
+ python_abi: '*'
+ url: https://conda.anaconda.org/conda-forge/noarch/cpython-3.11.11-py311hd8ed1ab_1.conda
+ hash:
+ md5: 6aab9c45010dc5ed92215f89cdafa201
+ sha256: b9bb4486ba7b81d7264e92f346c9fa2d4a6c9678c28b33fb5d1652ecc7f82e26
+ category: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ toolz: '>=0.10.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/cytoolz-1.0.1-py311h9ecbd09_0.conda
+ hash:
+ md5: 69a0a85acdcc5e6d0f1cc915c067ad4c
+ sha256: fd5a8c7e613c3c538ca775951fd814ab10cfcdaed79e193c3bf7eb59c87cd114
+ category: main
+ optional: false
+- name: cytoolz
+ version: 1.0.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_0.conda
+ hash:
+ md5: fc78ccf75bba016a930accedee7ed9af
+ sha256: 7746ffe3a0849abbd724da6955950142ec7eedbc66053be8d3802b7885562951
+ 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: debugpy
+ version: 1.8.11
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libstdcxx: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.11-py311hfdbb021_0.conda
+ hash:
+ md5: 7243087876dfd44a22d62e01cc0a3551
+ sha256: 4b9f89967fdb6a97ad946746f1852083ad49a50327818bd558d7d37084217590
+ category: dev
+ optional: true
+- name: debugpy
+ version: 1.8.11
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.11-py311hda3d55a_0.conda
+ hash:
+ md5: d9fa2f0451b21409364946424896a14d
+ sha256: b4a4b2d6d40e681353d84669e861c369e3d9eca3cb6fdf0a50277f4702c42ba9
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ 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: dev
+ 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: dev
+ optional: true
+- 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.23.5,<2.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ scipy: '>=1.8'
+ url: https://conda.anaconda.org/conda-forge/linux-64/discretize-0.10.0-py311h92ebd52_1.conda
+ hash:
+ md5: 3d1d8f6df4a2427245c2a445669ed08a
+ sha256: 0742f151160f7c5a9fbb9edfadd492ae2b3f85c2e4032942c660c87ccf23192f
+ category: main
+ optional: false
+- name: discretize
+ version: 0.10.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ numpy: '>=1.23.5,<2.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h12feb9d_1.conda
+ hash:
+ md5: ad0c71d1e3af6c3459045205abc165c8
+ sha256: 4abbbfabbc30bca363f6ce84bab881df07c95542dd5a82ba4b7c351509d0e66b
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2
+ hash:
+ md5: 599159b0740e9b82e7eef0e8471be3c2
+ sha256: ec7760e5a1d065b97ac32d12f7c70f19937040d8bb52a9f16573b65c6832c67a
+ category: dev
+ optional: true
+- name: docutils
+ version: '0.19'
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/win-64/docutils-0.19-py311h1ea47a8_1.tar.bz2
+ hash:
+ md5: 52b2142036004451e1881d97e9d01e8a
+ sha256: 40c678c6bda27aeb7ad8b1714f189201599d2068a0fa75087548b62f8afe9bc7
+ 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: entrypoints
+ version: '0.4'
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_1.conda
+ hash:
+ md5: 3366592d3c219f2731721f11bc93755c
+ sha256: 80f579bfc71b3dab5bef74114b89e26c85cb0df8caf4c27ab5ffc16363d57ee7
+ category: dev
+ optional: true
+- name: entrypoints
+ version: '0.4'
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_1.conda
+ hash:
+ md5: 3366592d3c219f2731721f11bc93755c
+ sha256: 80f579bfc71b3dab5bef74114b89e26c85cb0df8caf4c27ab5ffc16363d57ee7
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: fonttools
+ version: 4.55.3
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ brotli: ''
+ libgcc: '>=13'
+ munkres: ''
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ unicodedata2: '>=15.1.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.55.3-py311h2dc5d0c_1.conda
+ hash:
+ md5: 04c0b385767445be8aefe0d4915cb747
+ sha256: d2dc8eb7c73b3329c3739ae6929c0ccb40d67a4dc4c28f1250470bafb677945f
+ category: main
+ optional: false
+- name: fonttools
+ version: 4.55.3
+ manager: conda
+ platform: win-64
+ dependencies:
+ brotli: ''
+ munkres: ''
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.55.3-py311h5082efb_1.conda
+ hash:
+ md5: 1597829d4aea8efcb2b21370871419dc
+ sha256: 0c7e206817341e55d2f9ca13678b898bc81b50336b734174ca76834b59347b02
+ 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: dev
+ optional: true
+- 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: dev
+ 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,<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: 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: geoana
+ version: 0.5.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ libdlf: ''
+ libgcc-ng: '>=12'
+ libstdcxx-ng: '>=12'
+ numpy: '>=1.23.5,<2.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ scipy: '>=1.8'
+ url: https://conda.anaconda.org/conda-forge/linux-64/geoana-0.5.0-py311h92ebd52_4.conda
+ hash:
+ md5: 436962f920296acc1dccc84d65e37433
+ sha256: 789d033046beb092d863a0a4b95efa1e87aed8f0c86c843ec1578c25195a8c0d
+ category: main
+ optional: false
+- name: geoana
+ version: 0.5.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ libdlf: ''
+ numpy: '>=1.23.5,<2.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h12feb9d_4.conda
+ hash:
+ md5: 00845544f7e49ff148524b0ad4cef325
+ sha256: 6f263952b14e3ca5e3d65a47e48933b6e61785ce1d917c72baeff9b9c53492b1
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.1.1-py311hfdbb021_1.conda
+ hash:
+ md5: d44da5fc47328530ad83e190af89576f
+ sha256: 81685173a05dcd21d57da4c137eb30643414034aba98a8cec31089b9e53e3413
+ category: dev
+ optional: true
+- name: greenlet
+ version: 3.1.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311hda3d55a_1.conda
+ hash:
+ md5: 10ae3cceddca1ffd13bef4f375245c6c
+ sha256: c4afef96bcd70bdef9ee2d8330f2a8c2f3e3d12f4a2100319aa130e0ac9667be
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: h2
+ version: 4.1.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ hpack: '>=4.0,<5'
+ hyperframe: '>=6.0,<7'
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 825927dc7b0f287ef8d4d0011bb113b1
+ sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c
+ category: main
+ optional: false
+- name: h2
+ version: 4.1.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ hpack: '>=4.0,<5'
+ hyperframe: '>=6.0,<7'
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 825927dc7b0f287ef8d4d0011bb113b1
+ sha256: 843ddad410c370672a8250470697027618f104153612439076d4d7b91eeb7b5c
+ category: main
+ optional: false
+- name: h5py
+ version: 3.12.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ cached-property: ''
+ hdf5: '>=1.14.4,<1.14.5.0a0'
+ libgcc: '>=13'
+ numpy: '>=1.19,<3'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/h5py-3.12.1-nompi_py311h5ed33ec_103.conda
+ hash:
+ md5: 6926bba026ef161a44a4f43e76595820
+ sha256: 0ca66916ea090a57fa57e52f14acbbb085c49f54ab9343feb577532b51f8deb9
+ category: main
+ optional: false
+- name: h5py
+ version: 3.12.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ cached-property: ''
+ hdf5: '>=1.14.4,<1.14.5.0a0'
+ numpy: '>=1.19,<3'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.12.1-nompi_py311haea1c80_103.conda
+ hash:
+ md5: 124374ec9884c331890d9c9483277eaa
+ sha256: 941b85e23a079c9587571acb3cbbc418f5ddff2f06ab7d87006ae9aeace640dc
+ category: main
+ optional: false
+- name: hdf5
+ version: 1.14.4
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libaec: '>=1.1.3,<2.0a0'
+ libcurl: '>=8.10.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.4-nompi_h2d575fe_105.conda
+ hash:
+ md5: d76fff0092b6389a12134ddebc0929bd
+ sha256: 93d2bfc672f3ee0988d277ce463330a467f3686d3f7ee37812a3d8ca11776d77
+ category: main
+ optional: false
+- name: hdf5
+ version: 1.14.4
+ manager: conda
+ platform: win-64
+ dependencies:
+ libaec: '>=1.1.3,<2.0a0'
+ libcurl: '>=8.10.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.4-nompi_hd5d9e70_105.conda
+ hash:
+ md5: 4381be33460283890c34341ecfa42d97
+ sha256: e8ced65c604a3b9e4803758a25149d71d8096f186fe876817a0d1d97190550c0
+ category: main
+ optional: false
+- name: hpack
+ version: 4.0.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 2aa5ff7fa34a81b9196532c84c10d865
+ sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5
+ category: main
+ optional: false
+- name: hpack
+ version: 4.0.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyhd8ed1ab_1.conda
+ hash:
+ md5: 2aa5ff7fa34a81b9196532c84c10d865
+ sha256: ec89b7e5b8aa2f0219f666084446e1fb7b54545861e9caa892acb24d125761b5
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: hyperframe
+ version: 6.0.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda
+ hash:
+ md5: 566e75c90c1d0c8c459eb0ad9833dc7a
+ sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b
+ category: main
+ optional: false
+- name: hyperframe
+ version: 6.0.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_1.conda
+ hash:
+ md5: 566e75c90c1d0c8c459eb0ad9833dc7a
+ sha256: e91c6ef09d076e1d9a02819cd00fa7ee18ecf30cdd667605c853980216584d1b
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.5.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ zipp: '>=0.5'
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda
+ hash:
+ md5: 315607a3030ad5d5227e76e0733798ff
+ sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9
+ category: main
+ optional: false
+- name: importlib-metadata
+ version: 8.5.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ zipp: '>=0.5'
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_1.conda
+ hash:
+ md5: 315607a3030ad5d5227e76e0733798ff
+ sha256: 13766b88fc5b23581530d3a0287c0c58ad82f60401afefab283bf158d2be55a9
+ category: main
+ optional: false
+- name: importlib_metadata
+ version: 8.5.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ importlib-metadata: '>=8.5.0,<8.5.1.0a0'
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_1.conda
+ hash:
+ md5: c70dd0718dbccdcc6d5828de3e71399d
+ sha256: 204fc7f02be8acda93073f5126b9707b8847b673d4c6558db208973c92f9af3c
+ category: main
+ optional: false
+- name: importlib_metadata
+ version: 8.5.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ importlib-metadata: '>=8.5.0,<8.5.1.0a0'
+ url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_1.conda
+ hash:
+ md5: c70dd0718dbccdcc6d5828de3e71399d
+ sha256: 204fc7f02be8acda93073f5126b9707b8847b673d4c6558db208973c92f9af3c
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: ipython
+ version: 8.31.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: '>=3.10'
+ stack_data: ''
+ traitlets: '>=5.13.0'
+ typing_extensions: '>=4.6'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.31.0-pyh707e725_0.conda
+ hash:
+ md5: 1d7fcd803dfa936a6c3bd051b293241c
+ sha256: e10d1172ebf950f8f087f0d9310d215f5ddb8f3ad247bfa58ab5a909b3cabbdc
+ category: dev
+ optional: true
+- name: ipython
+ version: 8.31.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.31.0-pyh7428d3b_0.conda
+ hash:
+ md5: 749ce640fcb691daa2579344cca50f6e
+ sha256: bce70d36099dbb2c0a4b9cb7c3f2a8742db94a63aea329a75688d6b93ae07ebb
+ category: dev
+ optional: true
+- name: ipython_genutils
+ version: 0.2.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_2.conda
+ hash:
+ md5: 2f0ba4bc12af346bc6c99bdc377e8944
+ sha256: 45821a8986b4cb2421f766b240dbe6998a3c3123f012dd566720c1322e9b6e18
+ category: dev
+ optional: true
+- name: ipython_genutils
+ version: 0.2.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipython_genutils-0.2.0-pyhd8ed1ab_2.conda
+ hash:
+ md5: 2f0ba4bc12af346bc6c99bdc377e8944
+ sha256: 45821a8986b4cb2421f766b240dbe6998a3c3123f012dd566720c1322e9b6e18
+ category: dev
+ optional: true
+- name: ipywidgets
+ version: 7.8.5
+ 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.10,<3.7.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.5-pyhd8ed1ab_0.conda
+ hash:
+ md5: 47672c493015ab57d5fcde9531ab18ef
+ sha256: 8cc67e44137bb779c76d92952fdc4d8cd475605f4f0d13e8d0f04f25c056939b
+ category: dev
+ optional: true
+- name: ipywidgets
+ version: 7.8.5
+ manager: conda
+ platform: win-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.10,<3.7.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-7.8.5-pyhd8ed1ab_0.conda
+ hash:
+ md5: 47672c493015ab57d5fcde9531ab18ef
+ sha256: 8cc67e44137bb779c76d92952fdc4d8cd475605f4f0d13e8d0f04f25c056939b
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: isort
+ version: 5.13.2
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9,<4.0'
+ setuptools: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda
+ hash:
+ md5: ef7dc847f19fe4859d5aaa33385bf509
+ sha256: 6ebf6e83c2d449760ad5c5cc344711d6404f9e3cf6952811b8678aca5a4ab01f
+ category: dev
+ optional: true
+- name: isort
+ version: 5.13.2
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9,<4.0'
+ setuptools: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_1.conda
+ hash:
+ md5: ef7dc847f19fe4859d5aaa33385bf509
+ sha256: 6ebf6e83c2d449760ad5c5cc344711d6404f9e3cf6952811b8678aca5a4ab01f
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: jsonpointer
+ version: 3.0.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py311h38be061_1.conda
+ hash:
+ md5: 5ca76f61b00a15a9be0612d4d883badc
+ sha256: 2f082f7b12a7c6824e051321c1029452562ad6d496ad2e8c8b7b3dea1c8feb92
+ category: dev
+ optional: true
+- name: jsonpointer
+ version: 3.0.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/win-64/jsonpointer-3.0.0-py311h1ea47a8_1.conda
+ hash:
+ md5: 943f7fab631e12750641efd7279a268c
+ sha256: 9a667eeae67936e710ff69ee7ce0e784d6052eeba9670b268c565a55178098c4
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: jupyter_events
+ version: 0.11.0
+ manager: conda
+ platform: linux-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.11.0-pyhd8ed1ab_0.conda
+ hash:
+ md5: 2d8876ca6bda213622dfbc3d1da56ecb
+ sha256: eeb32aa58d37b130387628d5c151092f6d3fcf0a6964294bef06d6bac117f3c4
+ category: dev
+ optional: true
+- name: jupyter_events
+ version: 0.11.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.11.0-pyhd8ed1ab_0.conda
+ hash:
+ md5: 2d8876ca6bda213622dfbc3d1da56ecb
+ sha256: eeb32aa58d37b130387628d5c151092f6d3fcf0a6964294bef06d6bac117f3c4
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: jupyterlab
+ version: 4.3.4
+ 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.4-pyhd8ed1ab_0.conda
+ hash:
+ md5: edc13687180382b4444d9f143a2e1ef7
+ sha256: bcf9fc0ea4bd6cf06a7a23b7f8b7bb7d8520eea8d0cdd6d3b975ede7793ed69b
+ category: dev
+ optional: true
+- name: jupyterlab
+ version: 4.3.4
+ 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.4-pyhd8ed1ab_0.conda
+ hash:
+ md5: edc13687180382b4444d9f143a2e1ef7
+ sha256: bcf9fc0ea4bd6cf06a7a23b7f8b7bb7d8520eea8d0cdd6d3b975ede7793ed69b
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: jupyterlab_widgets
+ version: 1.1.11
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.11-pyhd8ed1ab_0.conda
+ hash:
+ md5: 05a08b368343304618b6a88425aa851a
+ sha256: 639544e96969c7513b33bf3201a4dc3095625e34cff16c187f5dec9bee2dfb2f
+ category: dev
+ optional: true
+- name: jupyterlab_widgets
+ version: 1.1.11
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-1.1.11-pyhd8ed1ab_0.conda
+ hash:
+ md5: 05a08b368343304618b6a88425aa851a
+ sha256: 639544e96969c7513b33bf3201a4dc3095625e34cff16c187f5dec9bee2dfb2f
+ category: dev
+ optional: true
+- name: jupytext
+ version: 1.16.6
+ 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.6-pyh80e38bb_0.conda
+ hash:
+ md5: f25972a8da0a44826594059a1bb4d82a
+ sha256: 8704b9547bf444b737f9ff6b9a8855e7ab0b83f2cee58dd913dfd7600a906b78
+ category: dev
+ optional: true
+- name: jupytext
+ version: 1.16.6
+ 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.6-pyh80e38bb_0.conda
+ hash:
+ md5: f25972a8da0a44826594059a1bb4d82a
+ sha256: 8704b9547bf444b737f9ff6b9a8855e7ab0b83f2cee58dd913dfd7600a906b78
+ category: dev
+ 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.7
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libstdcxx: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.7-py311hd18a35c_0.conda
+ hash:
+ md5: be34c90cce87090d24da64a7c239ca96
+ sha256: 4af11cbc063096a284fe1689b33424e7e49732a27fd396d74c7dee03d1e788ee
+ category: main
+ optional: false
+- name: kiwisolver
+ version: 1.4.7
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h3257749_0.conda
+ hash:
+ md5: 18fd1ac3d79a8d6550eaea5ceaa00036
+ sha256: a2079e13d1345a5dd61df6be933e828e805051256e7260009ba93fce55aebd75
+ 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: 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: 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: 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: 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: 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: libcurl
+ version: 8.11.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.0,<4.0a0'
+ zstd: '>=1.5.6,<1.6.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.11.1-h332b0f4_0.conda
+ hash:
+ md5: 2b3e0081006dc21e8bf53a91c83a055c
+ sha256: 3cd4075b2a7b5562e46c8ec626f6f9ca57aeecaa94ff7df57eca26daa94c9906
+ category: main
+ optional: false
+- name: libcurl
+ version: 8.11.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.11.1-h88aaa65_0.conda
+ hash:
+ md5: 071d3f18dba5a6a13c6bb70cdb42678f
+ sha256: 1a67f01da0e35296c6d1fdf6baddc45ad3cc2114132ff4638052eb7cf258aab2
+ category: main
+ optional: false
+- name: libdeflate
+ version: '1.23'
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.23-h4ddbbb0_0.conda
+ hash:
+ md5: 8dfae1d2e74767e9ce36d5fa0d8605db
+ sha256: 511d801626d02f4247a04fff957cc6e9ec4cc7e8622bd9acd076bcdc5de5fe66
+ category: main
+ optional: false
+- name: libdeflate
+ version: '1.23'
+ 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.23-h9062f6e_0.conda
+ hash:
+ md5: a9624935147a25b06013099d3038e467
+ sha256: 96c47725a8258159295996ea2758fa0ff9bea330e72b59641642e16be8427ce8
+ 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.20240808
+ 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.20240808-pl5321h7949ede_0.conda
+ hash:
+ md5: 8247f80f3dc464d9322e85007e307fe8
+ sha256: 4d0d69ddf9cc7d724a1ccf3a9852e44c8aea9825692582bac2c4e8d21ec95ccd
+ 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: 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.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: 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: 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-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: 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: 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: libhwloc
+ version: 2.11.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc-ng: '>=12'
+ libstdcxx-ng: '>=12'
+ libxml2: '>=2.12.7,<3.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.11.1-default_hecaa2ac_1000.conda
+ hash:
+ md5: f54aeebefb5c5ff84eca4fb05ca8aa3a
+ sha256: 8473a300e10b79557ce0ac81602506b47146aff3df4cc3568147a7dd07f480a2
+ category: main
+ optional: false
+- name: libhwloc
+ version: 2.11.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ libxml2: '>=2.12.7,<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.11.1-default_h8125262_1000.conda
+ hash:
+ md5: 933bad6e4658157f1aec9b171374fde2
+ sha256: 92728e292640186759d6dddae3334a1bc0b139740b736ffaeccb825fb8c07a2e
+ 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: 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: 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: 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: libllvm14
+ version: 14.0.6
+ manager: conda
+ platform: linux-64
+ dependencies:
+ libgcc-ng: '>=12'
+ libstdcxx-ng: '>=12'
+ libzlib: '>=1.2.13,<2.0.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda
+ hash:
+ md5: 73301c133ded2bf71906aa2104edae8b
+ sha256: 225cc7c3b20ac1db1bdb37fa18c95bf8aecef4388e984ab2f7540a9f4382106a
+ category: main
+ optional: false
+- name: liblzma
+ version: 5.6.3
+ 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.3-hb9d3cd8_1.conda
+ hash:
+ md5: 2ecf2f1c7e4e21fcfe6423a51a992d84
+ sha256: e6e425252f3839e2756e4af1ea2074dffd3396c161bf460629f9dfd6a65f15c6
+ category: main
+ optional: false
+- name: liblzma
+ version: 5.6.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/liblzma-5.6.3-h2466b09_1.conda
+ hash:
+ md5: 015b9c0bd1eef60729ab577a38aaf0b5
+ sha256: 24d04bd55adfa44c421c99ce169df38cb1ad2bba5f43151bc847fc802496a1fa
+ 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: libpng
+ version: 1.6.45
+ 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.45-h943b412_0.conda
+ hash:
+ md5: 85cbdaacad93808395ac295b5667d25b
+ sha256: b8f5b5ba9a14dedf7c97c01300de492b1b52b68eacbc3249a13fdbfa82349a2f
+ category: main
+ optional: false
+- name: libpng
+ version: 1.6.45
+ 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.45-had7236b_0.conda
+ hash:
+ md5: 41fb9e522ec6e0b34a6f23c98b07e1cf
+ sha256: e39c4f1bc8fee08f6a2eb4a88174d14c3a99dbb4850c98f3a87eb83b4dabbfca
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: libsqlite
+ version: 3.47.2
+ 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.47.2-hee588c1_0.conda
+ hash:
+ md5: b58da17db24b6e08bcbf8fed2fb8c915
+ sha256: 48af21ebc2cbf358976f1e0f4a0ab9e91dfc83d0ef337cf3837c6f5bc22fb352
+ category: main
+ optional: false
+- name: libsqlite
+ version: 3.47.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/libsqlite-3.47.2-h67fdade_0.conda
+ hash:
+ md5: ff00095330e0d35a16bd3bdbd1a2d3e7
+ sha256: ecfc0182c3b2e63c870581be1fa0e4dbdfec70d2011cb4f5bde416ece26c41df
+ 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: libtiff
+ version: 4.7.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ lerc: '>=4.0.0,<5.0a0'
+ libdeflate: '>=1.23,<1.24.0a0'
+ libgcc: '>=13'
+ libjpeg-turbo: '>=3.0.0,<4.0a0'
+ liblzma: '>=5.6.3,<6.0a0'
+ libstdcxx: '>=13'
+ libwebp-base: '>=1.4.0,<2.0a0'
+ libzlib: '>=1.3.1,<2.0a0'
+ zstd: '>=1.5.6,<1.6.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-hd9ff511_3.conda
+ hash:
+ md5: 0ea6510969e1296cc19966fad481f6de
+ sha256: b224e16b88d76ea95e4af56e2bc638c603bd26a770b98d117d04541d3aafa002
+ category: main
+ optional: false
+- name: libtiff
+ version: 4.7.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ lerc: '>=4.0.0,<5.0a0'
+ libdeflate: '>=1.23,<1.24.0a0'
+ libjpeg-turbo: '>=3.0.0,<4.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/libtiff-4.7.0-h797046b_3.conda
+ hash:
+ md5: defed79ff7a9164ad40320e3f116a138
+ sha256: c363a8baba4ce12b8f01f0ab74fe8b0dc83facd89c6604f4a191084923682768
+ 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: libwebp-base
+ 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/libwebp-base-1.5.0-h851e524_0.conda
+ hash:
+ md5: 63f790534398730f59e1b899c3644d4a
+ sha256: c45283fd3e90df5f0bd3dbcd31f59cdd2b001d424cf30a07223655413b158eaf
+ 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: libxcb
+ version: 1.17.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ pthread-stubs: ''
+ xorg-libxau: '>=1.0.11,<2.0a0'
+ xorg-libxdmcp: ''
+ url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda
+ hash:
+ md5: 92ed62436b625154323d40d5f2f11dd7
+ sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa
+ category: main
+ optional: false
+- name: libxcb
+ version: '1.16'
+ manager: conda
+ platform: win-64
+ dependencies:
+ m2w64-gcc-libs: ''
+ m2w64-gcc-libs-core: ''
+ pthread-stubs: ''
+ xorg-libxau: '>=1.0.11,<2.0a0'
+ xorg-libxdmcp: ''
+ url: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda
+ hash:
+ md5: f0b599acdc82d5bc7e3b105833e7c5c8
+ sha256: abae56e12a4c62730b899fdfb82628a9ac171c4ce144fc9f34ae024957a82a0e
+ 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: libxml2
+ version: 2.13.5
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libiconv: '>=1.17,<2.0a0'
+ liblzma: '>=5.6.3,<6.0a0'
+ libzlib: '>=1.3.1,<2.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.13.5-h0d44e9d_1.conda
+ hash:
+ md5: f5b05674697ae7d2c5932766695945e1
+ sha256: 306e18aa647d8208ad2cd0e62d84933222b2fbe93d2d53cd5283d2256b1d54de
+ 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: 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: 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.6
+ 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.6-h024ca30_0.conda
+ hash:
+ md5: 96e42ccbd3c067c1713ff5f2d2169247
+ sha256: 9e385c2a8169d951cf153221fb7fbb3dc8f1e5ac77371edee7329f8721dbe1ae
+ category: main
+ optional: false
+- name: llvmlite
+ version: 0.43.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libllvm14: '>=14.0.6,<14.1.0a0'
+ libstdcxx: '>=13'
+ libzlib: '>=1.3.1,<2.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.43.0-py311h9c9ff8c_1.conda
+ hash:
+ md5: 9ab40f5700784bf16ff7cf8012a646e8
+ sha256: fb8b3eeea19f1160343d2c84f3b3e888f8c45db563375660905e1e73a793fc74
+ category: main
+ optional: false
+- name: llvmlite
+ version: 0.43.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ libzlib: '>=1.3.1,<2.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.43.0-py311h7deaa30_1.conda
+ hash:
+ md5: c59d60615d5c5a9e9539a106478d332c
+ sha256: 7df8480fc6c32b6f5e0b6f928332759559e9c2d6c43f94e6b51ea5d2129442a9
+ 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: 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: 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py311h2dc5d0c_1.conda
+ hash:
+ md5: 6565a715337ae279e351d0abd8ffe88a
+ sha256: 0291d90706ac6d3eea73e66cd290ef6d805da3fad388d1d476b8536ec92ca9a8
+ category: main
+ optional: false
+- name: markupsafe
+ version: 3.0.2
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h5082efb_1.conda
+ hash:
+ md5: c1f2ddad665323278952a453912dc3bd
+ sha256: 6f756e13ccf1a521d3960bd3cadddf564e013e210eaeced411c5259f070da08e
+ category: main
+ optional: false
+- name: matplotlib-base
+ version: 3.8.4
+ 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.3.1'
+ libgcc-ng: '>=12'
+ libstdcxx-ng: '>=12'
+ numpy: '>=1.21'
+ packaging: '>=20.0'
+ pillow: '>=8'
+ pyparsing: '>=2.3.1'
+ python: '>=3.11,<3.12.0a0'
+ python-dateutil: '>=2.7'
+ python_abi: 3.11.*
+ tk: '>=8.6.13,<8.7.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.4-py311ha4ca890_2.conda
+ hash:
+ md5: 0848e2084cbb57014f232f48568561af
+ sha256: 19a65ac35a9f48b3f0277b723b832052728d276e70c0ad1057f5b5bbe1f1ba28
+ category: main
+ optional: false
+- name: matplotlib-base
+ version: 3.8.4
+ 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.21'
+ packaging: '>=20.0'
+ pillow: '>=8'
+ pyparsing: '>=2.3.1'
+ python: '>=3.11,<3.12.0a0'
+ python-dateutil: '>=2.7'
+ python_abi: 3.11.*
+ 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.8.4-py311h9b31f6e_2.conda
+ hash:
+ md5: dbf84485273ba5fea107ef140a173e30
+ sha256: 857ed04795a1e3ea1939d8990fe0f6122b086445f72f92afe50de74ae19977d0
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: mistune
+ version: 3.1.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ typing_extensions: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda
+ hash:
+ md5: d10024c163a52eeecbb166fdeaef8b12
+ sha256: d932404dc610464130db5f36f59cd29947a687d9708daaad369d0020707de41a
+ category: dev
+ optional: true
+- name: mistune
+ version: 3.1.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ typing_extensions: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.1.0-pyhd8ed1ab_0.conda
+ hash:
+ md5: d10024c163a52eeecbb166fdeaef8b12
+ sha256: d932404dc610464130db5f36f59cd29947a687d9708daaad369d0020707de41a
+ category: dev
+ optional: true
+- 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: msgpack-python
+ version: 1.1.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libstdcxx: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.0-py311hd18a35c_0.conda
+ hash:
+ md5: 682f76920687f7d9283039eb542fdacf
+ sha256: 9033fa7084cbfd10e1b7ed3b74cee17169a0731ec98244d05c372fc4a935d5c9
+ category: main
+ optional: false
+- name: msgpack-python
+ version: 1.1.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h3257749_0.conda
+ hash:
+ md5: 36562593204b081d0da8a8bfabfb278b
+ sha256: 4e6a7979b434308ce5588970cb613952e3340bb2f9e63aaad7e5069ef1f08d1d
+ category: main
+ optional: false
+- 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: 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: myst-nb
+ version: 1.1.2
+ manager: conda
+ platform: linux-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.1.2-pyhd8ed1ab_1.conda
+ hash:
+ md5: b78625bb0b4b144fe7048523a178986d
+ sha256: 0bc2fdde44340d93834983106fdacad5683c441ae5faa5450444e4ff8560f13b
+ category: dev
+ optional: true
+- name: myst-nb
+ version: 1.1.2
+ 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.1.2-pyhd8ed1ab_1.conda
+ hash:
+ md5: b78625bb0b4b144fe7048523a178986d
+ sha256: 0bc2fdde44340d93834983106fdacad5683c441ae5faa5450444e4ff8560f13b
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: nbconvert
+ version: 7.16.5
+ manager: conda
+ platform: linux-64
+ dependencies:
+ nbconvert-core: 7.16.5
+ nbconvert-pandoc: 7.16.5
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.5-hd8ed1ab_1.conda
+ hash:
+ md5: 82ffc2974cd09b45182f018b5af731c8
+ sha256: 02780c17ea89ff96c229b908201a656affa70c475ebf40a140b7551d016cba31
+ category: dev
+ optional: true
+- name: nbconvert
+ version: 7.16.5
+ manager: conda
+ platform: win-64
+ dependencies:
+ nbconvert-core: 7.16.5
+ nbconvert-pandoc: 7.16.5
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.5-hd8ed1ab_1.conda
+ hash:
+ md5: 82ffc2974cd09b45182f018b5af731c8
+ sha256: 02780c17ea89ff96c229b908201a656affa70c475ebf40a140b7551d016cba31
+ category: dev
+ optional: true
+- name: nbconvert-core
+ version: 7.16.5
+ manager: conda
+ platform: linux-64
+ dependencies:
+ beautifulsoup4: ''
+ bleach-with-css: '!=5.0.0'
+ defusedxml: ''
+ entrypoints: '>=0.2.2'
+ 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.5-pyhd8ed1ab_1.conda
+ hash:
+ md5: dd50a122c5b9782b1e9b2695473bfd95
+ sha256: 9eed80365c012ab3bbb0f0ed1446af496d6810063dfa07dde33ae4a6d8a392ef
+ category: dev
+ optional: true
+- name: nbconvert-core
+ version: 7.16.5
+ manager: conda
+ platform: win-64
+ dependencies:
+ beautifulsoup4: ''
+ bleach-with-css: '!=5.0.0'
+ defusedxml: ''
+ entrypoints: '>=0.2.2'
+ 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.5-pyhd8ed1ab_1.conda
+ hash:
+ md5: dd50a122c5b9782b1e9b2695473bfd95
+ sha256: 9eed80365c012ab3bbb0f0ed1446af496d6810063dfa07dde33ae4a6d8a392ef
+ category: dev
+ optional: true
+- name: nbconvert-pandoc
+ version: 7.16.5
+ manager: conda
+ platform: linux-64
+ dependencies:
+ nbconvert-core: 7.16.5
+ pandoc: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.5-hd8ed1ab_1.conda
+ hash:
+ md5: 593a8fd80968f14f8a7b3a685ddc455e
+ sha256: ddef467e066125a86bbb748d5cd6a54f7c0b7021461406d1bf7e48823f2eab9d
+ category: dev
+ optional: true
+- name: nbconvert-pandoc
+ version: 7.16.5
+ manager: conda
+ platform: win-64
+ dependencies:
+ nbconvert-core: 7.16.5
+ pandoc: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.5-hd8ed1ab_1.conda
+ hash:
+ md5: 593a8fd80968f14f8a7b3a685ddc455e
+ sha256: ddef467e066125a86bbb748d5cd6a54f7c0b7021461406d1bf7e48823f2eab9d
+ category: dev
+ 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.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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: ncurses
+ version: '6.5'
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc-ng: '>=12'
+ url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda
+ hash:
+ md5: 70caf8bb6cf39a0b6b7efc885f51c0fe
+ sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: numba
+ version: 0.60.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ _openmp_mutex: '>=4.5'
+ libgcc-ng: '>=12'
+ libstdcxx-ng: '>=12'
+ llvmlite: '>=0.43.0,<0.44.0a0'
+ numpy: '>=1.22.3,<2.1'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/numba-0.60.0-py311h4bc866e_0.conda
+ hash:
+ md5: e32a210e9caf97383c35685fd2343512
+ sha256: b48178613ba637b647c5738772d3efabfca502ea579b5ec10784a33d5acb0789
+ category: main
+ optional: false
+- name: numba
+ version: 0.60.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ llvmlite: '>=0.43.0,<0.44.0a0'
+ numpy: '>=1.22.3,<2.1'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.60.0-py311h0673bce_0.conda
+ hash:
+ md5: 5d6eb2107dd921d651e46d059a82ab95
+ sha256: b3359607051ec34c3eeb90447ece326822b6883882cf0e425cb1108dbcaebdc9
+ category: main
+ optional: false
+- name: numcodecs
+ version: 0.14.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libstdcxx: '>=13'
+ msgpack-python: ''
+ numpy: '>=1.24'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.14.1-py311h7db5c69_0.conda
+ hash:
+ md5: a50abcda080c2a9e3c46a6985fec12c0
+ sha256: 7a953d08194b108e68c176ebf58813df329bd40847bb92a912ea87b7d15fabbe
+ category: main
+ optional: false
+- name: numcodecs
+ version: 0.14.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ msgpack-python: ''
+ numpy: '>=1.24'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.14.1-py311hcf9f919_0.conda
+ hash:
+ md5: 2213faefca7125f0cd8f6bca9a835032
+ sha256: 50dc848841027218ccb52e87948e06087e434fff867cfd5ea19a31b3aebd61c8
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda
+ hash:
+ md5: a502d7aad449a1206efb366d6a12c52d
+ sha256: 3f4365e11b28e244c95ba8579942b0802761ba7bb31c026f50d1a9ea9c728149
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h0b4df5a_0.conda
+ hash:
+ md5: 7b240edd44fd7a0991aa409b07cee776
+ sha256: 14116e72107de3089cc58119a5ce5905c22abf9a715c9fe41f8ac14db0992326
+ category: main
+ optional: false
+- name: openjpeg
+ version: 2.5.3
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ libpng: '>=1.6.44,<1.7.0a0'
+ libstdcxx: '>=13'
+ libtiff: '>=4.7.0,<4.8.0a0'
+ libzlib: '>=1.3.1,<2.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.3-h5fbd93e_0.conda
+ hash:
+ md5: 9e5816bc95d285c115a3ebc2f8563564
+ sha256: 5bee706ea5ba453ed7fd9da7da8380dd88b865c8d30b5aaec14d2b6dd32dbc39
+ category: main
+ optional: false
+- name: openjpeg
+ version: 2.5.3
+ manager: conda
+ platform: win-64
+ dependencies:
+ libpng: '>=1.6.44,<1.7.0a0'
+ libtiff: '>=4.7.0,<4.8.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/openjpeg-2.5.3-h4d64b90_0.conda
+ hash:
+ md5: fc050366dd0b8313eb797ed1ffef3a29
+ sha256: 410175815df192f57a07c29a6b3fdd4231937173face9e63f0830c1234272ce3
+ category: main
+ optional: false
+- name: openssl
+ version: 3.4.0
+ 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.0-h7b32b05_1.conda
+ hash:
+ md5: 4ce6875f75469b2757a65e10a5d05e31
+ sha256: f62f6bca4a33ca5109b6d571b052a394d836956d21b25b7ffd03376abf7a481f
+ category: main
+ optional: false
+- name: openssl
+ version: 3.4.0
+ 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.0-ha4e3fda_1.conda
+ hash:
+ md5: fb45308ba8bfe1abf1f4a27bad24a743
+ sha256: 519a06eaab7c878fbebb8cab98ea4a4465eafb1e9ed8c6ce67226068a80a92f0
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python-dateutil: '>=2.8.1'
+ python-tzdata: '>=2022a'
+ python_abi: 3.11.*
+ pytz: '>=2020.1,<2024.2'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py311h7db5c69_1.conda
+ hash:
+ md5: 643f8cb35133eb1be4919fb953f0a25f
+ sha256: dce121d3838996b77b810ca9097cc17068552075c761408a9b2eb788cf8fd1b0
+ category: main
+ optional: false
+- name: pandas
+ version: 2.2.3
+ manager: conda
+ platform: win-64
+ dependencies:
+ numpy: '>=1.22.4'
+ python: '>=3.11,<3.12.0a0'
+ python-dateutil: '>=2.8.1'
+ python-tzdata: '>=2022a'
+ python_abi: 3.11.*
+ 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-py311hcf9f919_1.conda
+ hash:
+ md5: 5965b8926efba14e6fde98cc8713c083
+ sha256: f5477bf3a2b7919481009ce87212d7bbd16c61a5bb05c692a7c336fb45646534
+ category: main
+ optional: false
+- name: pandoc
+ version: 3.6.1
+ manager: conda
+ platform: linux-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.6.1-ha770c72_0.conda
+ hash:
+ md5: e94dd7479ba12963364d855fb23cce4f
+ sha256: 08092ddd880a58c75feaf37a374826d004c9dacd2cc73bbb623ad4e0bb321b82
+ category: dev
+ optional: true
+- name: pandoc
+ version: 3.6.1
+ manager: conda
+ platform: win-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.6.1-h57928b3_0.conda
+ hash:
+ md5: 5d2bd384ec8ed9f60454e1260eb08220
+ sha256: 5015bea3441ae0e919960633f55fb5f7dee757a6f893f2be2065001e8e8b18c0
+ category: dev
+ 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: dev
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ 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.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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ tk: '>=8.6.13,<8.7.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py311h82a398c_1.conda
+ hash:
+ md5: 4dc0b6fcf0bc041a1bfb763fa6e5302f
+ sha256: ce420bfba7ed8641aa376b4446e16299fcb37113c27e9655503fd5d517cb7fcd
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h5592be9_1.conda
+ hash:
+ md5: 034f612fd103c2c1058538533598ce4f
+ sha256: 5404b51b1c93180940e0f8340e905d435bf187224512bab2993c5b7f30aa0615
+ category: main
+ optional: false
+- name: pip
+ version: 24.3.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9,<3.13.0a0'
+ setuptools: ''
+ wheel: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_2.conda
+ hash:
+ md5: 04e691b9fadd93a8a9fad87a81d4fd8f
+ sha256: da8c8888de10c1e4234ebcaa1550ac2b4b5408ac20f093fe641e4bc8c9c9f3eb
+ category: main
+ optional: false
+- name: pip
+ version: 24.3.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9,<3.13.0a0'
+ setuptools: ''
+ wheel: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/pip-24.3.1-pyh8b19718_2.conda
+ hash:
+ md5: 04e691b9fadd93a8a9fad87a81d4fd8f
+ sha256: da8c8888de10c1e4234ebcaa1550ac2b4b5408ac20f093fe641e4bc8c9c9f3eb
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: prompt-toolkit
+ version: 3.0.48
+ manager: conda
+ platform: linux-64
+ dependencies:
+ python: '>=3.9'
+ wcwidth: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda
+ hash:
+ md5: 368d4aa48358439e07a97ae237491785
+ sha256: 79fb7d1eeb490d4cc1b79f781bb59fe302ae38cf0a30907ecde75a7d399796cc
+ category: dev
+ optional: true
+- name: prompt-toolkit
+ version: 3.0.48
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.9'
+ wcwidth: ''
+ url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_1.conda
+ hash:
+ md5: 368d4aa48358439e07a97ae237491785
+ sha256: 79fb7d1eeb490d4cc1b79f781bb59fe302ae38cf0a30907ecde75a7d399796cc
+ category: dev
+ optional: true
+- name: psutil
+ version: 6.1.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.1-py311h9ecbd09_0.conda
+ hash:
+ md5: c78bfbe5ad64c25c2f55d57a805ba2d2
+ sha256: b7fd2241a9214f7ed92aa1dcb57f70a363af3325b051c926cc360b55cdaadc13
+ category: main
+ optional: false
+- name: psutil
+ version: 6.1.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_0.conda
+ hash:
+ md5: ef7772e4301bdde9361ec6a5d38797c4
+ sha256: 78487af8d112b9ded96b96ce5049a5c576eac2ae9d506f1895f0e506d0dfb705
+ 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:
+ 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:
+ ucrt: '>=10.0.20348.0'
+ vc: '>=14.2,<15'
+ vc14_runtime: '>=14.29.30139'
+ url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda
+ hash:
+ md5: cf98a67a1ec8040b42455002a24f0b0b
+ sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ setuptools: ''
+ url: https://conda.anaconda.org/conda-forge/linux-64/pybtex-docutils-1.0.3-py311h38be061_2.conda
+ hash:
+ md5: a092cf434b09ea147245e978999a379d
+ sha256: f6ce37fc10a1c003f0db95a2bec20f3df09802617815cb848fa379a79c660b76
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ setuptools: ''
+ url: https://conda.anaconda.org/conda-forge/win-64/pybtex-docutils-1.0.3-py311h1ea47a8_2.conda
+ hash:
+ md5: 544c4eeebd01975a6d71e3776212623f
+ sha256: 20ca92d7b6088c217ff65be59d2bfe710402d459b239e23497a04d7bf8a102c4
+ 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: ''
+ 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.5
+ 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.5-pyh3cfb1c2_0.conda
+ hash:
+ md5: e8ea30925c8271c4128375810d7d3d7a
+ sha256: 0f32c30ddc610cd1113335d8b4f311f20f4d72754b7c1a5d0d9493f597cf11d2
+ category: main
+ optional: false
+- name: pydantic
+ version: 2.10.5
+ 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.5-pyh3cfb1c2_0.conda
+ hash:
+ md5: e8ea30925c8271c4128375810d7d3d7a
+ sha256: 0f32c30ddc610cd1113335d8b4f311f20f4d72754b7c1a5d0d9493f597cf11d2
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ typing-extensions: '>=4.6.0,!=4.7.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.27.2-py311h9e33e62_0.conda
+ hash:
+ md5: 675cb6079b6b3b4ef4f20399fedf6666
+ sha256: 8ead97151b2f349cd327456fe4a6fcf7c51a3ab6c06f48f4330f86de0d848bd1
+ category: main
+ optional: false
+- name: pydantic-core
+ version: 2.27.2
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h533ab2d_0.conda
+ hash:
+ md5: e9420c025ea324d06255fc34b7e3928e
+ sha256: d1f641a6f2c9fe6413674dd4e1f7dd5bbd06d26532d6e19f83c56a747d54b667
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ scipy: '>=0.13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pydiso-0.1.2-py311h979a38d_0.conda
+ hash:
+ md5: b95de0fa0dd8d8ec06be59b212f2e06a
+ sha256: 567eff98ec44e1ebee2dc326f371615c7cd6419817ee070f3d1aba0e929ee5ac
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h6340b4d_0.conda
+ hash:
+ md5: 442ca13ff6a08fe31945472d6b1b2fe5
+ sha256: 9c6fc6b81a595d3631c267ad96c0931fe5e6c726a58ff47680da61bf10a78001
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: pylint
+ version: 3.3.3
+ 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,<6,!=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.3-pyhd8ed1ab_0.conda
+ hash:
+ md5: 5842a1fa3b9b4f9fe7069b9ca5ed068d
+ sha256: a8192c823bfb6cdc57d2e12a8748ac1acb588c960c53e71c763f6359c5602e46
+ category: dev
+ optional: true
+- name: pylint
+ version: 3.3.3
+ 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,<6,!=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.3-pyhd8ed1ab_0.conda
+ hash:
+ md5: 5842a1fa3b9b4f9fe7069b9ca5ed068d
+ sha256: a8192c823bfb6cdc57d2e12a8748ac1acb588c960c53e71c763f6359c5602e46
+ 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: main
+ optional: false
+- 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: main
+ optional: false
+- 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: main
+ optional: false
+- name: pymatsolver-base
+ version: 0.2.0
+ manager: conda
+ platform: win-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: main
+ optional: false
+- 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: 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.11.11
+ 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'
+ libexpat: '>=2.6.4,<3.0a0'
+ 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.11.11-h9e4cc4f_1_cpython.conda
+ hash:
+ md5: 8387070aa413ce9a8cc35a509fae938b
+ sha256: b29ce0836fce55bdff8d5c5b71c4921a23f87d3b950aea89a9e75784120b06b0
+ category: main
+ optional: false
+- name: python
+ version: 3.11.11
+ manager: conda
+ platform: win-64
+ dependencies:
+ bzip2: '>=1.0.8,<2.0a0'
+ libexpat: '>=2.6.4,<3.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.11.11-h3f84c4b_1_cpython.conda
+ hash:
+ md5: 4d490a426481298bdd89a502253a7fd4
+ sha256: 5be6181ab6d655ad761490b7808584c5e78e5d7139846685b1850a8b7ef6c5df
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.11'
+ manager: conda
+ platform: linux-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-5_cp311.conda
+ hash:
+ md5: 139a8d40c8a2f430df31048949e450de
+ sha256: 2660b8059b3ee854bc5d3c6b1fce946e5bd2fe8fbca7827de2c5885ead6209de
+ category: main
+ optional: false
+- name: python_abi
+ version: '3.11'
+ manager: conda
+ platform: win-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-5_cp311.conda
+ hash:
+ md5: 895b873644c11ccc0ab7dba2d8513ae6
+ sha256: 9b210e5807dd9c9ed71ff192a95f1872da597ddd10e7cefec93a922fe22e598a
+ 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: pywin32
+ version: '307'
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311hda3d55a_3.conda
+ hash:
+ md5: 1bc10dbe3b8d03071070c962a2bdf65f
+ sha256: 78a4ede098bbc122a3dff4e0e27255e30b236101818e8f499779c89670c58cd6
+ category: dev
+ optional: true
+- name: pywinpty
+ version: 2.0.14
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.14-py311hda3d55a_0.conda
+ hash:
+ md5: 64553b300529aa8987f6ca92c914c844
+ sha256: 337097e3f3b71f782c43fb702893f86f080e140da467415dcaf039a7fbb8e551
+ category: dev
+ optional: true
+- name: pyyaml
+ version: 6.0.2
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ yaml: '>=0.2.5,<0.3.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py311h9ecbd09_1.conda
+ hash:
+ md5: abeb54d40f439b86f75ea57045ab8496
+ sha256: e721e5ff389a7b2135917c04b27391be3d3382e261bb60a369b1620655365c3d
+ category: main
+ optional: false
+- name: pyyaml
+ version: 6.0.2
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_1.conda
+ hash:
+ md5: d0c5f3c595039890be0c9af47d23b9ba
+ sha256: 86608f1b4f6b1819a74b6b1344c34304745fd7e84bfc9900269f57cf28178d31
+ category: main
+ optional: false
+- name: pyzmq
+ version: 26.2.0
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ zeromq: '>=4.3.5,<4.4.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py311h7deb3e3_3.conda
+ hash:
+ md5: e0897de1d8979a3bb20ef031ae1f7d28
+ sha256: 3fdef7b3c43474b7225868776a373289a8fd92787ffdf8bed11cf7f39b4ac741
+ category: dev
+ optional: true
+- name: pyzmq
+ version: 26.2.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ libsodium: '>=1.0.20,<1.0.21.0a0'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.0-py311h484c95c_3.conda
+ hash:
+ md5: 4836b00658e11b466b823216f6df2424
+ sha256: 4d3fc4cfac284efb83a903601586cc6ee18fb556d4bf84d3bd66af76517c463e
+ category: dev
+ 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: 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.35.1
+ manager: conda
+ platform: linux-64
+ dependencies:
+ attrs: '>=22.2.0'
+ python: '>=3.9'
+ rpds-py: '>=0.7.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda
+ hash:
+ md5: 8c9083612c1bfe6878715ed5732605f8
+ sha256: f972eecb4dc8e06257af37642f92b0f2df04a7fe4c950f2e1045505e5e93985f
+ category: dev
+ optional: true
+- name: referencing
+ version: 0.35.1
+ manager: conda
+ platform: win-64
+ dependencies:
+ attrs: '>=22.2.0'
+ python: '>=3.9'
+ rpds-py: '>=0.7.0'
+ url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_1.conda
+ hash:
+ md5: 8c9083612c1bfe6878715ed5732605f8
+ sha256: f972eecb4dc8e06257af37642f92b0f2df04a7fe4c950f2e1045505e5e93985f
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: rpds-py
+ version: 0.22.3
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.22.3-py311h9e33e62_0.conda
+ hash:
+ md5: b1f5799ae0cc22198928f09879da01f5
+ sha256: 0908ac4acb1a10fe63046e947a96c77cea0d392619ef965944da86c3574b68ec
+ category: dev
+ optional: true
+- name: rpds-py
+ version: 0.22.3
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h533ab2d_0.conda
+ hash:
+ md5: 40c964a32833f3ad13ba4183cd180577
+ sha256: c74b3a4430706dfb63176429cc31410dcb86a15e1d35463aae04733c4700b8d8
+ category: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ scipy: ''
+ threadpoolctl: '>=2.0.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.4.2-py311he08f58d_1.conda
+ hash:
+ md5: fd4a80e35c05513590b33c83fc81dcc7
+ sha256: b818f7df6ae949012a38b41b6577ac2319569971b1a063c0386447ec2c6c09ed
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311hdcb8d17_1.conda
+ hash:
+ md5: 4179839852432a4e95b5ff86dd5faa9c
+ sha256: e38cac2faa50b04ae06da6a7c9690ad8f893f2b3318b052ac15710221f32e231
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py311he9a78e4_2.conda
+ hash:
+ md5: c4aee8cadc4c9fc9a91aca0803473690
+ sha256: b28d91a55205b886308da82428cd522e9dce0ef912445a2e9d89318379c15759
+ 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311hf16d85f_2.conda
+ hash:
+ md5: 8d3393f64df60e48be00d06ccb63bb18
+ sha256: ef98270586c1dfb551f9ff868312554f248f155406f924b91df07cd46c14d302
+ category: main
+ optional: false
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: '>=2.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2
+ hash:
+ md5: 6d6552722448103793743dabfbda532d
+ sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6
+ category: main
+ optional: false
+- 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: 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: dev
+ 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: dev
+ optional: true
+- 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.37
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ greenlet: '!=0.4.17'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ typing-extensions: '>=4.6.0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.37-py311h9ecbd09_0.conda
+ hash:
+ md5: 8bddbf26e97fe68a3e4c20abbd7aaf80
+ sha256: 7cdcd4338980fcaf02711827bde1af877db85026521a67521b28536ef8a846fd
+ category: dev
+ optional: true
+- name: sqlalchemy
+ version: 2.0.37
+ manager: conda
+ platform: win-64
+ dependencies:
+ greenlet: '!=0.4.17'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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.37-py311he736701_0.conda
+ hash:
+ md5: 0a42f9e7e73ff72c3f3e5c9b6caa2222
+ sha256: 9003688bfaa0c91279ee40e30a26e1127df9bf067e069fc4506b89dc43b907de
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.12.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: ''
+ libgcc-ng: '>=13'
+ libhwloc: '>=2.11.1,<2.11.2.0a0'
+ libstdcxx: ''
+ libstdcxx-ng: '>=13'
+ url: https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.12.0-h84d6215_4.conda
+ hash:
+ md5: 1fa72fdeb88f538018612ce2ed9fc789
+ sha256: a079dcf42804a841ac2b63784f42e0d2e93401833d4a7d44ddf05b767794d578
+ category: main
+ optional: false
+- name: tbb
+ version: 2021.12.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ libhwloc: '>=2.11.1,<2.11.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/tbb-2021.12.0-hc790b64_4.conda
+ hash:
+ md5: bce92c19a6cb64b47866b7271363f747
+ sha256: d23e589311be6aeacbfb8371bd65d8637c5acc83a149baccc57d2621644fe158
+ 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py311h9ecbd09_0.conda
+ hash:
+ md5: df3aee9c3e44489257a840b8354e77b9
+ sha256: afa3489113154b5cb0724b0bf120b62df91f426dabfe5d02f2ba09e90d346b28
+ category: main
+ optional: false
+- name: tornado
+ version: 6.4.2
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_0.conda
+ hash:
+ md5: 7e33077ce1bc0bf45c45a92e37432f16
+ sha256: 7e313f1724e5eb7d13f7a1ebd6026a378f3f58a638ba7cdc3bd452c01323bb29
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- name: tzdata
+ version: 2024b
+ manager: conda
+ platform: linux-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
+ hash:
+ md5: 8ac3367aafb1cc0a068483c580af8015
+ sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
+ category: main
+ optional: false
+- name: tzdata
+ version: 2024b
+ manager: conda
+ platform: win-64
+ dependencies: {}
+ url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda
+ hash:
+ md5: 8ac3367aafb1cc0a068483c580af8015
+ sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf
+ 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: 15.1.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ url: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py311h9ecbd09_1.conda
+ hash:
+ md5: 00895577e2b4c24dca76675ab1862551
+ sha256: 5f277c801ca392512de9aa497fd8be3e168950600c438778dfc4234943c474fc
+ category: main
+ optional: false
+- name: unicodedata2
+ version: 15.1.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311he736701_1.conda
+ hash:
+ md5: 6230613721d6d805d0276025ee4d7b2b
+ sha256: 07d55566e05bbadc32e989bbe50853e579fea0f8809503719d7d1438302d27be
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.38.33135'
+ url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_23.conda
+ hash:
+ md5: 7c10ec3158d1eb4ddff7007c9101adb0
+ sha256: 986ddaf8feec2904eac9535a7ddb7acda1a1dfb9482088fdb8129f1595181663
+ 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-he29a5d6_23.conda
+ hash:
+ md5: 32b37d0cfa80da34548501cdc913a832
+ sha256: c483b090c4251a260aba6ff3e83a307bcfb5fb24ad7ced872ab5d02971bd3a49
+ 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-hdffcdeb_23.conda
+ hash:
+ md5: 5c176975ca2b8366abad3c97b3cd1e83
+ sha256: 568ce8151eaae256f1cef752fc78651ad7a86ff05153cc7a4740b52ae6536118
+ 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: 3.6.10
+ manager: conda
+ platform: linux-64
+ dependencies:
+ notebook: '>=4.4.1'
+ python: '>=3.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.10-pyhd8ed1ab_0.conda
+ hash:
+ md5: 4d52bbdb661dc1b5a1c2aeb1afcd9a67
+ sha256: 6aeb16d2aacdae68ba7afd980925264f5d0459dd165e3406f13f23949df346c1
+ category: dev
+ optional: true
+- name: widgetsnbextension
+ version: 3.6.10
+ manager: conda
+ platform: win-64
+ dependencies:
+ notebook: '>=4.4.1'
+ python: '>=3.7'
+ url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-3.6.10-pyhd8ed1ab_0.conda
+ hash:
+ md5: 4d52bbdb661dc1b5a1c2aeb1afcd9a67
+ sha256: 6aeb16d2aacdae68ba7afd980925264f5d0459dd165e3406f13f23949df346c1
+ category: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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.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-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.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: 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: dev
+ optional: true
+- 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: dev
+ optional: true
+- 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: zstandard
+ version: 0.23.0
+ manager: conda
+ platform: linux-64
+ dependencies:
+ __glibc: '>=2.17,<3.0.a0'
+ cffi: '>=1.11'
+ libgcc: '>=13'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ zstd: '>=1.5.6,<1.6.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py311hbc35293_1.conda
+ hash:
+ md5: aec590674ba365e50ae83aa2d6e1efae
+ sha256: a5cf0eef1ffce0d710eb3dffcb07d9d5922d4f7a141abc96f6476b98600f718f
+ category: main
+ optional: false
+- name: zstandard
+ version: 0.23.0
+ manager: conda
+ platform: win-64
+ dependencies:
+ cffi: '>=1.11'
+ python: '>=3.11,<3.12.0a0'
+ python_abi: 3.11.*
+ 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-py311h53056dc_1.conda
+ hash:
+ md5: 7d4c123cbb5e6293dd4dd2f8d30f0de4
+ sha256: a93584e6167c3598854a47f3bf8276fa646a3bb4d12fcfc23a54e37d5879f35c
+ category: main
+ optional: false
+- name: zstd
+ version: 1.5.6
+ manager: conda
+ platform: linux-64
+ dependencies:
+ libgcc-ng: '>=12'
+ libstdcxx-ng: '>=12'
+ libzlib: '>=1.2.13,<2.0.0a0'
+ url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda
+ hash:
+ md5: 4d056880988120e29d75bfff282e0f45
+ sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b
+ 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: geoapps-utils
+ version: 0.4.0rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoapps-utils/0.4.0-rc.1/geoapps_utils-0.4.0rc1-py3-none-any.whl
+ hash:
+ sha256: 248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ category: main
+ optional: false
+- name: geoapps-utils
+ version: 0.4.0rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoapps-utils/0.4.0-rc.1/geoapps_utils-0.4.0rc1-py3-none-any.whl
+ hash:
+ sha256: 248c43c0c2b1b6a259c84fd5a1a0eaab013ea0cd01522a1b95c58b183031f96c
+ category: main
+ optional: false
+- name: geoh5py
+ version: 0.10.0rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoh5py/0.10.0-rc.1/geoh5py-0.10.0rc1-py3-none-any.whl
+ hash:
+ sha256: 50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ category: main
+ optional: false
+- name: geoh5py
+ version: 0.10.0rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/geoh5py/0.10.0-rc.1/geoh5py-0.10.0rc1-py3-none-any.whl
+ hash:
+ sha256: 50a6b8f52a0dafd9cff1706155c50262d66d193a063822f32837e0e424ead9f2
+ category: main
+ optional: false
+- name: mira-simpeg
+ version: 0.21.2.1rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/packages/packages/82/e7/5648143ed4aa1248b406f6596cd1aee8ab3c29df95813c96a22757f83b36/mira_simpeg-0.21.2.1rc1-py3-none-any.whl
+ hash:
+ sha256: c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ category: main
+ optional: false
+- name: mira-simpeg
+ version: 0.21.2.1rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/packages/packages/82/e7/5648143ed4aa1248b406f6596cd1aee8ab3c29df95813c96a22757f83b36/mira_simpeg-0.21.2.1rc1-py3-none-any.whl
+ hash:
+ sha256: c2c5adb9436f4bd0bc92d9acbf3e5739b100047c54b09757fde210b290ac4a56
+ category: main
+ optional: false
+- name: octree-creation-app
+ version: 0.2.0rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/octree-creation-app/0.2.0-rc.1/octree_creation_app-0.2.0rc1-py3-none-any.whl
+ hash:
+ sha256: ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ category: main
+ optional: false
+- name: octree-creation-app
+ version: 0.2.0rc1
+ 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://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/octree-creation-app/0.2.0-rc.1/octree_creation_app-0.2.0rc1-py3-none-any.whl
+ hash:
+ sha256: ce52db037a0048fe3a826ad389988567534c74b094c215e8b53a92bd8f36f39c
+ category: main
+ optional: false
+- name: param-sweeps
+ version: 0.2.0rc1
+ manager: pip
+ platform: linux-64
+ dependencies:
+ geoh5py: '>=0.10.0b1,<0.11.0a.dev'
+ numpy: '>=1.26.0,<1.27.0'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/param-sweeps/0.2.0-rc.1/param_sweeps-0.2.0rc1-py3-none-any.whl
+ hash:
+ sha256: 0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
+ category: main
+ optional: false
+- name: param-sweeps
+ version: 0.2.0rc1
+ manager: pip
+ platform: win-64
+ dependencies:
+ geoh5py: '>=0.10.0b1,<0.11.0a.dev'
+ numpy: '>=1.26.0,<1.27.0'
+ url: https://mirageoscienceltd.jfrog.io/artifactory/api/pypi/public-pypi-dev/param-sweeps/0.2.0-rc.1/param_sweeps-0.2.0rc1-py3-none-any.whl
+ hash:
+ sha256: 0e2f83e6fc84cabd021126278b1fef27cf646f3566bc1b6b1b29706dabdd9950
+ category: main
+ optional: false
diff --git a/pyproject.toml b/pyproject.toml
index 9667c7d1..ab14ea15 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "simpeg-drivers"
-version = "0.1.1"
+version = "0.2.0"
description = "Application to run SimPEG inversions with geoh5 files from Geoscience Analyst."
license = "MIT"
authors = ["Mira Geoscience "]
@@ -11,6 +11,7 @@ maintainers = [
repository = "https://github.com/MiraGeoscience/simpeg-drivers"
documentation = "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/"
homepage = "https://www.mirageoscience.com/mining-industry-software/python-integration/"
+readme = "package.rst"
packages = [
{ include = "simpeg_drivers" },
@@ -18,87 +19,70 @@ packages = [
]
include = [
- { path = "COPYING", format = ["sdist", "wheel"] },
- { path = "COPYING.LESSER", format = ["sdist", "wheel"] },
- { path = "LICENSE", format = ["sdist", "wheel"] },
- { path = "README.rst", format = ["sdist", "wheel"] },
- { path = "THIRD_PARTY_SOFTWARE.rst", format = ["sdist", "wheel"] },
- { path = "docs/**/THIRD_PARTY_SOFTWARE.rst", format = ["sdist", "wheel"] },
+ { path = "COPYING" },
+ { path = "COPYING.LESSER" },
+ { path = "LICENSE" },
+ { path = "README.rst" },
+ { path = "THIRD_PARTY_SOFTWARE.rst" },
+ { path = "docs/**/THIRD_PARTY_SOFTWARE.rst" },
]
[tool.poetry.dependencies]
-python = "^3.10, <3.11"
+python = "^3.10, <3.12" # geoana does not support 3.12 yet
-dask = {version = "2022.10.*", extras = ["distributed"]} # also in simpeg[dask]
-discretize = "~0.10.0" # also in simpeg, octree-creation-app
-distributed = "2022.10.*" # because conda-lock doesn't take dask extras into account
-numpy = "~1.23.5" # also in geoh5py, simpeg
-scipy = "~1.10.1"
-zarr = "~2.14.2" # also in simpeg[dask]
+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
+numpy = "~1.26.0" # also in geoh5py, simpeg
+pydiso = "0.1.*" # not imported, but required at runtime for simpeg
+scipy = "~1.14.0"
## Pip dependencies from Git repositories
#----------------------------------------
-geoh5py = {version = "~0.9.0", source = "pypi", allow-prereleases = true}
-#geoh5py = {url = "https://github.com/MiraGeoscience/geoh5py/archive/refs/heads/release/0.9.0.zip#sha256="}
-#geoh5py = {url = "http://localhost:8888/geoh5py.tar.gz#sha256="}
+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.1.1", source = "pypi", allow-prereleases = true}
-#octree-creation-app = {url = "https://github.com/MiraGeoscience/octree-creation-app/archive/refs/heads/release/0.1.0.zip#sha256="}
-#octree-creation-app = {url = "http://localhost:8888/octree-creation-app.tar.gz#sha256="}
+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.3.0", source = "pypi", allow-prereleases = true}
-#geoapps-utils = {url = "https://github.com/MiraGeoscience/geoapps-utils/archive/refs/heads/release/0.3.0.zip#sha256="}
-#geoapps-utils = {url = "http://localhost:8888/geoapps-utils.tar.gz#sha256="}
+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.19.0.8,<0.19.0.9.dev", source = "pypi", allow-prereleases = true}
-#mira-simpeg = {url = "https://github.com/MiraGeoscience/simpeg/archive/refs/heads/release/0.19.0.8.zip#sha256="}
-#mira-simpeg = {url = "http://localhost:8888/mira-simpeg.tar.gz#sha256="}
+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.1.8", source = "pypi", allow-prereleases = true}
-#param-sweeps = {url = "https://github.com/MiraGeoscience/param-sweeps/archive/refs/heads/release/0.1.8.zip#sha256="}
-#param-sweeps = {git = "https://github.com/MiraGeoscience/param-sweeps.git", rev = "hotfix/0.1.8"}
-#param-sweeps = {url = "http://localhost:8888/param-sweeps.tar.gz#sha256="}
+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"}
-## indirect dependencies, forcing them here for installation through Conda not pip
-#---------------------------------------------------------------------------------
-Pillow = "~10.3.0" # from geoh5py
-fsspec = "2022.*" # from simpeg[dask]
-geoana = "~0.4.0" # from simpeg
-h5py = "^3.2.1" # from geoh5py
-matplotlib = "~3.7.1" # from simpeg
-mkl = "2022.1.*" # from simpeg
-pandas = "~2.2.1" # from SimPEG, also used by targeting-workflow, petro-lingo
-pydantic = "~2.5.2" # from geoapps-utils
-pydiso = "~0.0.3" # from simpeg
-pymatsolver = "~0.2.0" # from simpeg
-scikit-learn = "~1.4.0" # from SimPEG, also used by geo-unsup-mapper, petro-lingo
-tqdm = "^4.66.1" # from simpeg
-
-# force some versions to resolve incompatible resolution between PyPI and Conda
-#------------------------------------------------------------------------------
-tbb = "2021.12.*" # through mkl from SimPEG
-tzdata = "2023.4" # through pandas from SimPEG
+## force some versions to resolve incompatible resolution between PyPI and Conda
+#-------------------------------------------------------------------------------
+pymatsolver = {version = "0.2.*", source = "pypi"}
## 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 Artifactory : my_package = { version = "1.2.3" }
+# - 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.poetry.group.dev.dependencies]
Pygments = "*"
ipywidgets = "^7.6.5"
-jupyter-book = "^0.13"
+jupyter-book = "*"
jupytext = "^1.14"
pylint = "*"
pytest = "*"
pytest-cov = "*"
+pyyaml = '*'
+jinja2 = '*'
+packaging = '*'
readthedocs-sphinx-ext = "*"
sphinx = "^5.0"
tomli = "*"
+nbconvert = "~7.16.4"
[tool.conda-lock]
platforms = ['win-64', 'linux-64']
@@ -107,11 +91,64 @@ channels = ['conda-forge']
[tool.conda-lock.dependencies]
libblas = "*=*mkl" # because simpeg already brings in the MKL
-[tool.isort]
-profile = "black"
+## indirect dependencies, forcing them here for installation through Conda not pip
+#---------------------------------------------------------------------------------
+Pillow = ">=10.3.0, <10.4.0" # from geoh5py
+empymod = ">=2.2.1, <2.3.0" # from simpeg and geoana
+fsspec = "2022.*" # from simpeg[dask]
+geoana = ">=0.5.0, <0.6.0" # from simpeg
+h5py = ">=3.2.1, <4.0.0" # from geoh5py
+matplotlib-base = ">=3.8.4, <3.9.0" # from simpeg
+mkl = "2023.2, <2024.1" # from simpeg
+pandas = ">=2.2.1, <2.3.0" # from SimPEG, also used by targeting-workflow, petro-lingo
+pydantic = ">=2.5.2, <3.0.0" # from geoh5py, geoapps-utils
+pydiso = ">=0.1.0, <0.2.0" # from simpeg
+pymatsolver = ">=0.2.0, <0.3.0" # from simpeg
+scikit-learn = ">=1.4.0, <1.5.0" # from SimPEG, also used by geo-unsup-mapper, petro-lingo
+tqdm = ">=4.66.1, <5.0.0" # from simpeg
+zarr = ">=2.14.2, <2.15.0" # from simpeg[dask]
+
+# force some versions to resolve incompatible resolution between PyPI and Conda
+#------------------------------------------------------------------------------
+tbb = "2021.12.*" # through mkl from SimPEG
+python-tzdata = "2023.4.*" # through pandas from SimPEG
+
+[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
+ "RUF005", # collection-literal-concatenation - wrong suggestion with numpy arrays
+ "RUF012", # TODO
+]
+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.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
diff --git a/simpeg_drivers-assets/__init__.py b/simpeg_drivers-assets/__init__.py
index 47bdcd36..de0aa247 100644
--- a/simpeg_drivers-assets/__init__.py
+++ b/simpeg_drivers-assets/__init__.py
@@ -1,17 +1,16 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg-drivers.
#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
#
# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#
diff --git a/simpeg_drivers-assets/inversion_demo.geoh5 b/simpeg_drivers-assets/inversion_demo.geoh5
index becfca87..266be847 100644
--- a/simpeg_drivers-assets/inversion_demo.geoh5
+++ b/simpeg_drivers-assets/inversion_demo.geoh5
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e269dbddf7ff8478d0cffefc5c4b611a6c01a2beb84d597d5d20224f036261c5
-size 3198898
+oid sha256:0753dba5721c339f3058ceceadc13bca731cfc930c895a8574ff3bffca2222c7
+size 4035494
diff --git a/simpeg_drivers-assets/uijson/direct_current_forward_2d.ui.json b/simpeg_drivers-assets/uijson/direct_current_forward_2d.ui.json
index 77a5847e..c5b4cbe6 100644
--- a/simpeg_drivers-assets/uijson/direct_current_forward_2d.ui.json
+++ b/simpeg_drivers-assets/uijson/direct_current_forward_2d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Direct Current (DC) 2D Forward",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "direct current 2d",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -59,14 +31,16 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"line_id": {
"group": "Survey",
"main": true,
"min": 1,
"label": "Line number",
- "value": 1
+ "value": 1,
+ "tooltip": "Selects the line of data to be processed."
},
"receivers_radar_drape": {
"association": [
@@ -105,6 +79,8 @@
"u_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Easting core cell size (m)",
@@ -113,6 +89,8 @@
"v_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Northing core cell size (m)",
@@ -121,6 +99,8 @@
"depth_core": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Depth of core (m)",
@@ -129,6 +109,8 @@
"horizontal_padding": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Horizontal padding (m)",
@@ -137,17 +119,31 @@
"vertical_padding": {
"min": 0.0,
"group": "Mesh and models",
- "main": true,
+ "dependency": "mesh",
"dependencyType": "disabled",
+ "main": true,
"label": "Vertical padding (m)",
"value": 1000.0
},
"expansion_factor": {
"main": true,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"label": "Expansion factor",
"value": 1.1
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -155,15 +151,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -173,7 +221,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"max_chunk_size": {
@@ -181,15 +230,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -198,13 +250,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": "",
"gradient_type": {
@@ -212,9 +266,10 @@
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
}
}
diff --git a/simpeg_drivers-assets/uijson/direct_current_forward_3d.ui.json b/simpeg_drivers-assets/uijson/direct_current_forward_3d.ui.json
index c9801df9..99aacd6b 100644
--- a/simpeg_drivers-assets/uijson/direct_current_forward_3d.ui.json
+++ b/simpeg_drivers-assets/uijson/direct_current_forward_3d.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Direct Current (DC) 3D Forward",
"icon": "PotentialElectrode",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -10,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "direct current 3d",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -53,37 +24,25 @@
"tooltip": "Uncheck if borehole data is present",
"value": true
},
- "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": "",
- "enabled": false,
- "visible": false
- },
- "gps_receivers_offset": "",
"potential_channel_bool": true,
"mesh": {
"group": "Mesh and models",
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"starting_model": {
"association": [
@@ -95,15 +54,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -113,7 +124,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -124,22 +136,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -148,13 +164,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/direct_current_forward_pseudo3d.ui.json b/simpeg_drivers-assets/uijson/direct_current_forward_pseudo3d.ui.json
index 7aa058aa..615c47d6 100644
--- a/simpeg_drivers-assets/uijson/direct_current_forward_pseudo3d.ui.json
+++ b/simpeg_drivers-assets/uijson/direct_current_forward_pseudo3d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Direct Current (DC) 2D Batch Forward",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "direct current pseudo 3d",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -52,39 +24,17 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"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,
- "verbose": 3
+ "verbose": 3,
+ "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": "",
- "enabled": false,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": true,
- "value": 0.0,
- "verbose": 3
- },
- "gps_receivers_offset": "",
"potential_channel_bool": true,
"u_cell_size": {
"min": 0.0,
@@ -142,6 +92,17 @@
"value": "",
"visible": true
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -149,15 +110,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -167,7 +180,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"max_chunk_size": {
@@ -175,15 +189,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -192,13 +209,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"files_only": {
"label": "Generate files only",
@@ -212,6 +231,5 @@
"label": "Clean directory",
"value": false
},
- "run_command_boolean": false,
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/direct_current_inversion_2d.ui.json b/simpeg_drivers-assets/uijson/direct_current_inversion_2d.ui.json
index 27ea2eec..a34ce7b9 100644
--- a/simpeg_drivers-assets/uijson/direct_current_inversion_2d.ui.json
+++ b/simpeg_drivers-assets/uijson/direct_current_inversion_2d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Direct Current (DC) 2D Inversion",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "direct current 2d",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -59,14 +31,16 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"line_id": {
"group": "Data",
"main": true,
"min": 1,
"label": "Line number",
- "value": 1
+ "value": 1,
+ "tooltip": "Selects the line of data to be processed."
},
"receivers_radar_drape": {
"association": [
@@ -125,6 +99,8 @@
"u_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Easting core cell size (m)",
@@ -133,6 +109,8 @@
"v_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Northing core cell size (m)",
@@ -141,6 +119,8 @@
"depth_core": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Depth of core (m)",
@@ -149,6 +129,8 @@
"horizontal_padding": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Horizontal padding (m)",
@@ -157,17 +139,31 @@
"vertical_padding": {
"min": 0.0,
"group": "Mesh and models",
- "main": true,
+ "dependency": "mesh",
"dependencyType": "disabled",
+ "main": true,
"label": "Vertical padding (m)",
"value": 1000.0
},
"expansion_factor": {
"main": true,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"label": "Expansion factor",
"value": 1.1
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -175,7 +171,7 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": "",
"value": 0.001
},
@@ -186,8 +182,10 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.001
},
"lower_bound": {
@@ -197,7 +195,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -210,105 +208,78 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -317,6 +288,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -325,79 +301,98 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -405,34 +400,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -440,12 +527,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -455,7 +550,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"store_sensitivities": {
@@ -474,15 +570,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -491,13 +590,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": "",
"potential_channel_bool": true
diff --git a/simpeg_drivers-assets/uijson/direct_current_inversion_3d.ui.json b/simpeg_drivers-assets/uijson/direct_current_inversion_3d.ui.json
index a02cb330..7b351571 100644
--- a/simpeg_drivers-assets/uijson/direct_current_inversion_3d.ui.json
+++ b/simpeg_drivers-assets/uijson/direct_current_inversion_3d.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Direct Current (DC) 3D Inversion",
"icon": "PotentialElectrode",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -10,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "direct current 3d",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -53,30 +24,6 @@
"tooltip": "Uncheck if borehole data is present",
"value": true
},
- "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": "",
- "enabled": false,
- "visible": false
- },
- "gps_receivers_offset": "",
"potential_channel": {
"association": [
"Cell",
@@ -108,7 +55,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"starting_model": {
"association": [
@@ -120,7 +79,7 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": "",
"value": 0.001
},
@@ -134,9 +93,11 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": "",
- "value": 0.001
+ "optional": true,
+ "enabled": false,
+ "value": 0.0
},
"lower_bound": {
"association": [
@@ -148,7 +109,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -164,105 +125,78 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -271,6 +205,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -279,6 +218,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -287,89 +231,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -377,34 +346,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -412,12 +473,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -427,7 +496,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -438,7 +508,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -456,15 +527,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -473,13 +547,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": "",
"potential_channel_bool": true
diff --git a/simpeg_drivers-assets/uijson/direct_current_inversion_pseudo3d.ui.json b/simpeg_drivers-assets/uijson/direct_current_inversion_pseudo3d.ui.json
index d095ae87..ce546a34 100644
--- a/simpeg_drivers-assets/uijson/direct_current_inversion_pseudo3d.ui.json
+++ b/simpeg_drivers-assets/uijson/direct_current_inversion_pseudo3d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Direct Current (DC) 2D Batch Inversion",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "direct current pseudo 3d",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -52,39 +24,17 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"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,
- "verbose": 3
- },
- "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": "",
- "enabled": false,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": true,
- "value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "gps_receivers_offset": "",
"potential_channel": {
"association": "Cell",
"dataType": "Float",
@@ -161,6 +111,17 @@
"value": "",
"visible": true
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -178,6 +139,8 @@
"main": true,
"group": "Mesh and models",
"isValue": true,
+ "optional": true,
+ "enabled": false,
"parent": "mesh",
"label": "Reference Conductivity (S/m)",
"property": "",
@@ -190,7 +153,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -203,105 +166,78 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -310,6 +246,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -318,79 +259,98 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -398,34 +358,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -433,12 +485,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -448,7 +508,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"store_sensitivities": {
@@ -467,15 +528,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -484,13 +548,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"files_only": {
"label": "Generate files only",
@@ -504,7 +570,6 @@
"label": "Clean directory",
"value": true
},
- "run_command_boolean": false,
"distributed_workers": "",
"potential_channel_bool": true
}
diff --git a/simpeg_drivers-assets/uijson/fem_forward.ui.json b/simpeg_drivers-assets/uijson/fem_forward.ui.json
index bd275e19..5b059c8e 100644
--- a/simpeg_drivers-assets/uijson/fem_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/fem_forward.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Frequency-domain EM (FEM) Forward",
"icon": "surveyairborneem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "fem",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -64,7 +36,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"starting_model": {
"association": [
@@ -76,15 +60,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -94,7 +130,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -105,22 +142,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -129,13 +170,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/fem_inversion.ui.json b/simpeg_drivers-assets/uijson/fem_inversion.ui.json
index 3e9663b0..ef627ad6 100644
--- a/simpeg_drivers-assets/uijson/fem_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/fem_inversion.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Frequency-domain EM (FEM) Inversion",
"icon": "surveyairborneem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "fem",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -112,7 +84,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"starting_model": {
"association": [
@@ -124,7 +108,7 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": "",
"value": 0.001
},
@@ -138,8 +122,10 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.001
},
"lower_bound": {
@@ -152,7 +138,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -168,20 +154,91 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": 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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"inversion_style": "voxel",
+ "alpha_s": {
+ "min": 0.0,
+ "group": "Regularization",
+ "label": "Reference weight",
+ "value": 1.0,
+ "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
+ "enabled": true
+ },
"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,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -190,6 +247,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -198,101 +260,168 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
+ },
+ "max_irls_iterations": {
+ "min": 0,
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
+ "tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
+ "value": 25,
+ "enabled": true,
+ "verbose": 2
+ },
+ "starting_chi_factor": {
+ "group": "Sparse/blocky model",
+ "label": "IRLS start chi factor",
+ "enabled": true,
+ "value": 1.0,
+ "tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
+ "beta_tol": {
+ "group": "Update IRLS directive",
+ "label": "Beta tolerance",
+ "value": 0.5,
+ "min": 0.0001,
+ "verbose": 3,
+ "visible": false
+ },
+ "prctile": {
+ "group": "Update IRLS directive",
+ "label": "Percentile",
+ "value": 95,
+ "max": 100,
+ "min": 5,
+ "verbose": 3,
+ "visible": false
+ },
"chi_factor": {
"min": 0.1,
"max": 20.0,
"precision": 1,
"lineEdit": false,
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"label": "Chi factor",
"value": 1.0,
- "enabled": true
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
+ "value": true,
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
"initial_beta_ratio": {
"min": 0.0,
"precision": 2,
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"optional": true,
"enabled": true,
"label": "Initial beta ratio",
"value": 100.0,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
"initial_beta": {
"min": 0.0,
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"optional": true,
"enabled": false,
"dependency": "initial_beta_ratio",
"dependencyType": "disabled",
"label": "Initial beta",
"value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
},
"coolingFactor": {
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"label": "Beta cooling factor",
"tooltip": "Each beta cooling step will be calculated by dividing the current beta by this factor.",
"value": 2.0,
@@ -302,6 +431,18 @@
"lineEdit": false,
"verbose": 2
},
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
"max_global_iterations": {
"min": 1,
"lineEdit": false,
@@ -317,13 +458,14 @@
"value": 20,
"min": 1,
"enabled": true,
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
},
"max_cg_iterations": {
"min": 0,
"group": "Optimization",
"label": "Maximum CG iterations",
- "value": 50,
+ "value": 30,
"enabled": true,
"verbose": 2
},
@@ -335,80 +477,24 @@
"enabled": true,
"verbose": 3
},
- "alpha_s": {
- "min": 0.0,
- "group": "Regularization",
- "label": "Smallness weight",
- "value": 0.0,
- "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
- "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,
- "verbose": 2
- },
- "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.",
- "verbose": 3
- },
"f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
"min": 1e-06,
- "verbose": 3
- },
- "beta_tol": {
- "group": "Update IRLS directive",
- "label": "Beta tolerance",
- "value": 0.5,
- "min": 0.0001,
- "verbose": 3
- },
- "prctile": {
- "group": "Update IRLS directive",
- "label": "Percentile",
- "value": 95,
- "max": 100,
- "min": 5,
- "verbose": 3
- },
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
- "value": true,
- "verbose": 3
- },
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
- },
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
- "verbose": 3
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
},
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 1.0,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -416,12 +502,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -431,7 +525,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -442,7 +537,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -460,15 +556,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -477,13 +576,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/gravity_forward.ui.json b/simpeg_drivers-assets/uijson/gravity_forward.ui.json
index 573b784d..13bffb86 100644
--- a/simpeg_drivers-assets/uijson/gravity_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/gravity_forward.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Gravity Forward",
"icon": "surveyairbornegravity",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -10,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "gravity",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -59,7 +30,8 @@
"label": "Take z from topography",
"tooltip": "Sets survey elevation to topography before any offsets are applied.",
"value": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -74,7 +46,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -82,7 +55,8 @@
"optional": true,
"enabled": false,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"gz_channel_bool": {
@@ -150,7 +124,8 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
"starting_model": {
"association": [
@@ -166,11 +141,63 @@
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -180,7 +207,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -191,22 +219,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -215,14 +247,16 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"ga_group": "",
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json
index bcc75288..e60a48f7 100644
--- a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Gravity Inversion",
"icon": "surveyairbornegravity",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -10,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "gravity",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -54,37 +25,6 @@
],
"value": ""
},
- "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,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": false,
- "value": 0.0,
- "verbose": 3
- },
- "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": "",
- "enabled": false,
- "verbose": 3
- },
- "gps_receivers_offset": "",
"gz_channel": {
"association": [
"Cell",
@@ -390,7 +330,8 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
"starting_model": {
"association": [
@@ -416,7 +357,7 @@
"group": "Mesh and models",
"isValue": true,
"optional": true,
- "enabled": true,
+ "enabled": false,
"parent": "mesh",
"label": "Reference density (g/cc)",
"property": "",
@@ -454,99 +395,72 @@
"value": 10.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 1,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "max_global_iterations": {
- "min": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Maximum iterations",
- "tooltip": "Number of L2 and IRLS iterations combined",
- "value": 100,
- "enabled": true
- },
- "max_line_search_iterations": {
- "group": "Optimization",
- "label": "Maximum number of line searches",
- "value": 20,
- "min": 1,
- "enabled": true,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -555,6 +469,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -563,6 +482,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -571,89 +495,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -661,34 +610,125 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -696,12 +736,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": false,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -711,7 +759,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -722,7 +771,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -740,15 +790,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -757,14 +810,16 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"ga_group": "",
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/induced_polarization_forward_2d.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_forward_2d.ui.json
index ef9159e7..a10aee5a 100644
--- a/simpeg_drivers-assets/uijson/induced_polarization_forward_2d.ui.json
+++ b/simpeg_drivers-assets/uijson/induced_polarization_forward_2d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Induced Polarization (IP) 2D Forward",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "induced polarization 2d",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -59,14 +31,16 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"line_id": {
"group": "Survey",
"main": true,
"min": 1,
"label": "Line number",
- "value": 1
+ "value": 1,
+ "tooltip": "Selects the line of data to be processed."
},
"receivers_radar_drape": {
"association": [
@@ -105,6 +79,8 @@
"u_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Easting core cell size (m)",
@@ -113,6 +89,8 @@
"v_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Northing core cell size (m)",
@@ -121,6 +99,8 @@
"depth_core": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Depth of core (m)",
@@ -129,6 +109,8 @@
"horizontal_padding": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Horizontal padding (m)",
@@ -137,17 +119,31 @@
"vertical_padding": {
"min": 0.0,
"group": "Mesh and models",
- "main": true,
+ "dependency": "mesh",
"dependencyType": "disabled",
+ "main": true,
"label": "Vertical padding (m)",
"value": 1000.0
},
"expansion_factor": {
"main": true,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"label": "Expansion factor",
"value": 1.1
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"conductivity_model": {
"association": "Cell",
"dataType": "Float",
@@ -166,15 +162,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Chargeability (v/v)",
+ "label": "Value(s)",
"property": "",
"value": 0.0
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -184,7 +232,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"max_chunk_size": {
@@ -192,15 +241,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -209,13 +261,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/induced_polarization_forward_3d.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_forward_3d.ui.json
index 9025dd34..acd13b1e 100644
--- a/simpeg_drivers-assets/uijson/induced_polarization_forward_3d.ui.json
+++ b/simpeg_drivers-assets/uijson/induced_polarization_forward_3d.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Induced Polarization (IP) 3D Forward",
"icon": "PotentialElectrode",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -10,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "induced polarization 3d",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -83,7 +54,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"conductivity_model": {
"association": [
@@ -109,17 +92,69 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Chargeability (v/v)",
+ "label": "Value(s)",
"property": "",
"min": 0.0,
"max": 10000.0,
"value": 0.0
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -129,7 +164,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -140,22 +176,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -164,13 +204,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/induced_polarization_forward_pseudo3d.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_forward_pseudo3d.ui.json
index a7f1e031..09e68683 100644
--- a/simpeg_drivers-assets/uijson/induced_polarization_forward_pseudo3d.ui.json
+++ b/simpeg_drivers-assets/uijson/induced_polarization_forward_pseudo3d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Induced Polarization (IP) 2D Batch Forward",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "induced polarization pseudo 3d",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -52,14 +24,16 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"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,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -74,7 +48,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -82,7 +57,8 @@
"optional": true,
"enabled": true,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"chargeability_channel_bool": true,
@@ -142,6 +118,17 @@
"value": "",
"visible": true
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"conductivity_model": {
"association": "Cell",
"dataType": "Float",
@@ -160,15 +147,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Chargeability (v/v)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -178,7 +217,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"max_chunk_size": {
@@ -186,15 +226,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -203,13 +246,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"files_only": {
"label": "Generate files only",
@@ -223,6 +268,5 @@
"label": "Clean directory",
"value": false
},
- "run_command_boolean": false,
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/induced_polarization_inversion_2d.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_inversion_2d.ui.json
index 424bf565..714f7a6f 100644
--- a/simpeg_drivers-assets/uijson/induced_polarization_inversion_2d.ui.json
+++ b/simpeg_drivers-assets/uijson/induced_polarization_inversion_2d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Induced Polarization (IP) 2D Inversion",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "induced polarization 2d",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -59,14 +31,16 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"line_id": {
"group": "Data",
"main": true,
"min": 1,
"label": "Line number",
- "value": 1
+ "value": 1,
+ "tooltip": "Selects the line of data to be processed."
},
"receivers_radar_drape": {
"association": [
@@ -124,6 +98,8 @@
"u_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Easting core cell size (m)",
@@ -132,6 +108,8 @@
"v_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Northing core cell size (m)",
@@ -140,6 +118,8 @@
"depth_core": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Depth of core (m)",
@@ -148,6 +128,8 @@
"horizontal_padding": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": true,
"enabled": true,
"label": "Horizontal padding (m)",
@@ -156,17 +138,31 @@
"vertical_padding": {
"min": 0.0,
"group": "Mesh and models",
- "main": true,
+ "dependency": "mesh",
"dependencyType": "disabled",
+ "main": true,
"label": "Vertical padding (m)",
"value": 1000.0
},
"expansion_factor": {
"main": true,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"label": "Expansion factor",
"value": 1.1
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"conductivity_model": {
"association": "Cell",
"dataType": "Float",
@@ -198,6 +194,8 @@
"parent": "mesh",
"label": "Reference chargeability (V/V)",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.0
},
"lower_bound": {
@@ -210,8 +208,8 @@
"label": "Lower bound (V/V)",
"property": "",
"optional": true,
- "value": 0,
- "enabled": false
+ "value": 0.0,
+ "enabled": true
},
"upper_bound": {
"association": "Cell",
@@ -226,99 +224,72 @@
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -327,6 +298,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -335,79 +311,98 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -415,47 +410,147 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
"group": "Update sensitivity weights directive",
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
- "value": false,
- "verbose": 2
+ "value": true,
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -465,7 +560,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"max_ram": "",
@@ -484,15 +580,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -501,13 +600,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": "",
"chargeability_channel_bool": true
diff --git a/simpeg_drivers-assets/uijson/induced_polarization_inversion_3d.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_inversion_3d.ui.json
index 1fa1523f..aede42d7 100644
--- a/simpeg_drivers-assets/uijson/induced_polarization_inversion_3d.ui.json
+++ b/simpeg_drivers-assets/uijson/induced_polarization_inversion_3d.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Induced Polarization (IP) 3D Inversion",
"icon": "PotentialElectrode",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -10,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "induced polarization 3d",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -108,7 +79,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"conductivity_model": {
"association": [
@@ -152,6 +135,8 @@
"parent": "mesh",
"label": "Reference Chargeability (V/V)",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.0
},
"lower_bound": {
@@ -167,8 +152,8 @@
"label": "Lower bound (V/V)",
"property": "",
"optional": true,
- "value": 0,
- "enabled": false
+ "value": 0.0,
+ "enabled": true
},
"upper_bound": {
"association": [
@@ -186,99 +171,72 @@
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -287,6 +245,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -295,6 +258,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -303,137 +271,262 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
"label": "Percentile",
- "value": 50,
+ "value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
"group": "Update sensitivity weights directive",
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
- "value": false,
- "verbose": 2
+ "value": true,
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -443,7 +536,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -454,7 +548,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_ram": "",
"store_sensitivities": {
@@ -472,15 +567,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -489,13 +587,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": "",
"chargeability_channel_bool": true
diff --git a/simpeg_drivers-assets/uijson/induced_polarization_inversion_pseudo3d.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_inversion_pseudo3d.ui.json
index 8b648f90..c78b126f 100644
--- a/simpeg_drivers-assets/uijson/induced_polarization_inversion_pseudo3d.ui.json
+++ b/simpeg_drivers-assets/uijson/induced_polarization_inversion_pseudo3d.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Induced Polarization (IP) 2D Batch Inversion",
"icon": "PotentialElectrode",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "induced polarization pseudo 3d",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -52,14 +24,16 @@
"main": true,
"label": "Line ID",
"parent": "data_object",
- "value": ""
+ "value": "",
+ "tooltip": "Selects the data representing the different lines in the survey."
},
"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,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -74,7 +48,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -82,7 +57,8 @@
"optional": true,
"enabled": true,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"chargeability_channel": {
@@ -161,6 +137,17 @@
"value": "",
"visible": true
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"conductivity_model": {
"association": "Cell",
"dataType": "Float",
@@ -192,6 +179,8 @@
"parent": "mesh",
"label": "Reference chargeability (V/V)",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.001
},
"lower_bound": {
@@ -204,8 +193,8 @@
"label": "Lower bound (V/V)",
"property": "",
"optional": true,
- "value": 1e-08,
- "enabled": false
+ "value": 0.0,
+ "enabled": true
},
"upper_bound": {
"association": "Cell",
@@ -220,99 +209,72 @@
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -321,6 +283,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -329,79 +296,98 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -409,34 +395,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -444,12 +522,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -459,7 +545,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": 1,
"store_sensitivities": {
@@ -478,15 +565,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -495,13 +585,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"files_only": {
"label": "Generate files only",
@@ -515,7 +607,6 @@
"label": "Clean directory",
"value": true
},
- "run_command_boolean": false,
"distributed_workers": "",
"chargeability_channel_bool": true
}
diff --git a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json
index 3a66fa4b..9bdec927 100644
--- a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json
@@ -1,6 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "SimPEG Joint Cross Gradient Inversion",
+ "icon": "",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -8,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "joint cross gradient",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"group_a": {
"main": true,
"group": "Joint",
@@ -126,93 +99,59 @@
"enabled": false,
"optional": true
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 1,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "max_global_iterations": {
- "min": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Maximum iterations",
- "tooltip": "Number of L2 and IRLS iterations combined",
- "value": 100,
- "enabled": true
- },
- "max_line_search_iterations": {
- "group": "Optimization",
- "label": "Maximum number of line searches",
- "value": 20,
- "min": 1,
- "enabled": true,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
@@ -299,35 +238,28 @@
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -335,34 +267,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -370,12 +394,14 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -385,7 +411,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"store_sensitivities": {
"choiceList": [
@@ -403,15 +430,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -420,13 +450,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json
index 2b6ec002..74967253 100644
--- a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json
@@ -1,6 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "SimPEG Joint Surveys Inversion",
+ "icon": "",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -8,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "joint surveys",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"group_a": {
"main": true,
"group": "Joint",
@@ -95,6 +68,17 @@
"enabled": false,
"optional": true
},
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and Models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -112,7 +96,7 @@
"association": "Cell",
"main": true,
"dataType": "Float",
- "group": "Mesh and models",
+ "group": "Mesh and Models",
"isValue": true,
"parent": "mesh",
"label": "Reference",
@@ -147,99 +131,72 @@
"value": 10.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 1,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "max_global_iterations": {
- "min": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Maximum iterations",
- "tooltip": "Number of L2 and IRLS iterations combined",
- "value": 100,
- "enabled": true
- },
- "max_line_search_iterations": {
- "group": "Optimization",
- "label": "Maximum number of line searches",
- "value": 20,
- "min": 1,
- "enabled": true,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -248,6 +205,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -256,6 +218,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -264,89 +231,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -354,34 +346,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -389,12 +473,14 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -404,7 +490,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"store_sensitivities": {
"choiceList": [
@@ -422,15 +509,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -439,13 +529,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json
index 108874f1..5edd3802 100644
--- a/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/magnetic_scalar_forward.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Magnetic Forward",
- "icon": "surveyairbornegravity",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "icon": "surveyairbornemagnetics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -51,7 +51,10 @@
"{48f5054a-1c5c-4ca4-9048-80f36dc60a06}",
"{b020a277-90e2-4cd7-84d6-612ee3f25051}"
],
- "value": ""
+ "value": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
"topography": {
"association": [
@@ -64,11 +67,30 @@
"optional": true,
"enabled": false,
"label": "Elevation channel",
- "tooltip": "Set elevation from channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
"parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
"value": "",
"verbose": 2
},
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"data_object": {
"main": true,
"group": "Survey",
@@ -84,37 +106,6 @@
],
"value": ""
},
- "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,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": false,
- "value": 0.0,
- "verbose": 3
- },
- "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": "",
- "enabled": false,
- "verbose": 3
- },
- "gps_receivers_offset": "",
"tmi_channel_bool": {
"group": "Survey",
"main": true,
@@ -180,7 +171,8 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
"starting_model": {
"association": [
@@ -200,7 +192,8 @@
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -210,7 +203,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -221,22 +215,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -245,14 +243,16 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"ga_group": "",
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json
index 2bae66e3..5991b367 100644
--- a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Magnetic Inversion",
"icon": "surveyairbornemagnetics",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -40,35 +40,6 @@
"label": "Declination (deg)",
"value": 0.0
},
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -84,37 +55,6 @@
],
"value": ""
},
- "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,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": false,
- "value": 0.0,
- "verbose": 3
- },
- "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": "",
- "enabled": false,
- "verbose": 3
- },
- "gps_receivers_offset": "",
"tmi_channel": {
"association": [
"Cell",
@@ -420,7 +360,8 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
"starting_model": {
"association": [
@@ -446,7 +387,7 @@
"group": "Mesh and models",
"isValue": true,
"optional": true,
- "enabled": true,
+ "enabled": false,
"parent": "mesh",
"label": "Reference susceptibility (SI)",
"property": "",
@@ -466,7 +407,7 @@
"property": "",
"optional": true,
"value": 0.0,
- "enabled": true
+ "enabled": false
},
"upper_bound": {
"association": [
@@ -484,99 +425,72 @@
"value": 1.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 10.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 1,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "max_global_iterations": {
- "min": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Maximum iterations",
- "tooltip": "Number of L2 and IRLS iterations combined",
- "value": 100,
- "enabled": true
- },
- "max_line_search_iterations": {
- "group": "Optimization",
- "label": "Maximum number of line searches",
- "value": 20,
- "min": 1,
- "enabled": true,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -585,6 +499,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -593,6 +512,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -601,89 +525,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -691,34 +640,125 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -726,12 +766,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": false,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -741,7 +789,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -752,7 +801,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -770,15 +820,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -787,14 +840,16 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"ga_group": "",
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json
index b0b8a291..0273839c 100644
--- a/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/magnetic_vector_forward.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Magnetic Vector (MVI) Forward",
"icon": "surveyairbornemagnetics",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -51,7 +51,10 @@
"{48f5054a-1c5c-4ca4-9048-80f36dc60a06}",
"{b020a277-90e2-4cd7-84d6-612ee3f25051}"
],
- "value": ""
+ "value": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
"topography": {
"association": [
@@ -64,11 +67,30 @@
"optional": true,
"enabled": false,
"label": "Elevation channel",
- "tooltip": "Set elevation from channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
"parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
"value": "",
"verbose": 2
},
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"data_object": {
"main": true,
"group": "Survey",
@@ -84,37 +106,6 @@
],
"value": ""
},
- "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,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": false,
- "value": 0.0,
- "verbose": 3
- },
- "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": "",
- "enabled": false,
- "verbose": 3
- },
- "gps_receivers_offset": "",
"tmi_channel_bool": {
"group": "Survey",
"main": true,
@@ -180,7 +171,8 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
"starting_model": {
"association": [
@@ -232,7 +224,8 @@
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -242,7 +235,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -253,22 +247,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -277,14 +275,16 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"ga_group": "",
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json
index e8686f60..c04086e2 100644
--- a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json
@@ -1,8 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Magnetic Vector (MVI) Inversion",
- "icon": "surveyairbornegravity",
- "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/",
+ "icon": "surveyairbornemagnetics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -40,35 +40,6 @@
"label": "Declination (deg)",
"value": 0.0
},
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -84,37 +55,6 @@
],
"value": ""
},
- "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,
- "verbose": 3
- },
- "receivers_offset_z": {
- "group": "Data pre-processing",
- "label": "Z static offset",
- "optional": true,
- "enabled": false,
- "value": 0.0,
- "verbose": 3
- },
- "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": "",
- "enabled": false,
- "verbose": 3
- },
- "gps_receivers_offset": "",
"tmi_channel": {
"association": [
"Cell",
@@ -420,7 +360,8 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
"starting_model": {
"association": [
@@ -446,7 +387,7 @@
"group": "Mesh and models",
"isValue": true,
"optional": true,
- "enabled": true,
+ "enabled": false,
"parent": "mesh",
"label": "Reference susceptibility (SI)",
"property": "",
@@ -548,99 +489,72 @@
"property": "",
"value": 0.0
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 100.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 1,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "max_global_iterations": {
- "min": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Maximum iterations",
- "tooltip": "Number of L2 and IRLS iterations combined",
- "value": 100,
- "enabled": true
- },
- "max_line_search_iterations": {
- "group": "Optimization",
- "label": "Maximum number of line searches",
- "value": 20,
- "min": 1,
- "enabled": true,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference weight",
"value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -649,6 +563,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -657,6 +576,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -665,89 +589,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -755,34 +704,125 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 0.001,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -790,12 +830,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": false,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -805,7 +853,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -816,7 +865,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -834,15 +884,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -851,14 +904,16 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"ga_group": "",
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json
index 038c2bc8..a95b3af4 100644
--- a/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/magnetotellurics_forward.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Magnetotellurics (MT) Forward",
"icon": "surveymagnetotellurics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "magnetotellurics",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -50,7 +22,8 @@
"label": "Take z from topography",
"tooltip": "Sets survey elevation to topography before any offsets are applied.",
"value": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -65,7 +38,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -73,7 +47,8 @@
"optional": true,
"enabled": false,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"zxx_real_channel_bool": {
@@ -129,19 +104,24 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
- "background_conductivity": {
- "association": [
- "Cell",
- "Vertex"
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
],
- "dataType": "Float",
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
+ "background_conductivity": {
"group": "Mesh and models",
"main": true,
- "isValue": true,
- "parent": "mesh",
- "label": "Background conductivity (S/m)",
+ "label": "Background",
"property": "",
"value": 0.001
},
@@ -155,15 +135,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -173,7 +205,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -184,22 +217,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -208,13 +245,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json
index d0897660..17d0164e 100644
--- a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Magnetotellurics (MT) Inversion",
"icon": "surveymagnetotellurics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "magnetotellurics",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -50,7 +22,8 @@
"label": "Take z from topography",
"tooltip": "Sets survey elevation to topography before any offsets are applied.",
"value": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -65,7 +38,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -73,7 +47,8 @@
"optional": true,
"enabled": false,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"zxx_real_channel": {
@@ -321,19 +296,24 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
- "background_conductivity": {
- "association": [
- "Cell",
- "Vertex"
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
],
- "dataType": "Float",
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
+ "background_conductivity": {
"group": "Mesh and models",
"main": true,
- "isValue": true,
- "parent": "mesh",
- "label": "Background conductivity (S/m)",
+ "label": "Background",
"property": "",
"value": 0.001
},
@@ -347,7 +327,7 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": "",
"value": 0.001
},
@@ -361,8 +341,10 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.001
},
"lower_bound": {
@@ -375,7 +357,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -391,105 +373,78 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 100.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 4,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 50,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
- "value": 0.0,
+ "label": "Reference weight",
+ "value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -498,6 +453,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -506,6 +466,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -514,89 +479,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -604,34 +594,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
- "value": 0.001,
- "max": 1.0,
+ "value": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -639,12 +721,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -654,7 +744,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -665,7 +756,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -683,15 +775,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -700,13 +795,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/tdem_forward.ui.json b/simpeg_drivers-assets/uijson/tdem_forward.ui.json
index 38bdf19c..21b94d59 100644
--- a/simpeg_drivers-assets/uijson/tdem_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/tdem_forward.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Time-domain EM (TEM) Forward",
"icon": "surveyairborneem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "tdem",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -83,7 +55,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"starting_model": {
"association": [
@@ -95,15 +79,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -113,7 +149,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -124,22 +161,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -148,13 +189,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json
index 1cf053df..928db145 100644
--- a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Time-domain EM (TEM) Inversion",
"icon": "surveyairborneem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "tdem",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -155,7 +127,19 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
+ },
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
+ ],
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
},
"starting_model": {
"association": [
@@ -167,7 +151,7 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": "",
"value": 0.001
},
@@ -181,8 +165,10 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.001
},
"lower_bound": {
@@ -192,7 +178,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -205,20 +191,91 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": 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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"inversion_style": "voxel",
+ "alpha_s": {
+ "min": 0.0,
+ "group": "Regularization",
+ "label": "Reference weight",
+ "value": 1.0,
+ "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
+ "enabled": true
+ },
"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,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -227,6 +284,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -235,101 +297,168 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
},
"gradient_type": {
"choiceList": [
"total",
"components"
],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
+ },
+ "max_irls_iterations": {
+ "min": 0,
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
+ "tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
+ "value": 25,
+ "enabled": true,
+ "verbose": 2
+ },
+ "starting_chi_factor": {
+ "group": "Sparse/blocky model",
+ "label": "IRLS start chi factor",
+ "enabled": true,
+ "value": 1.0,
+ "tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
+ "beta_tol": {
+ "group": "Update IRLS directive",
+ "label": "Beta tolerance",
+ "value": 0.5,
+ "min": 0.0001,
+ "verbose": 3,
+ "visible": false
+ },
+ "prctile": {
+ "group": "Update IRLS directive",
+ "label": "Percentile",
+ "value": 95,
+ "max": 100,
+ "min": 5,
+ "verbose": 3,
+ "visible": false
+ },
"chi_factor": {
"min": 0.1,
"max": 20.0,
"precision": 1,
"lineEdit": false,
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"label": "Chi factor",
"value": 1.0,
- "enabled": true
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
+ "value": true,
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
"initial_beta_ratio": {
"min": 0.0,
"precision": 2,
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"optional": true,
"enabled": true,
"label": "Initial beta ratio",
"value": 100.0,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
"initial_beta": {
"min": 0.0,
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"optional": true,
"enabled": false,
"dependency": "initial_beta_ratio",
"dependencyType": "disabled",
"label": "Initial beta",
"value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 4,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
},
"coolingFactor": {
- "group": "Optimization",
+ "group": "Cooling schedule/target",
"label": "Beta cooling factor",
"tooltip": "Each beta cooling step will be calculated by dividing the current beta by this factor.",
"value": 2.0,
@@ -339,6 +468,18 @@
"lineEdit": false,
"verbose": 2
},
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
"max_global_iterations": {
"min": 1,
"lineEdit": false,
@@ -354,13 +495,14 @@
"value": 20,
"min": 1,
"enabled": true,
- "verbose": 3
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
},
"max_cg_iterations": {
"min": 0,
"group": "Optimization",
"label": "Maximum CG iterations",
- "value": 50,
+ "value": 30,
"enabled": true,
"verbose": 2
},
@@ -372,80 +514,24 @@
"enabled": true,
"verbose": 3
},
- "alpha_s": {
- "min": 0.0,
- "group": "Regularization",
- "label": "Smallness weight",
- "value": 0.0,
- "tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
- "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,
- "verbose": 2
- },
- "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.",
- "verbose": 3
- },
"f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
"min": 1e-06,
- "verbose": 3
- },
- "beta_tol": {
- "group": "Update IRLS directive",
- "label": "Beta tolerance",
- "value": 0.5,
- "min": 0.0001,
- "verbose": 3
- },
- "prctile": {
- "group": "Update IRLS directive",
- "label": "Percentile",
- "value": 95,
- "max": 100,
- "min": 5,
- "verbose": 3
- },
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
- "value": true,
- "verbose": 3
- },
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
- },
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
- "verbose": 3
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
},
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
"value": 1.0,
- "max": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -453,12 +539,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -468,7 +562,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -479,7 +574,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"store_sensitivities": {
"choiceList": [
@@ -496,15 +592,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -513,13 +612,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/tipper_forward.ui.json b/simpeg_drivers-assets/uijson/tipper_forward.ui.json
index 3d86364a..8a135653 100644
--- a/simpeg_drivers-assets/uijson/tipper_forward.ui.json
+++ b/simpeg_drivers-assets/uijson/tipper_forward.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Tipper Forward",
"icon": "surveyztem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "tipper",
"forward_only": true,
- "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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Survey",
@@ -50,7 +22,8 @@
"label": "Take z from topography",
"tooltip": "Sets survey elevation to topography before any offsets are applied.",
"value": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -65,7 +38,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -73,7 +47,8 @@
"optional": true,
"enabled": false,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"txz_real_channel_bool": {
@@ -105,19 +80,24 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
- "background_conductivity": {
- "association": [
- "Cell",
- "Vertex"
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
],
- "dataType": "Float",
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
+ "background_conductivity": {
"group": "Mesh and models",
"main": true,
- "isValue": true,
- "parent": "mesh",
- "label": "Background conductivity (S/m)",
+ "label": "Background",
"property": "",
"value": 0.001
},
@@ -131,15 +111,67 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Conductivity (s/m)",
+ "label": "Value(s)",
"property": "",
"value": 0.001
},
+ "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": "",
+ "optional": true,
+ "enabled": true,
+ "tooltip": "Select a topography object to define the active cells for inversion."
+ },
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
+ "optional": true,
+ "enabled": false,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
+ "verbose": 2
+ },
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
+ },
"output_tile_files": false,
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -149,7 +181,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -160,22 +193,26 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -184,13 +221,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json
index 65b602ac..17d6c60e 100644
--- a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json
+++ b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json
@@ -1,7 +1,8 @@
{
- "version": "0.1.0-alpha.1",
+ "version": "0.2.0-alpha.1",
"title": "Tipper Inversion",
"icon": "surveyztem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"conda_environment": "simpeg_drivers",
"run_command": "simpeg_drivers.driver",
"geoh5": "",
@@ -9,35 +10,6 @@
"workspace_geoh5": "",
"inversion_type": "tipper",
"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,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2
- },
"data_object": {
"main": true,
"group": "Data",
@@ -50,7 +22,8 @@
"label": "Take z from topography",
"tooltip": "Sets survey elevation to topography before any offsets are applied.",
"value": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_radar_drape": {
"association": [
@@ -65,7 +38,8 @@
"parent": "data_object",
"value": "",
"enabled": false,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -73,7 +47,8 @@
"optional": true,
"enabled": false,
"value": 0.0,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"gps_receivers_offset": "",
"txz_real_channel": {
@@ -201,19 +176,24 @@
"main": true,
"label": "Mesh",
"meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
- "value": ""
+ "value": "",
+ "tooltip": "Select a mesh for the inversion."
},
- "background_conductivity": {
- "association": [
- "Cell",
- "Vertex"
+ "model_type": {
+ "choiceList": [
+ "Conductivity (S/m)",
+ "Resistivity (Ohm-m)"
],
- "dataType": "Float",
+ "main": true,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)"
+ },
+ "background_conductivity": {
"group": "Mesh and models",
"main": true,
- "isValue": true,
- "parent": "mesh",
- "label": "Background conductivity (S/m)",
+ "label": "Background",
"property": "",
"value": 0.001
},
@@ -227,7 +207,7 @@
"main": true,
"isValue": true,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": "",
"value": 0.001
},
@@ -241,8 +221,10 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": "",
+ "optional": true,
+ "enabled": false,
"value": 0.001
},
"lower_bound": {
@@ -255,7 +237,7 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": "",
"optional": true,
"value": 1e-08,
@@ -271,105 +253,78 @@
"group": "Mesh and models",
"isValue": true,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": "",
"optional": true,
"value": 100.0,
"enabled": false
},
- "output_tile_files": false,
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": false,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": true
- },
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": true,
"enabled": true,
- "label": "Initial beta ratio",
- "value": 100.0,
- "verbose": 2
+ "tooltip": "Select a topography object to define the active cells for inversion."
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": [
+ "Vertex",
+ "Cell"
+ ],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": true,
"optional": true,
"enabled": false,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
- "verbose": 2
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 4,
- "min": 1,
- "LineEdit": false,
- "max": 10,
- "precision": 1,
- "verbose": 2
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": false,
- "verbose": 2
- },
- "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,
- "verbose": 3
- },
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": true,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 0.0001,
- "enabled": true,
- "verbose": 3
+ "active_model": {
+ "association": "Cell",
+ "dataType": [
+ "Referenced",
+ "Boolean",
+ "Integer"
+ ],
+ "group": "Topography",
+ "main": true,
+ "enabled": false,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": ""
},
+ "output_tile_files": false,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
- "value": 0.0,
+ "label": "Reference weight",
+ "value": 1.0,
"tooltip": "Constant ratio compared to other weights. Larger values result in models that remain close to the reference model",
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_x": {
@@ -378,6 +333,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_y": {
@@ -386,6 +346,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"length_scale_z": {
@@ -394,79 +359,114 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": true,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": true
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": false,
- "enabled": true
+ "lineEdit": true,
+ "enabled": true,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function."
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function."
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function."
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": true,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": false,
- "enabled": true
+ "enabled": true,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function."
+ },
+ "gradient_type": {
+ "choiceList": [
+ "total",
+ "components"
+ ],
+ "group": "Sparse/blocky model",
+ "label": "Gradient type",
+ "value": "total",
+ "verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients."
},
"max_irls_iterations": {
"min": 0,
- "group": "Update IRLS directive",
- "label": "Maximum number of IRLS iterations",
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
"tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
"value": 25,
"enabled": true,
"verbose": 2
},
"starting_chi_factor": {
- "group": "Update IRLS directive",
+ "group": "Sparse/blocky model",
"label": "IRLS start chi factor",
- "optional": true,
- "enabled": false,
+ "enabled": true,
"value": 1.0,
"tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
"verbose": 3
},
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 0.0001,
- "min": 1e-06,
- "verbose": 3
- },
"beta_tol": {
"group": "Update IRLS directive",
"label": "Beta tolerance",
"value": 0.5,
"min": 0.0001,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"prctile": {
"group": "Update IRLS directive",
@@ -474,44 +474,126 @@
"value": 95,
"max": 100,
"min": 5,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": false,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": true,
+ "tooltip": "The global target data misfit value."
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": true,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor."
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": true,
+ "label": "Initial beta ratio",
+ "value": 100.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients."
},
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": false,
- "verbose": 3
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": true,
+ "enabled": false,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization."
},
- "gradient_type": {
- "choiceList": [
- "total",
- "components"
- ],
- "group": "Regularization",
- "label": "Gradient type",
- "value": "total",
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": false,
+ "verbose": 2
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": false,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": true,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems."
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations."
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": true,
+ "verbose": 2
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": true,
"verbose": 3
},
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": true,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed."
+ },
"sens_wts_threshold": {
"group": "Update sensitivity weights directive",
"tooltip": "Update sensitivity weight threshold",
"label": "Threshold (%)",
- "value": 0.001,
- "max": 1.0,
+ "value": 1.0,
+ "max": 100.0,
"min": 0.0,
- "precision": 5,
+ "precision": 3,
+ "enabled": true,
"verbose": 2
},
"every_iteration_bool": {
@@ -519,12 +601,20 @@
"tooltip": "Update weights at every iteration",
"label": "Every iteration",
"value": true,
- "verbose": 2
+ "verbose": 2,
+ "enabled": true
+ },
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": false
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
- "value": true
+ "value": true,
+ "visible": false
},
"n_cpu": {
"min": 1,
@@ -534,7 +624,8 @@
"optional": true,
"enabled": false,
"label": "Number of CPUs",
- "value": 1
+ "value": 1,
+ "visible": false
},
"tile_spatial": {
"group": "Compute",
@@ -545,7 +636,8 @@
"value": 1,
"min": 1,
"max": 1000,
- "verbose": 2
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library."
},
"max_ram": "",
"store_sensitivities": {
@@ -563,15 +655,18 @@
"group": "Compute",
"optional": true,
"enabled": true,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
- "verbose": 3
+ "verbose": 3,
+ "visible": false,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation."
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": true,
- "verbose": 3
+ "verbose": 3,
+ "visible": false
},
"out_group": {
"label": "SimPEG group",
@@ -580,13 +675,15 @@
"group": "Drag-and-drop options",
"visible": true,
"optional": true,
- "enabled": false
+ "enabled": false,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved."
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": true,
- "value": false
+ "value": false,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application."
},
"distributed_workers": ""
}
diff --git a/simpeg_drivers/__init__.py b/simpeg_drivers/__init__.py
index b0cdfc89..8b199ae0 100644
--- a/simpeg_drivers/__init__.py
+++ b/simpeg_drivers/__init__.py
@@ -1,29 +1,29 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
-__version__ = "0.1.1"
+__version__ = "0.2.0"
+
+
+import logging
from pathlib import Path
from simpeg_drivers.constants import default_ui_json
from simpeg_drivers.params import InversionBaseParams
+
+logging.basicConfig(level=logging.INFO)
+
__all__ = [
"DRIVER_MAP",
"InversionBaseParams",
@@ -74,7 +74,7 @@ def assets_path() -> Path:
"JointSurveyDriver",
),
"fem": (
- "simpeg_drivers.airborne_electromagnetics.frequency_domain.driver",
+ "simpeg_drivers.electromagnetics.frequency_domain.driver",
"FrequencyDomainElectromagneticsDriver",
),
"joint cross gradient": (
diff --git a/simpeg_drivers/components/__init__.py b/simpeg_drivers/components/__init__.py
index 0e01f0b5..c577782d 100644
--- a/simpeg_drivers/components/__init__.py
+++ b/simpeg_drivers/components/__init__.py
@@ -1,19 +1,13 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers is distributed under the terms and conditions of the MIT License '
+# (see LICENSE file at the root of this source code package). '
+# '
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
# pylint: disable=unused-import
# flake8: noqa
diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py
index 8e49c428..77c1de6b 100644
--- a/simpeg_drivers/components/data.py
+++ b/simpeg_drivers/components/data.py
@@ -1,27 +1,22 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers.params import InversionBaseParams
from copy import deepcopy
@@ -30,14 +25,14 @@
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 simpeg import maps
+from simpeg.electromagnetics.static.utils.static_utils import geometric_factor
from simpeg_drivers.utils.utils import create_nested_mesh, drape_2_tensor
from .factories import (
EntityFactory,
- SaveIterationGeoh5Factory,
+ SaveDataGeoh5Factory,
SimulationFactory,
SurveyFactory,
)
@@ -107,7 +102,7 @@ def __init__(self, workspace: Workspace, params: InversionBaseParams):
self.entity = None
self.data_entity = None
self._observed_data_types = {}
- self.survey = None
+ self._survey = None
self._initialize()
@@ -141,14 +136,6 @@ def _initialize(self) -> None:
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:
"""
@@ -212,7 +199,7 @@ def write_entity(self):
return entity
- def save_data(self, entity):
+ def save_data(self):
"""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"
@@ -224,31 +211,31 @@ def save_data(self, entity):
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(
+ data_channel = self.entity.add_data(
{f"{basename}_{component}_[{ind}]": {"values": dnorm}}
)
- data_dict[component] = entity.add_data_to_group(
+ data_dict[component] = self.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
+ 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(
+ uncert_entity = self.entity.add_data(
{f"Uncertainties_{component}_[{ind}]": {"values": uncerts}}
)
- uncert_dict[component] = entity.add_data_to_group(
+ uncert_dict[component] = self.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(
+ data_dict[component] = self.entity.add_data(
{f"{basename}_{component}": {"values": dnorm}}
)
@@ -262,15 +249,15 @@ def save_data(self, entity):
)
uncerts[np.isinf(uncerts)] = np.nan
- uncert_dict[component] = entity.add_data(
+ uncert_dict[component] = self.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"]
+ apparent_property *= self.survey.apparent_resistivity
- data_dict["apparent_resistivity"] = entity.add_data(
+ data_dict["apparent_resistivity"] = self.entity.add_data(
{
f"{basename}_apparent_resistivity": {
"values": apparent_property,
@@ -391,14 +378,19 @@ def create_survey(
"""
survey_factory = SurveyFactory(self.params)
- survey = survey_factory.build(
+ survey, local_index, ordering = survey_factory.build(
data=self,
mesh=mesh,
local_index=local_index,
channel=channel,
)
- return survey
+ if "direct current" in self.params.inversion_type:
+ survey.apparent_resistivity = 1 / (
+ geometric_factor(survey)[np.argsort(local_index)] + 1e-10
+ )
+
+ return survey, local_index, ordering
def simulation(
self,
@@ -479,12 +471,12 @@ def simulate(self, model, inverse_problem, sorting, ordering):
model, compute_J=False if self.params.forward_only else True
)
if self.params.forward_only:
- save_directive = SaveIterationGeoh5Factory(self.params).build(
+ save_directive = SaveDataGeoh5Factory(self.params).build(
inversion_object=self,
sorting=np.argsort(np.hstack(sorting)),
ordering=ordering,
)
- save_directive.save_components(0, dpred)
+ save_directive.write(0, dpred)
inverse_problem.dpred = dpred
@@ -527,3 +519,10 @@ def update_params(self, data_dict, uncert_dict):
parent=self.entity, values=self.params.line_object.values[self.mask]
)
self.params.line_object = new_line
+
+ @property
+ def survey(self):
+ if self._survey is None:
+ self._survey, _, _ = self.create_survey()
+
+ return self._survey
diff --git a/simpeg_drivers/components/factories/__init__.py b/simpeg_drivers/components/factories/__init__.py
index 796aed40..b1317380 100644
--- a/simpeg_drivers/components/factories/__init__.py
+++ b/simpeg_drivers/components/factories/__init__.py
@@ -1,24 +1,21 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 .directives_factory import (
+ DirectivesFactory,
+ SaveDataGeoh5Factory,
+ SaveModelGeoh5Factory,
+)
from .entity_factory import EntityFactory
from .misfit_factory import MisfitFactory
from .simulation_factory import SimulationFactory
diff --git a/simpeg_drivers/components/factories/abstract_factory.py b/simpeg_drivers/components/factories/abstract_factory.py
index 55fba887..d693ff94 100644
--- a/simpeg_drivers/components/factories/abstract_factory.py
+++ b/simpeg_drivers/components/factories/abstract_factory.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py
index 64a3b032..190ff7cf 100644
--- a/simpeg_drivers/components/factories/directives_factory.py
+++ b/simpeg_drivers/components/factories/directives_factory.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -21,14 +14,17 @@
from __future__ import annotations
+from abc import ABC
from typing import TYPE_CHECKING
import numpy as np
-from SimPEG import directives, maps
-from SimPEG.utils.mat_utils import cartesian2amplitude_dip_azimuth
+from geoh5py.groups.property_group import GroupTypeEnum
+from simpeg import directives, maps
+from simpeg.utils.mat_utils import cartesian2amplitude_dip_azimuth
from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory
+
if TYPE_CHECKING:
from simpeg_drivers.driver import InversionDriver
@@ -45,9 +41,13 @@ def __init__(self, driver: InversionDriver):
self._beta_estimate_by_eigenvalues_directive = None
self._update_preconditioner_directive = None
self._save_iteration_model_directive = None
+ self._save_property_group = None
+ self._save_sensitivities_directive = None
self._save_iteration_data_directive = None
self._save_iteration_residual_directive = None
+ self._save_iteration_log_files = None
self._save_iteration_apparent_resistivity_directive = None
+ self._scale_misfits = None
@property
def beta_estimate_by_eigenvalues_directive(self):
@@ -57,8 +57,8 @@ def beta_estimate_by_eigenvalues_directive(self):
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", seed=0
+ directives.BetaEstimateDerivative(
+ beta0_ratio=self.params.initial_beta_ratio, seed=0
)
)
@@ -68,10 +68,10 @@ def beta_estimate_by_eigenvalues_directive(self):
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
+ self._directive_list = self.inversion_directives + self.save_directives
+ else:
+ self._directive_list = self.save_directives
return self._directive_list
@@ -96,6 +96,7 @@ def inversion_directives(self):
"update_sensitivity_weights_directive",
"beta_estimate_by_eigenvalues_directive",
"update_preconditioner_directive",
+ "scale_misfits",
]:
if getattr(self, directive) is not None:
directives_list.append(getattr(self, directive))
@@ -109,10 +110,26 @@ def save_directives(self):
"save_iteration_model_directive",
"save_iteration_data_directive",
"save_iteration_residual_directive",
+ "save_sensitivities_directive",
+ "save_property_group",
+ "save_iteration_log_files",
"save_iteration_apparent_resistivity_directive",
]:
- if getattr(self, directive) is not None:
+ save_directive = getattr(self, directive)
+ if save_directive is not None:
directives_list.append(getattr(self, directive))
+
+ if (
+ isinstance(save_directive, directives.SaveDataGeoH5)
+ and len(save_directive.channels) > 1
+ ):
+ save_group = directives.SavePropertyGroup(
+ self.driver.inversion_data.entity,
+ channels=save_directive.channels,
+ components=save_directive.components,
+ )
+ directives_list.append(save_group)
+
return directives_list
@property
@@ -122,21 +139,51 @@ def save_iteration_apparent_resistivity_directive(self):
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",
- )
+ self._save_iteration_apparent_resistivity_directive = SaveDataGeoh5Factory(
+ 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_property_group(self):
+ if (
+ self._save_property_group is None
+ and self.params.inversion_type == "magnetic vector"
+ ):
+ self._save_property_group = directives.SavePropertyGroup(
+ self.driver.inversion_mesh.entity,
+ group_type=GroupTypeEnum.DIPDIR,
+ channels=["declination", "inclination"],
+ )
+ return self._save_property_group
+
+ @property
+ def save_sensitivities_directive(self):
+ """"""
+ if (
+ self._save_sensitivities_directive is None
+ and self.params.save_sensitivities
+ ):
+ self._save_sensitivities_directive = SaveSensitivitiesGeoh5Factory(
+ self.params
+ ).build(
+ inversion_object=self.driver.inversion_mesh,
+ active_cells=self.driver.models.active_cells,
+ global_misfit=self.driver.data_misfit,
+ name="Sensitivities",
+ )
+ return self._save_sensitivities_directive
+
@property
def save_iteration_data_directive(self):
""""""
if self._save_iteration_data_directive is None:
- self._save_iteration_data_directive = SaveIterationGeoh5Factory(
+ self._save_iteration_data_directive = SaveDataGeoh5Factory(
self.params
).build(
inversion_object=self.driver.inversion_data,
@@ -152,24 +199,32 @@ def save_iteration_data_directive(self):
def save_iteration_model_directive(self):
""""""
if self._save_iteration_model_directive is None:
- self._save_iteration_model_directive = SaveIterationGeoh5Factory(
- self.params
- ).build(
+ model_directive = SaveModelGeoh5Factory(self.params).build(
inversion_object=self.driver.inversion_mesh,
active_cells=self.driver.models.active_cells,
- save_objective_function=True,
name="Model",
)
+ self._save_iteration_model_directive = model_directive
+
return self._save_iteration_model_directive
+ @property
+ def save_iteration_log_files(self):
+ """"""
+ if self._save_iteration_log_files is None:
+ self._save_iteration_log_files = directives.SaveLogFilesGeoH5(
+ self.driver.out_group,
+ )
+ return self._save_iteration_log_files
+
@property
def save_iteration_residual_directive(self):
""""""
if (
self._save_iteration_residual_directive is None
- and self.factory_type not in ["tdem", "fem"]
+ and self.factory_type not in ["tdem", "fem", "magnetotellurics", "tipper"]
):
- self._save_iteration_residual_directive = SaveIterationGeoh5Factory(
+ self._save_iteration_residual_directive = SaveDataGeoh5Factory(
self.params
).build(
inversion_object=self.driver.inversion_data,
@@ -180,6 +235,18 @@ def save_iteration_residual_directive(self):
)
return self._save_iteration_residual_directive
+ @property
+ def scale_misfits(self):
+ if (
+ self._scale_misfits is None
+ and self.params.auto_scale_misfits
+ and len(self.driver.data_misfit.objfcts) > 1
+ ):
+ self._scale_misfits = directives.ScaleMisfitMultipliers(
+ self.params.geoh5.h5file.parent
+ )
+ return self._scale_misfits
+
@property
def update_irls_directive(self):
"""Directive to update IRLS."""
@@ -244,13 +311,15 @@ def vector_inversion_directive(self):
return self._vector_inversion_directive
-class SaveIterationGeoh5Factory(SimPEGFactory):
+class SaveGeoh5Factory(SimPEGFactory, ABC):
+ _concrete_object = None
+
def __init__(self, params):
super().__init__(params)
self.simpeg_object = self.concrete_object()
def concrete_object(self):
- return directives.SaveIterationsGeoH5
+ return self._concrete_object
def assemble_arguments(
self,
@@ -259,12 +328,19 @@ def assemble_arguments(
sorting=None,
ordering=None,
transform=None,
- save_objective_function=False,
global_misfit=None,
name=None,
):
return [inversion_object.entity]
+
+class SaveModelGeoh5Factory(SaveGeoh5Factory):
+ """
+ Factory to create a SaveModelGeoH5 directive.
+ """
+
+ _concrete_object = directives.SaveModelGeoH5
+
def assemble_keyword_arguments(
self,
inversion_object=None,
@@ -272,99 +348,142 @@ def assemble_keyword_arguments(
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,
- )
+ active_cells_map = maps.InjectActiveCells(
+ inversion_object.mesh, active_cells, np.nan
+ )
+ sorting = inversion_object.permutation
+ kwargs = {
+ "label": "model",
+ "association": "CEll",
+ "transforms": [active_cells_map],
+ "sorting": sorting,
+ }
- 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,
- )
+ 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]
- 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,
- )
+ if self.params.model_type == "Resistivity (Ohm-m)":
+ kwargs["transforms"].append(lambda x: 1 / x)
+ return kwargs
- 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)
+class SaveSensitivitiesGeoh5Factory(SaveGeoh5Factory):
+ """
+ Factory to create a SaveModelGeoH5 directive.
+ """
- else:
- active_cells_map = maps.InjectActiveCells(
- inversion_object.mesh, active_cells, np.nan
+ _concrete_object = directives.SaveSensitivityGeoH5
+
+ def assemble_keyword_arguments(
+ self,
+ inversion_object=None,
+ active_cells=None,
+ sorting=None,
+ ordering=None,
+ transform=None,
+ global_misfit=None,
+ name=None,
+ ):
+ active_cells_map = maps.InjectActiveCells(
+ inversion_object.mesh, active_cells, np.nan
+ )
+ sorting = inversion_object.permutation
+ kwargs = {
+ "label": "model",
+ "association": "CEll",
+ "dmisfit": global_misfit,
+ "transforms": [active_cells_map],
+ "sorting": sorting,
+ }
+
+ if self.factory_type == "magnetic vector":
+ kwargs["channels"] = [""]
+ kwargs["transforms"] = [
+ lambda x: x.reshape((-1, 3), order="F"),
+ lambda x: np.linalg.norm(x, axis=1),
+ active_cells_map,
+ ]
+
+ kwargs["label"] = "sensitivities"
+
+ return kwargs
+
+
+class SaveDataGeoh5Factory(SaveGeoh5Factory):
+ """
+ Factory to create a SaveDataGeoH5 directive.
+ """
+
+ _concrete_object = directives.SaveDataGeoH5
+
+ def assemble_keyword_arguments(
+ self,
+ inversion_object=None,
+ active_cells=None,
+ sorting=None,
+ ordering=None,
+ transform=None,
+ global_misfit=None,
+ name=None,
+ ):
+ if self.factory_type in ["fem", "tdem", "magnetotellurics", "tipper"]:
+ kwargs = self.assemble_data_keywords_em(
+ inversion_object=inversion_object,
+ active_cells=active_cells,
+ sorting=sorting,
+ ordering=ordering,
+ transform=transform,
+ global_misfit=global_misfit,
+ name=name,
)
- sorting = inversion_object.permutation
- kwargs = {
- "save_objective_function": save_objective_function,
- "label": "model",
- "association": "CEll",
- "transforms": [active_cells_map],
- "sorting": sorting,
- }
-
- 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]
+ 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,
+ 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,
+ global_misfit=global_misfit,
+ name=name,
+ )
+ else:
+ return None
+
+ if transform is not None:
+ kwargs["transforms"].append(transform)
return kwargs
@@ -374,15 +493,12 @@ def assemble_data_keywords_potential_fields(
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()
@@ -403,6 +519,7 @@ def assemble_data_keywords_potential_fields(
(len(channels), len(components), -1), order="F"
),
}
+
if sorting is not None:
kwargs["sorting"] = np.hstack(sorting)
@@ -426,7 +543,6 @@ def assemble_data_keywords_dcip(
active_cells=None,
sorting=None,
transform=None,
- save_objective_function=False,
global_misfit=None,
name=None,
):
@@ -435,8 +551,6 @@ def assemble_data_keywords_dcip(
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()
@@ -460,9 +574,7 @@ def assemble_data_keywords_dcip(
if is_dc and name == "Apparent Resistivity":
kwargs["transforms"].insert(
0,
- inversion_object.transformations["apparent resistivity"][
- np.argsort(sorting)
- ],
+ inversion_object.survey.apparent_resistivity[np.argsort(sorting)],
)
kwargs["channels"] = ["apparent_resistivity"]
observed = self.params.geoh5.get_entity("Observed_apparent_resistivity")[0]
@@ -485,60 +597,6 @@ def dcip_transform(x):
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,
@@ -546,7 +604,6 @@ def assemble_data_keywords_em(
sorting=None,
ordering=None,
transform=None,
- save_objective_function=False,
global_misfit=None,
name=None,
):
@@ -565,8 +622,6 @@ def reshape(values):
kwargs = {
"data_type": inversion_object.observed_data_types,
- "attribute_type": "predicted",
- "save_objective_function": save_objective_function,
"association": "VERTEX",
"transforms": np.hstack(
[
diff --git a/simpeg_drivers/components/factories/entity_factory.py b/simpeg_drivers/components/factories/entity_factory.py
index 36cfb02b..ff6da5ee 100644
--- a/simpeg_drivers/components/factories/entity_factory.py
+++ b/simpeg_drivers/components/factories/entity_factory.py
@@ -1,34 +1,40 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 logging import getLogger
from typing import TYPE_CHECKING
-if TYPE_CHECKING:
- from simpeg_drivers.components.data import InversionData
-
import numpy as np
-from geoh5py.objects import CurrentElectrode, Curve, Grid2D, Points, PotentialElectrode
+from geoh5py.objects import (
+ CurrentElectrode,
+ Curve,
+ Grid2D,
+ LargeLoopGroundFEMTransmitters,
+ LargeLoopGroundTEMTransmitters,
+ Points,
+ PotentialElectrode,
+)
from simpeg_drivers.components.factories.abstract_factory import AbstractFactory
+from simpeg_drivers.utils.surveys import counter_clockwise_sort
+
+
+logger = getLogger(__name__)
+
+if TYPE_CHECKING:
+ from simpeg_drivers.components.data import InversionData
class EntityFactory(AbstractFactory):
@@ -86,13 +92,46 @@ def _build(self, inversion_data: InversionData):
else:
kwargs.update({"mask": inversion_data.mask})
- entity = self.params.data_object.copy(**kwargs)
+ entity = self.params.data_object.copy(copy_complement=False, **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
+ if getattr(self.params.data_object, "transmitters", None) is not None:
+ vertices = inversion_data.apply_transformations(
+ self.params.data_object.transmitters.vertices
+ )
+ cells = self.params.data_object.transmitters.cells
+
+ if getattr(self.params.data_object, "tx_id_property", None) is not None:
+ tx_id = self.params.data_object.tx_id_property.copy(parent=entity)
+ entity.tx_id_property = tx_id
+
+ if isinstance(
+ self.params.data_object.transmitters,
+ LargeLoopGroundFEMTransmitters | LargeLoopGroundTEMTransmitters,
+ ):
+ cells = self._validate_large_loop_cells(
+ self.params.data_object.transmitters
+ )
+
+ transmitters = self.params.data_object.transmitters.copy(
+ copy_complement=False,
+ vertices=vertices,
+ cells=cells,
+ parent=self.params.out_group,
+ copy_children=False,
)
+
+ if (
+ getattr(self.params.data_object.transmitters, "tx_id_property", None)
+ is not None
+ ):
+ tx_id = self.params.data_object.transmitters.tx_id_property.copy(
+ parent=transmitters
+ )
+ transmitters.tx_id_property = tx_id
+
+ entity.transmitters = transmitters
+
tx_freq = self.params.data_object.transmitters.get_data("Tx frequency")
if tx_freq:
tx_freq[0].copy(parent=entity.transmitters)
@@ -111,3 +150,44 @@ def _prune_from_indices(curve: Curve, cell_indices: np.ndarray):
locations = curve.vertices[uni_ids, :]
cells = np.arange(uni_ids.shape[0], dtype="uint32")[ids].reshape((-1, 2))
return locations, cells
+
+ @staticmethod
+ def _validate_large_loop_cells(
+ transmitter: LargeLoopGroundFEMTransmitters | LargeLoopGroundTEMTransmitters,
+ ) -> np.ndarray:
+ """
+ Validate that the transmitter loops are counter-clockwise sorted and closed.
+ """
+ if transmitter.receivers.tx_id_property is None:
+ raise ValueError(
+ "Transmitter ID property required for LargeLoopGroundTEMReceivers"
+ )
+
+ tx_rx = transmitter.receivers.tx_id_property.values
+ tx_ids = transmitter.tx_id_property.values
+
+ all_loops = []
+ for tx_id in np.unique(tx_rx):
+ messages = []
+
+ tx_ind = tx_ids == tx_id
+ loop_cells = transmitter.cells[np.all(tx_ind[transmitter.cells], axis=1), :]
+
+ ccw_loops = counter_clockwise_sort(loop_cells, transmitter.vertices)
+
+ if not np.all(ccw_loops == loop_cells):
+ messages.append("'counter-clockwise sorting'")
+
+ # Check for closed loop
+ if ccw_loops[-1, 1] != ccw_loops[0, 0]:
+ messages.append("'closed loop'")
+ ccw_loops = np.vstack(
+ [ccw_loops, np.c_[ccw_loops[-1, 1], ccw_loops[0, 0]]]
+ )
+
+ if len(messages) > 0:
+ logger.info("Loop %i modified for: %s", tx_id, ", ".join(messages))
+
+ all_loops.append(ccw_loops)
+
+ return np.vstack(all_loops)
diff --git a/simpeg_drivers/components/factories/misfit_factory.py b/simpeg_drivers/components/factories/misfit_factory.py
index b01572a3..b3d41a62 100644
--- a/simpeg_drivers/components/factories/misfit_factory.py
+++ b/simpeg_drivers/components/factories/misfit_factory.py
@@ -1,30 +1,24 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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_utils.driver.params import BaseParams
import numpy as np
-from SimPEG import data, data_misfit, objective_function
+from simpeg import data, data_misfit, objective_function
from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory
@@ -46,9 +40,7 @@ def __init__(self, params: BaseParams, models=None):
def concrete_object(self):
return objective_function.ComboObjectiveFunction
- def build(
- self, tiles, inversion_data, mesh, active_cells
- ): # pylint: disable=arguments-differ
+ def build(self, tiles, inversion_data, mesh, active_cells): # pylint: disable=arguments-differ
global_misfit = super().build(
tiles=tiles,
inversion_data=inversion_data,
@@ -81,7 +73,7 @@ def assemble_arguments( # pylint: disable=arguments-differ
tile_num = 0
data_count = 0
- for local_index in tiles:
+ for tile_count, local_index in enumerate(tiles):
if len(local_index) == 0:
continue
@@ -91,7 +83,12 @@ def assemble_arguments( # pylint: disable=arguments-differ
)
if count == 0:
- if self.factory_type in ["fem", "tdem"]:
+ if self.factory_type in [
+ "fem",
+ "tdem",
+ "magnetotellurics",
+ "tipper",
+ ]:
self.sorting.append(
np.arange(
data_count,
@@ -137,7 +134,14 @@ def assemble_arguments( # pylint: disable=arguments-differ
model_map=local_map,
)
lmisfit.W = 1 / survey.std
+ name = self.params.inversion_type
+
+ if len(tiles) > 1:
+ name += f": Tile {tile_count + 1}"
+ if len(channels) > 1:
+ name += f": Channel {channel}"
+ lmisfit.name = f"{name}"
local_misfits.append(lmisfit)
self.ordering.append(ordering)
tile_num += 1
diff --git a/simpeg_drivers/components/factories/receiver_factory.py b/simpeg_drivers/components/factories/receiver_factory.py
index 4b800e26..a2efd10a 100644
--- a/simpeg_drivers/components/factories/receiver_factory.py
+++ b/simpeg_drivers/components/factories/receiver_factory.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -23,11 +16,12 @@
from typing import TYPE_CHECKING
+
if TYPE_CHECKING:
from geoapps_utils.driver.params import BaseParams
import numpy as np
-from geoapps_utils.transformations import rotate_xyz
+from geoapps_utils.utils.transformations import rotate_xyz
from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory
@@ -45,32 +39,32 @@ def __init__(self, params: BaseParams):
def concrete_object(self):
if self.factory_type in ["magnetic vector", "magnetic scalar"]:
- from SimPEG.potential_fields.magnetics import receivers
+ from simpeg.potential_fields.magnetics import receivers
return receivers.Point
elif self.factory_type == "gravity":
- from SimPEG.potential_fields.gravity import receivers
+ from simpeg.potential_fields.gravity import receivers
return receivers.Point
elif "direct current" in self.factory_type:
- from SimPEG.electromagnetics.static.resistivity import receivers
+ 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
+ from simpeg.electromagnetics.static.induced_polarization import receivers
return receivers.Dipole
elif "fem" in self.factory_type:
- from SimPEG.electromagnetics.frequency_domain import receivers
+ from simpeg.electromagnetics.frequency_domain import receivers
return receivers.PointMagneticFluxDensitySecondary
elif "tdem" in self.factory_type:
- from SimPEG.electromagnetics.time_domain import receivers
+ from simpeg.electromagnetics.time_domain import receivers
if self.params.data_units == "dB/dt (T/s)":
return receivers.PointMagneticFluxTimeDerivative
@@ -80,12 +74,12 @@ def concrete_object(self):
return receivers.PointMagneticField
elif self.factory_type == "magnetotellurics":
- from SimPEG.electromagnetics.natural_source import receivers
+ from simpeg.electromagnetics.natural_source import receivers
return receivers.PointNaturalSource
elif self.factory_type == "tipper":
- from SimPEG.electromagnetics.natural_source import receivers
+ from simpeg.electromagnetics.natural_source import receivers
return receivers.Point3DTipper
@@ -186,9 +180,9 @@ def _dcip_arguments(self, locations=None, local_index=None):
if np.all(locations_m == locations_n):
if "direct current" in self.factory_type:
- from SimPEG.electromagnetics.static.resistivity import receivers
+ from simpeg.electromagnetics.static.resistivity import receivers
else:
- from SimPEG.electromagnetics.static.induced_polarization import (
+ from simpeg.electromagnetics.static.induced_polarization import (
receivers,
)
self.simpeg_object = receivers.Pole
diff --git a/simpeg_drivers/components/factories/simpeg_factory.py b/simpeg_drivers/components/factories/simpeg_factory.py
index 0dacf84c..13f2ec74 100644
--- a/simpeg_drivers/components/factories/simpeg_factory.py
+++ b/simpeg_drivers/components/factories/simpeg_factory.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,6 +14,7 @@
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING
+
if TYPE_CHECKING:
from geoapps_utils.driver.params import BaseParams
diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py
index ff4a5d20..bcec02d9 100644
--- a/simpeg_drivers/components/factories/simulation_factory.py
+++ b/simpeg_drivers/components/factories/simulation_factory.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -23,13 +16,14 @@
from typing import TYPE_CHECKING
+
if TYPE_CHECKING:
from geoapps_utils.driver.params import BaseParams
from pathlib import Path
import numpy as np
-from SimPEG import maps
+from simpeg import maps
from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory
@@ -61,22 +55,22 @@ def __init__(self, params: BaseParams):
def concrete_object(self):
if self.factory_type in ["magnetic scalar", "magnetic vector"]:
- from SimPEG.potential_fields.magnetics import simulation
+ from simpeg.potential_fields.magnetics import simulation
return simulation.Simulation3DIntegral
if self.factory_type == "gravity":
- from SimPEG.potential_fields.gravity import simulation
+ 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
+ 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
+ from simpeg.electromagnetics.static.resistivity import simulation_2d
return simulation_2d.Simulation2DNodal
@@ -84,29 +78,29 @@ def concrete_object(self):
"induced polarization 3d",
"induced polarization pseudo 3d",
]:
- from SimPEG.electromagnetics.static.induced_polarization import simulation
+ 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 (
+ 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
+ from simpeg.electromagnetics.natural_source import simulation
return simulation.Simulation3DPrimarySecondary
if self.factory_type in ["fem"]:
- from SimPEG.electromagnetics.frequency_domain import simulation
+ from simpeg.electromagnetics.frequency_domain import simulation
return simulation.Simulation3DMagneticFluxDensity
if self.factory_type in ["tdem"]:
- from SimPEG.electromagnetics.time_domain import simulation
+ from simpeg.electromagnetics.time_domain import simulation
return simulation.Simulation3DMagneticFluxDensity
@@ -141,7 +135,9 @@ def assemble_keyword_arguments(
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
+ "forward_only"
+ if self.params.forward_only
+ else self.params.store_sensitivities
)
if self.factory_type == "magnetic vector":
@@ -216,7 +212,7 @@ def _tdem_keywords(self, kwargs, receivers, mesh, active_cells=None):
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"
+ out_dir = Path(self.params.workpath) / "sensitivities"
if tile_id is None:
sens_path = out_dir / "Tile.zarr"
diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py
index 7f4399a8..8d35f7e4 100644
--- a/simpeg_drivers/components/factories/source_factory.py
+++ b/simpeg_drivers/components/factories/source_factory.py
@@ -1,30 +1,26 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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_utils.driver.params import BaseParams
+from copy import deepcopy
+
import numpy as np
-from geoapps_utils.transformations import rotate_xyz
+from geoapps_utils.utils.transformations import rotate_xyz
from geoh5py.objects import LargeLoopGroundTEMReceivers
from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory
@@ -43,32 +39,32 @@ def __init__(self, params: BaseParams):
def concrete_object(self):
if self.factory_type in ["magnetic vector", "magnetic scalar"]:
- from SimPEG.potential_fields.magnetics import sources
+ from simpeg.potential_fields.magnetics import sources
return sources.UniformBackgroundField
elif self.factory_type == "gravity":
- from SimPEG.potential_fields.gravity import sources
+ from simpeg.potential_fields.gravity import sources
return sources.SourceField
elif "direct current" in self.factory_type:
- from SimPEG.electromagnetics.static.resistivity import sources
+ 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
+ from simpeg.electromagnetics.static.induced_polarization import sources
return sources.Dipole
elif "fem" in self.factory_type:
- from SimPEG.electromagnetics.frequency_domain import sources
+ from simpeg.electromagnetics.frequency_domain import sources
return sources.MagDipole
elif "tdem" in self.factory_type:
- from SimPEG.electromagnetics.time_domain import sources
+ from simpeg.electromagnetics.time_domain import sources
if isinstance(self.params.data_object, LargeLoopGroundTEMReceivers):
return sources.LineCurrent
@@ -76,7 +72,7 @@ def concrete_object(self):
return sources.MagDipole
elif self.factory_type in ["magnetotellurics", "tipper"]:
- from SimPEG.electromagnetics.natural_source import sources
+ from simpeg.electromagnetics.natural_source import sources
return sources.PlanewaveXYPrimary
@@ -135,10 +131,17 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ
zip(
["amplitude", "inclination", "declination"],
self.params.inducing_field_aid(),
+ strict=False,
)
)
if self.factory_type in ["magnetotellurics", "tipper"]:
- kwargs["sigma_primary"] = [self.params.background_conductivity]
+ background = deepcopy(self.params.background_conductivity)
+
+ if getattr(self.params, "model_type", None) == "Resistivity (Ohm-m)":
+ background **= -1.0
+
+ kwargs["sigma_primary"] = [background]
+
if self.factory_type in ["fem"]:
kwargs["location"] = locations
if self.factory_type in ["tdem"]:
@@ -167,9 +170,9 @@ def _dcip_arguments(self, receivers=None, locations=None):
if np.all(locations_a == locations_b):
if "direct current" in self.factory_type:
- from SimPEG.electromagnetics.static.resistivity import sources
+ from simpeg.electromagnetics.static.resistivity import sources
else:
- from SimPEG.electromagnetics.static.induced_polarization import sources
+ from simpeg.electromagnetics.static.induced_polarization import sources
self.simpeg_object = sources.Pole
else:
args.append(locations_b)
diff --git a/simpeg_drivers/components/factories/survey_factory.py b/simpeg_drivers/components/factories/survey_factory.py
index bd561116..589a8de9 100644
--- a/simpeg_drivers/components/factories/survey_factory.py
+++ b/simpeg_drivers/components/factories/survey_factory.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -23,11 +16,12 @@
from typing import TYPE_CHECKING
+
if TYPE_CHECKING:
from geoapps_utils.driver.params import BaseParams
import numpy as np
-import SimPEG.electromagnetics.time_domain as tdem
+import simpeg.electromagnetics.time_domain as tdem
from geoh5py.objects.surveys.electromagnetics.ground_tem import (
LargeLoopGroundTEMTransmitters,
)
@@ -36,7 +30,6 @@
from simpeg_drivers.components.factories.receiver_factory import ReceiversFactory
from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory
from simpeg_drivers.components.factories.source_factory import SourcesFactory
-from simpeg_drivers.utils.surveys import counter_clockwise_sort
def receiver_group(txi, potential_electrodes):
@@ -50,7 +43,7 @@ def receiver_group(txi, potential_electrodes):
:return: ids : list of ids of potential electrodes used with transmitter txi.
"""
- index_map = potential_electrodes.ab_map.map
+ index_map = potential_electrodes.ab_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]
@@ -89,28 +82,28 @@ def __init__(self, params: BaseParams):
def concrete_object(self):
if self.factory_type in ["magnetic vector", "magnetic scalar"]:
- from SimPEG.potential_fields.magnetics import survey
+ from simpeg.potential_fields.magnetics import survey
elif self.factory_type == "gravity":
- from SimPEG.potential_fields.gravity import survey
+ from simpeg.potential_fields.gravity import survey
elif "direct current" in self.factory_type:
- from SimPEG.electromagnetics.static.resistivity import survey
+ from simpeg.electromagnetics.static.resistivity import survey
elif "induced polarization" in self.factory_type:
- from SimPEG.electromagnetics.static.induced_polarization import survey
+ from simpeg.electromagnetics.static.induced_polarization import survey
elif "fem" in self.factory_type:
- from SimPEG.electromagnetics.frequency_domain import survey
+ from simpeg.electromagnetics.frequency_domain import survey
elif "tdem" in self.factory_type:
- from SimPEG.electromagnetics.time_domain import survey
+ from simpeg.electromagnetics.time_domain import survey
elif self.factory_type in ["magnetotellurics", "tipper"]:
- from SimPEG.electromagnetics.natural_source import survey
+ from simpeg.electromagnetics.natural_source import survey
else:
- raise ValueError(f"Survey type {self.factory_type} not recognized.")
+ raise ValueError(f"Factory type '{self.factory_type}' not recognized.")
return survey.Survey
@@ -214,8 +207,8 @@ def _add_data(self, survey, data, local_index, channel):
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()
+ data_vec = np.vstack([dobs]).flatten()
+ uncertainty_vec = np.vstack([uncerts]).flatten()
elif self.factory_type in ["magnetotellurics", "tipper"]:
local_data = {}
@@ -235,12 +228,6 @@ def _add_data(self, survey, data, local_index, channel):
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()}
@@ -250,12 +237,11 @@ def _add_data(self, survey, data, local_index, channel):
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
+
+ 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):
"""
@@ -336,15 +322,22 @@ def _tdem_arguments(self, data=None, local_index=None, mesh=None):
receivers = data.entity
transmitters = receivers.transmitters
- if isinstance(transmitters, LargeLoopGroundTEMTransmitters):
+ if receivers.channels[-1] > (
+ receivers.waveform[:, 0].max() - receivers.timing_mark
+ ):
+ raise ValueError(
+ f"The latest time channel {receivers.channels[-1]} exceeds "
+ f"the waveform discretization. Revise waveform."
+ )
+ if isinstance(transmitters, LargeLoopGroundTEMTransmitters):
if receivers.tx_id_property is None:
raise ValueError(
"Transmitter ID property required for LargeLoopGroundTEMReceivers"
)
tx_rx = receivers.tx_id_property.values[self.local_index]
- tx_ids = transmitters.get_data("Transmitter ID")[0].values
+ tx_ids = transmitters.tx_id_property.values
rx_lookup = []
tx_locs = []
for tx_id in np.unique(tx_rx):
@@ -353,7 +346,6 @@ def _tdem_arguments(self, data=None, local_index=None, mesh=None):
loop_cells = transmitters.cells[
np.all(tx_ind[transmitters.cells], axis=1), :
]
- loop_cells = counter_clockwise_sort(loop_cells, transmitters.vertices)
loop_ind = np.r_[loop_cells[:, 0], loop_cells[-1, 1]]
tx_locs.append(transmitters.vertices[loop_ind, :])
else:
@@ -375,7 +367,7 @@ def _tdem_arguments(self, data=None, local_index=None, mesh=None):
tx_list = []
rx_factory = ReceiversFactory(self.params)
tx_factory = SourcesFactory(self.params)
- for tx_locs, rx_ids in zip(tx_locs, rx_lookup):
+ for cur_tx_locs, rx_ids in zip(tx_locs, rx_lookup, strict=True):
locs = receivers.vertices[rx_ids, :]
rx_list = []
@@ -394,7 +386,7 @@ def _tdem_arguments(self, data=None, local_index=None, mesh=None):
self.ordering.append([time_id, component_id, rx_id])
tx_list.append(
- tx_factory.build(rx_list, locations=tx_locs, waveform=waveform)
+ tx_factory.build(rx_list, locations=cur_tx_locs, waveform=waveform)
)
return [tx_list]
@@ -429,15 +421,13 @@ def _fem_arguments(self, data=None, mesh=None, channel=None):
receiver_groups[receiver_id] = receivers
ordering = np.vstack(ordering)
+ self.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(
@@ -448,6 +438,8 @@ def _fem_arguments(self, data=None, mesh=None, channel=None):
)
)
+ self.ordering = np.vstack(self.ordering).astype(int)
+
return [sources]
def _naturalsource_arguments(self, data=None, mesh=None, frequency=None):
@@ -455,7 +447,9 @@ def _naturalsource_arguments(self, data=None, mesh=None, frequency=None):
sources = []
rx_factory = ReceiversFactory(self.params)
tx_factory = SourcesFactory(self.params)
- for comp in data.components:
+ ordering = []
+ channels = np.array(data.entity.channels)
+ for component_id, comp in enumerate(data.components):
receivers.append(
rx_factory.build(
locations=data.locations,
@@ -465,12 +459,24 @@ def _naturalsource_arguments(self, data=None, mesh=None, frequency=None):
component=comp,
)
)
+ ordering.append(
+ np.c_[np.ones_like(self.local_index) * component_id, self.local_index]
+ )
+ ordering = np.vstack(ordering)
+ self.ordering = []
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))
+ frequencies = channels
else:
+ frequencies = [frequency] if not isinstance(frequency, list) else frequency
+
+ for frequency in frequencies:
sources.append(tx_factory.build(receivers, frequency=frequency))
+ 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)
return [sources]
diff --git a/simpeg_drivers/components/locations.py b/simpeg_drivers/components/locations.py
index 6b1ecba7..867c04d7 100644
--- a/simpeg_drivers/components/locations.py
+++ b/simpeg_drivers/components/locations.py
@@ -1,27 +1,22 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers.params import InversionBaseParams
import numpy as np
@@ -104,9 +99,7 @@ def get_locations(self, entity: ObjectBase) -> np.ndarray:
:return: Array shape(*, 3) of x, y, z location data
"""
- if hasattr(entity, "centroids"):
- locations = entity.centroids
- elif hasattr(entity, "vertices"):
+ if hasattr(entity, "vertices"):
if isinstance(entity, BaseElectrode):
potentials = entity.potential_electrodes
locations = np.mean(
@@ -118,7 +111,8 @@ def get_locations(self, entity: ObjectBase) -> np.ndarray:
)
else:
locations = entity.vertices
-
+ elif hasattr(entity, "centroids"):
+ locations = entity.centroids
else:
msg = f"Workspace object {entity} 'vertices' attribute is None."
msg += " Object type should be Grid2D or point-like."
diff --git a/simpeg_drivers/components/meshes.py b/simpeg_drivers/components/meshes.py
index c532f8c3..bd346a03 100644
--- a/simpeg_drivers/components/meshes.py
+++ b/simpeg_drivers/components/meshes.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,8 +20,10 @@
from octree_creation_app.params import OctreeParams
from octree_creation_app.utils import octree_2_treemesh, treemesh_2_octree
+from simpeg_drivers.params import InversionBaseParams
from simpeg_drivers.utils.utils import drape_2_tensor
+
if TYPE_CHECKING:
from simpeg_drivers.components.data import InversionData
from simpeg_drivers.components.topography import InversionTopography
@@ -77,21 +72,15 @@ class InversionMesh:
def __init__(
self,
workspace: Workspace,
- params: OctreeParams,
- inversion_data: InversionData | None,
- inversion_topography: InversionTopography,
+ params: InversionBaseParams,
) -> 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.mesh: TreeMesh | TensorMesh | None = None
self.n_cells: int | None = None
self.rotation: dict[str, float] | None = None
self._permutation: np.ndarray | None = None
@@ -115,14 +104,6 @@ def _initialize(self) -> None:
)
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
@@ -142,6 +123,13 @@ def mesh(self) -> TreeMesh | TensorMesh:
return self._mesh
+ @mesh.setter
+ def mesh(self, value: TreeMesh | TensorMesh | None):
+ if not isinstance(value, (TreeMesh | TensorMesh | type(None))):
+ raise TypeError("Attribute 'mesh' must be a TreeMesh or TensorMesh object.")
+
+ self._mesh = value
+
@property
def permutation(self) -> np.ndarray:
"""Permutation vector between discretize and geoh5py/DrapeModel ordering."""
@@ -156,7 +144,7 @@ def entity(self) -> Octree | DrapeModel:
@entity.setter
def entity(self, val: Octree | DrapeModel):
- if not isinstance(val, (Octree, DrapeModel, type(None))):
+ if not isinstance(val, Octree | DrapeModel | type(None)):
raise TypeError(
"Attribute 'entity' must be an Octree or DrapeModel object."
)
@@ -164,9 +152,22 @@ def entity(self, val: Octree | DrapeModel):
self._entity = val
if isinstance(self._entity, Octree):
- if any(getattr(self._entity, f"{axis}_cell_size") < 0 for axis in "uvw"):
- self._mesh = InversionMesh.ensure_cell_convention(self._entity)
- self._permutation = np.arange(self.entity.n_cells)
+ self._permutation = np.arange(self.entity.n_cells)
+ self._mesh = self.to_treemesh(self._entity)
+
+ @staticmethod
+ def to_treemesh(octree):
+ """Ensures octree mesh is in IJK order and has positive cell sizes."""
+
+ if any(getattr(octree, f"{axis}_cell_size") < 0 for axis in "uvw"):
+ mesh = InversionMesh.ensure_cell_convention(octree)
+ return mesh
+
+ mesh = octree_2_treemesh(octree)
+ if not np.allclose(octree.centroids, mesh.cell_centers):
+ mesh = InversionMesh.ensure_cell_convention(octree)
+
+ return mesh
@staticmethod
def ensure_cell_convention(mesh: Octree) -> TreeMesh | None:
@@ -183,7 +184,7 @@ def ensure_cell_convention(mesh: Octree) -> TreeMesh | None:
raise ValueError("Cannot convert negative cell sizes for rotated mesh.")
cell_sizes, origin = [], []
- for axis, dim in zip("xyz", "uvw"):
+ for axis, dim in zip("xyz", "uvw", strict=True):
n_cells = getattr(mesh, f"{dim}_count")
cell_size = getattr(mesh, f"{dim}_cell_size")
if cell_size < 0:
@@ -200,7 +201,7 @@ def ensure_cell_convention(mesh: Octree) -> TreeMesh | None:
temp_workspace = Workspace()
temp_octree = treemesh_2_octree(temp_workspace, treemesh)
- mesh.octree_cells = np.vstack(temp_octree.octree_cells.tolist())
+ mesh.octree_cells = temp_octree.octree_cells
mesh.origin = origin
for dim in "uvw":
attr = f"{dim}_cell_size"
diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py
index 84147c86..bba96ba9 100644
--- a/simpeg_drivers/components/models.py
+++ b/simpeg_drivers/components/models.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -22,15 +15,16 @@
import numpy as np
from geoapps_utils.driver.driver import BaseDriver
-from geoapps_utils.numerical import weighted_average
-from geoapps_utils.transformations import rotate_xyz
+from geoapps_utils.utils.numerical import weighted_average
+from geoapps_utils.utils.transformations import rotate_xyz
from geoh5py.data import NumericData
-from SimPEG.utils.mat_utils import (
+from simpeg.utils.mat_utils import (
cartesian2amplitude_dip_azimuth,
dip_azimuth2cartesian,
mkvc,
)
+
if TYPE_CHECKING:
from simpeg_drivers.driver import InversionDriver
@@ -51,16 +45,22 @@ class InversionModelCollection:
"lower_bound",
"upper_bound",
"conductivity",
+ "alpha_s",
+ "length_scale_x",
+ "length_scale_y",
+ "length_scale_z",
+ "s_norm",
+ "x_norm",
+ "y_norm",
+ "z_norm",
]
def __init__(self, driver: InversionDriver):
"""
:param driver: Parental InversionDriver class.
"""
- self._driver: InversionDriver
- self._active_cells = None
-
- self.driver = driver
+ self._active_cells: np.ndarray | None = None
+ 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
@@ -73,6 +73,14 @@ def __init__(self, driver: InversionDriver):
self._lower_bound = InversionModel(driver, "lower_bound")
self._upper_bound = InversionModel(driver, "upper_bound")
self._conductivity = InversionModel(driver, "conductivity")
+ self._alpha_s = InversionModel(driver, "alpha_s")
+ self._length_scale_x = InversionModel(driver, "length_scale_x")
+ self._length_scale_y = InversionModel(driver, "length_scale_y")
+ self._length_scale_z = InversionModel(driver, "length_scale_z")
+ self._s_norm = InversionModel(driver, "s_norm")
+ self._x_norm = InversionModel(driver, "x_norm")
+ self._y_norm = InversionModel(driver, "y_norm")
+ self._z_norm = InversionModel(driver, "z_norm")
@property
def n_active(self) -> int:
@@ -81,34 +89,31 @@ def n_active(self) -> int:
@property
def driver(self):
+ """
+ Parental InversionDriver class.
+ """
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
- )
+ 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):
+ def active_cells(self, active_cells: np.ndarray | NumericData | None):
if self._active_cells is not None:
raise ValueError("'active_cells' can only be set once.")
+ if active_cells is None:
+ return
+
+ if isinstance(active_cells, NumericData):
+ active_cells = active_cells.values.astype(bool)
+
if not isinstance(active_cells, np.ndarray) or active_cells.dtype != bool:
raise ValueError("active_cells must be a boolean numpy array.")
@@ -116,7 +121,12 @@ def active_cells(self, active_cells):
self.edit_ndv_model(active_cells[permutation])
self.remove_air(active_cells)
self.driver.inversion_mesh.entity.add_data(
- {"active_cells": {"values": active_cells[permutation].astype(np.int32)}}
+ {
+ "active_cells": {
+ "values": active_cells[permutation],
+ "primitive_type": "boolean",
+ }
+ }
)
self._active_cells = active_cells
@@ -128,6 +138,9 @@ def starting(self) -> np.ndarray | None:
mstart = self._starting.model.copy()
if mstart is not None and self.is_sigma:
+ if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)":
+ mstart = 1 / mstart
+
mstart = np.log(mstart)
return mstart
@@ -142,35 +155,60 @@ def reference(self) -> np.ndarray | None:
if mref is None or (self.is_sigma and all(mref == 0)):
self.driver.params.alpha_s = 0.0
- return self.starting.copy()
+ return None
ref_model = mref.copy()
+
+ if (
+ self.is_sigma
+ and getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)"
+ ):
+ ref_model = 1 / ref_model
+
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:
+ if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)":
+ bound_model = self._upper_bound.model
+ else:
+ bound_model = self._lower_bound.model
+
+ if bound_model is None:
return -np.inf
- lbound = self._lower_bound.model.copy()
+ lbound = bound_model.copy()
if self.is_sigma:
is_finite = np.isfinite(lbound)
+
+ if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)":
+ lbound[is_finite] = 1 / lbound[is_finite]
+
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:
+ if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)":
+ bound_model = self._lower_bound.model
+ else:
+ bound_model = self._upper_bound.model
+
+ if bound_model is None:
return np.inf
- ubound = self._upper_bound.model.copy()
+ ubound = bound_model.copy()
if self.is_sigma:
is_finite = np.isfinite(ubound)
+
+ if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)":
+ ubound[is_finite] = 1 / ubound[is_finite]
+
ubound[is_finite] = np.log(ubound[is_finite])
return ubound
@@ -183,10 +221,73 @@ def conductivity(self) -> np.ndarray | None:
mstart = self._conductivity.model.copy()
if mstart is not None and self.is_sigma:
+ if getattr(self.driver.params, "model_type", None) == "Resistivity (Ohm-m)":
+ mstart = 1 / mstart
+
mstart = np.log(mstart)
return mstart
+ @property
+ def alpha_s(self) -> np.ndarray | None:
+ if self._alpha_s.model is None:
+ return None
+
+ return self._alpha_s.model.copy()
+
+ @property
+ def length_scale_x(self) -> np.ndarray | None:
+ if self._length_scale_x.model is None:
+ return None
+
+ return self._length_scale_x.model.copy()
+
+ @property
+ def length_scale_y(self) -> np.ndarray | None:
+ if self._length_scale_y.model is None:
+ return None
+
+ return self._length_scale_y.model.copy()
+
+ @property
+ def length_scale_z(self) -> np.ndarray | None:
+ if self._length_scale_z.model is None:
+ return None
+
+ return self._length_scale_z.model.copy()
+
+ @property
+ def s_norm(self) -> np.ndarray | None:
+ if self._s_norm.model is None:
+ return None
+
+ s_norm = self._s_norm.model.copy()
+ return s_norm
+
+ @property
+ def x_norm(self) -> np.ndarray | None:
+ if self._x_norm.model is None:
+ return None
+
+ x_norm = self._x_norm.model.copy()
+ return x_norm
+
+ @property
+ def y_norm(self) -> np.ndarray | None:
+ if self._y_norm.model is None:
+ return None
+
+ y_norm = self._y_norm.model.copy()
+ return y_norm
+
+ @property
+ def z_norm(self) -> np.ndarray | None:
+ if self._z_norm.model is None:
+ return None
+
+ z_norm = self._z_norm.model.copy()
+ return z_norm
+
def _model_method_wrapper(self, method, name=None, **kwargs):
"""wraps individual model's specific method and applies in loop over model types."""
returned_items = {}
@@ -253,6 +354,14 @@ class InversionModel:
"lower_bound",
"upper_bound",
"conductivity",
+ "alpha_s",
+ "length_scale_x",
+ "length_scale_y",
+ "length_scale_z",
+ "s_norm",
+ "x_norm",
+ "y_norm",
+ "z_norm",
]
def __init__(
@@ -383,6 +492,10 @@ def save_model(self):
{f"{self.model_type}_declination": {"values": aid[:, 2]}}
)
remapped_model = aid[:, 0]
+ elif "norm" in self.model_type:
+ remapped_model = np.mean(
+ remapped_model.reshape((-1, 3), order="F"), axis=1
+ )
else:
remapped_model = np.linalg.norm(
remapped_model.reshape((-1, 3), order="F"), axis=1
@@ -441,42 +554,31 @@ def _get_value(self, model: float | NumericData) -> np.ndarray:
the number of cells in the inversion mesh.
"""
if isinstance(model, NumericData):
- model = self._obj_2_mesh(model.values, model.parent)
-
+ model = self.obj_2_mesh(model, self.driver.inversion_mesh.entity)
+ model = model[np.argsort(self.driver.inversion_mesh.permutation)]
else:
nc = self.driver.inversion_mesh.n_cells
- if isinstance(model, (int, float)):
+ if isinstance(model, int | float):
model *= np.ones(nc)
return model
- def _obj_2_mesh(self, obj, parent) -> np.ndarray:
+ @staticmethod
+ def obj_2_mesh(data, destination) -> np.ndarray:
"""
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.
+ :param data: Data entity containing model values
+ :param destination: Destination object containing locations.
: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]
+ xyz_out = destination.locations
+ xyz_in = data.parent.locations
+ full_vector = weighted_average(xyz_in, xyz_out, [data.values], n=1)[0]
- return full_vector[np.argsort(self.driver.inversion_mesh.permutation)]
+ return full_vector
@property
def model_type(self):
@@ -485,6 +587,6 @@ def model_type(self):
@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, }."
+ msg = f"Invalid model_type: {v}. Must be one of {(*self.model_types,)}."
raise ValueError(msg)
self._model_type = v
diff --git a/simpeg_drivers/components/topography.py b/simpeg_drivers/components/topography.py
index 2377b7bf..3c22415a 100644
--- a/simpeg_drivers/components/topography.py
+++ b/simpeg_drivers/components/topography.py
@@ -1,39 +1,36 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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_utils.driver.params import BaseParams
+ from geoh5py.workspace import Workspace
+
from simpeg_drivers.components.meshes import InversionMesh
import warnings
import numpy as np
from discretize import TreeMesh
+from geoh5py.data import NumericData
from geoh5py.objects.surveys.electromagnetics.base import LargeLoopGroundEMSurvey
from geoh5py.shared import Entity
from simpeg_drivers.components.data import InversionData
from simpeg_drivers.components.locations import InversionLocations
+from simpeg_drivers.components.models import InversionModel
from simpeg_drivers.utils.utils import (
active_from_xyz,
floating_active,
@@ -73,10 +70,8 @@ def __init__(
super().__init__(workspace, params)
self.locations: np.ndarray | None = None
- self._initialize()
-
- def _initialize(self):
- self.locations = self.get_locations(self.params.topography_object)
+ if self.params.topography_object is not None:
+ self.locations = self.get_locations(self.params.topography_object)
def active_cells(self, mesh: InversionMesh, data: InversionData) -> np.ndarray:
"""
@@ -86,19 +81,26 @@ def active_cells(self, mesh: InversionMesh, data: InversionData) -> np.ndarray:
: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 [
+ forced_to_surface: bool = 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 isinstance(self.params.active_model, NumericData):
+ active_cells = InversionModel.obj_2_mesh(
+ self.params.active_model, mesh.entity
+ )
+ else:
+ 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)].astype(bool)
if forced_to_surface:
active_cells = self.expand_actives(active_cells, mesh, data)
@@ -127,7 +129,7 @@ def get_locations(self, entity: Entity) -> np.ndarray:
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)):
+ 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
diff --git a/simpeg_drivers/components/utils.py b/simpeg_drivers/components/utils.py
deleted file mode 100644
index cf03b71a..00000000
--- a/simpeg_drivers/components/utils.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
-
-from __future__ import annotations
-
-import numpy as np
-from discretize import TensorMesh, TreeMesh
-
-from simpeg_drivers.components import InversionData
-
-
-def get_containing_cells(
- mesh: TreeMesh | TensorMesh, data: InversionData
-) -> np.ndarray:
- """
- Find indices of cells that contain data locations
-
- :param mesh: Computational mesh object
- :param data: Inversion data object
- """
- if isinstance(mesh, TreeMesh):
- inds = mesh._get_containing_cell_indexes( # pylint: disable=protected-access
- data.locations
- )
-
- elif isinstance(mesh, TensorMesh):
- locations = data.drape_locations(np.unique(data.locations, axis=0))
- xi = np.searchsorted(mesh.nodes_x, locations[:, 0]) - 1
- yi = np.searchsorted(mesh.nodes_y, locations[:, -1]) - 1
- inds = xi * mesh.shape_cells[1] + yi
-
- else:
- raise TypeError("Mesh must be 'TreeMesh' or 'TensorMesh'")
-
- return inds
diff --git a/simpeg_drivers/components/windows.py b/simpeg_drivers/components/windows.py
index f45d9685..32454e28 100644
--- a/simpeg_drivers/components/windows.py
+++ b/simpeg_drivers/components/windows.py
@@ -1,28 +1,22 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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_utils.driver.params import BaseParams
+ from geoh5py.workspace import Workspace
import numpy as np
from geoh5py.objects import Grid2D, PotentialElectrode
diff --git a/simpeg_drivers/constants.py b/simpeg_drivers/constants.py
index bf06d3c9..f511fab1 100644
--- a/simpeg_drivers/constants.py
+++ b/simpeg_drivers/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -24,34 +17,11 @@
import simpeg_drivers
+
default_ui_json = {
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "icon": "",
"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": None,
- },
- "topography": {
- "association": ["Vertex", "Cell"],
- "dataType": "Float",
- "group": "Topography",
- "main": True,
- "optional": True,
- "enabled": False,
- "label": "Elevation channel",
- "tooltip": "Set elevation from channel",
- "parent": "topography_object",
- "value": "",
- "verbose": 2,
- },
"data_object": {
"main": True,
"group": "Data",
@@ -64,36 +34,15 @@
"{b020a277-90e2-4cd7-84d6-612ee3f25051}",
],
"value": None,
+ "tooltip": "Select an object containing survey geometry and data for inversion.",
},
- "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-4,
- },
- "tile_spatial": {
- "group": "Compute",
- "label": "Number of tiles",
- "parent": "data_object",
- "isValue": True,
- "property": None,
- "value": 1,
- "min": 1,
- "max": 1000,
- "verbose": 2,
- },
- "output_tile_files": False,
"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,
"verbose": 3,
+ "visible": False,
},
"receivers_offset_z": {
"group": "Data pre-processing",
@@ -102,6 +51,7 @@
"enabled": False,
"value": 0.0,
"verbose": 3,
+ "visible": False,
},
"receivers_radar_drape": {
"association": ["Cell", "Vertex"],
@@ -111,187 +61,133 @@
"tooltip": "Apply a non-homogeneous offset to survey object from radar channel.",
"optional": True,
"parent": "data_object",
- "value": None,
+ "value": "",
"enabled": False,
"verbose": 3,
+ "visible": False,
},
- "gps_receivers_offset": None,
+ "gps_receivers_offset": "",
"mesh": {
"group": "Mesh and models",
"main": True,
"label": "Mesh",
- "meshType": "4EA87376-3ECE-438B-BF12-3479733DED46",
- "value": None,
- },
- "inversion_style": "voxel",
- "chi_factor": {
- "min": 0.1,
- "max": 20.0,
- "precision": 1,
- "lineEdit": False,
- "group": "Optimization",
- "label": "Chi factor",
- "value": 1.0,
- "enabled": True,
+ "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}",
+ "value": "",
+ "tooltip": "Select a mesh for the inversion.",
},
- "sens_wts_threshold": {
- "group": "Update sensitivity weights directive",
- "tooltip": "Update sensitivity weight threshold",
- "label": "Threshold (%)",
+ "starting_model": {
+ "association": ["Cell", "Vertex"],
+ "dataType": "Float",
+ "group": "Mesh and models",
+ "main": True,
+ "isValue": True,
+ "parent": "mesh",
+ "label": "Initial",
+ "property": "",
"value": 0.001,
- "max": 1.0,
- "min": 0.0,
- "precision": 5,
- "verbose": 2,
- },
- "every_iteration_bool": {
- "group": "Update sensitivity weights directive",
- "tooltip": "Update weights at every iteration",
- "label": "Every iteration",
- "value": False,
- "verbose": 2,
- },
- "f_min_change": {
- "group": "Update IRLS directive",
- "label": "f min change",
- "value": 1e-4,
- "min": 1e-6,
- "verbose": 3,
- },
- "beta_tol": {
- "group": "Update IRLS directive",
- "label": "Beta tolerance",
- "value": 0.5,
- "min": 0.0001,
- "verbose": 3,
- },
- "prctile": {
- "group": "Update IRLS directive",
- "label": "Percentile",
- "value": 95,
- "max": 100,
- "min": 5,
- "verbose": 3,
- },
- "coolEps_q": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon q",
- "value": True,
- "verbose": 3,
+ "tooltip": "Select a model to start the inversion.",
},
- "coolEpsFact": {
- "group": "Update IRLS directive",
- "label": "Cool epsilon fact",
- "value": 1.2,
- "verbose": 3,
- },
- "beta_search": {
- "group": "Update IRLS directive",
- "label": "Perform beta search",
- "value": False,
- "verbose": 3,
- },
- "starting_chi_factor": {
- "group": "Update IRLS directive",
- "label": "IRLS start chi factor",
+ "reference_model": {
+ "association": ["Cell", "Vertex"],
+ "main": True,
+ "dataType": "Float",
+ "group": "Mesh and models",
+ "isValue": True,
"optional": True,
"enabled": False,
- "value": 1.0,
- "tooltip": "This chi factor will be used to determine the misfit"
- " threshold after which IRLS iterations begin.",
- "verbose": 3,
- },
- "max_global_iterations": {
- "min": 1,
- "lineEdit": False,
- "group": "Optimization",
- "label": "Maximum iterations",
- "tooltip": "Number of L2 and IRLS iterations combined",
- "value": 100,
- "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,
- "verbose": 2,
- },
- "coolingRate": {
- "group": "Optimization",
- "label": "Iterations per beta",
- "value": 2,
- "min": 1,
- "LineEdit": False,
- "max": 10,
- "precision": 1,
- "verbose": 2,
- },
- "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.1,
- "max": 100,
- "precision": 1,
- "lineEdit": False,
- "verbose": 2,
+ "parent": "mesh",
+ "label": "Reference",
+ "property": None,
+ "value": 0.0,
},
- "max_line_search_iterations": {
- "group": "Optimization",
- "label": "Maximum number of line searches",
- "value": 20,
- "min": 1,
- "enabled": True,
- "verbose": 3,
+ "lower_bound": {
+ "association": ["Cell", "Vertex"],
+ "main": True,
+ "dataType": "Float",
+ "group": "Mesh and models",
+ "isValue": True,
+ "parent": "mesh",
+ "label": "Lower bound",
+ "property": "",
+ "optional": True,
+ "value": 1e-08,
+ "enabled": False,
+ "tooltip": "Minimum value that the model will contain after inversion.",
},
- "max_cg_iterations": {
- "min": 0,
- "group": "Optimization",
- "label": "Maximum CG iterations",
- "value": 30,
- "enabled": True,
- "verbose": 2,
+ "upper_bound": {
+ "association": ["Cell", "Vertex"],
+ "main": True,
+ "dataType": "Float",
+ "group": "Mesh and models",
+ "isValue": True,
+ "parent": "mesh",
+ "label": "Upper bound",
+ "property": "",
+ "optional": True,
+ "value": 100.0,
+ "enabled": False,
+ "tooltip": "Maximum value that the model will contain after inversion.",
},
- "initial_beta_ratio": {
- "min": 0.0,
- "precision": 2,
- "group": "Optimization",
+ "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": "",
"optional": True,
"enabled": True,
- "label": "Initial beta ratio",
- "value": 100.0,
- "verbose": 2,
+ "tooltip": "Select a topography object to define the active cells for inversion.",
},
- "initial_beta": {
- "min": 0.0,
- "group": "Optimization",
+ "topography": {
+ "association": ["Vertex", "Cell"],
+ "dataType": "Float",
+ "group": "Topography",
+ "main": True,
"optional": True,
"enabled": False,
- "dependency": "initial_beta_ratio",
- "dependencyType": "disabled",
- "label": "Initial beta",
- "value": 1.0,
+ "label": "Elevation channel",
+ "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object.",
+ "parent": "topography_object",
+ "dependency": "topography_object",
+ "dependencyType": "enabled",
+ "value": "",
"verbose": 2,
},
- "tol_cg": {
- "min": 0,
- "group": "Optimization",
- "label": "Conjugate gradient tolerance",
- "value": 1e-4,
- "enabled": True,
- "verbose": 3,
+ "active_model": {
+ "association": "Cell",
+ "dataType": ["Referenced", "Boolean", "Integer"],
+ "group": "Topography",
+ "main": True,
+ "enabled": False,
+ "dependency": "topography_object",
+ "dependencyType": "disabled",
+ "label": "Active model",
+ "tooltip": "Provide the active cell boolean model directly if topography not set.",
+ "parent": "mesh",
+ "value": "",
},
+ "output_tile_files": False,
+ "inversion_style": "voxel",
"alpha_s": {
"min": 0.0,
"group": "Regularization",
- "label": "Smallness weight",
+ "label": "Reference 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,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "isValue": True,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
+ "enabled": False,
},
"length_scale_x": {
"min": 0.0,
@@ -299,6 +195,11 @@
"label": "X-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in x biased smoothness",
"value": 1.0,
+ "isValue": True,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": True,
},
"length_scale_y": {
@@ -307,6 +208,11 @@
"label": "Y-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness",
"value": 1.0,
+ "isValue": True,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": True,
},
"length_scale_z": {
@@ -315,98 +221,275 @@
"label": "Z-smoothness weight",
"tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess",
"value": 1.0,
+ "isValue": True,
+ "parent": "mesh",
+ "association": "Cell",
+ "dataType": "Float",
+ "property": "",
"enabled": True,
},
"s_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Smallness norm",
+ "isValue": True,
+ "parent": "mesh",
+ "property": "",
"value": 0.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
- "lineEdit": False,
- "enabled": True,
+ "lineEdit": True,
+ "enabled": False,
+ "dependency": "reference_model",
+ "dependencyType": "enabled",
+ "tooltip": "Lp-norm used in the smallness term of the objective function.",
},
"x_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "X-smoothness norm",
+ "isValue": True,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": False,
"enabled": True,
+ "tooltip": "Lp-norm used in the x-smoothness term of the objective function.",
},
"y_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Y-smoothness norm",
+ "isValue": True,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": False,
"enabled": True,
+ "tooltip": "Lp-norm used in the y-smoothness term of the objective function.",
},
"z_norm": {
- "min": 0.0,
- "max": 2.0,
- "group": "Regularization",
+ "association": "Cell",
+ "dataType": "Float",
+ "group": "Sparse/blocky model",
"label": "Z-smoothness norm",
+ "isValue": True,
+ "parent": "mesh",
+ "property": "",
"value": 2.0,
+ "min": 0.0,
+ "max": 2.0,
"precision": 2,
"lineEdit": False,
"enabled": True,
- },
- "reference_model": {
- "association": ["Cell", "Vertex"],
- "main": True,
- "dataType": "Float",
- "group": "Mesh and models",
- "isValue": True,
- "optional": True,
- "enabled": False,
- "parent": "mesh",
- "label": "Reference",
- "property": None,
- "value": 0.0,
+ "tooltip": "Lp-norm used in the z-smoothness term of the objective function.",
},
"gradient_type": {
"choiceList": ["total", "components"],
- "group": "Regularization",
+ "group": "Sparse/blocky model",
"label": "Gradient type",
"value": "total",
"verbose": 3,
+ "tooltip": "Choose whether the IRLS weights for regularization terms are updated using total or partial gradients.",
},
- "lower_bound": {
- "association": ["Cell", "Vertex"],
- "main": True,
- "dataType": "Float",
- "group": "Mesh and models",
- "isValue": True,
- "parent": "mesh",
- "label": "Lower bound",
- "property": None,
- "optional": True,
- "value": -10.0,
- "enabled": False,
+ "max_irls_iterations": {
+ "min": 0,
+ "group": "Sparse/blocky model",
+ "label": "Maximum IRLS iterations",
+ "tooltip": "Incomplete Re-weighted Least Squares iterations for non-L2 problems",
+ "value": 25,
+ "enabled": True,
+ "verbose": 2,
},
- "upper_bound": {
- "association": ["Cell", "Vertex"],
- "main": True,
- "dataType": "Float",
- "group": "Mesh and models",
- "isValue": True,
- "parent": "mesh",
- "label": "Upper bound",
- "property": None,
+ "starting_chi_factor": {
+ "group": "Sparse/blocky model",
+ "label": "IRLS start chi factor",
+ "enabled": True,
+ "value": 1.0,
+ "tooltip": "This chi factor will be used to determine the misfit threshold after which IRLS iterations begin.",
+ "verbose": 3,
+ },
+ "chi_factor": {
+ "min": 0.1,
+ "max": 20.0,
+ "precision": 1,
+ "lineEdit": False,
+ "group": "Cooling schedule/target",
+ "label": "Chi factor",
+ "value": 1.0,
+ "enabled": True,
+ "tooltip": "The global target data misfit value.",
+ },
+ "auto_scale_misfits": {
+ "group": "Cooling schedule/target",
+ "label": "Auto-scale misfits",
+ "value": True,
+ "verbose": 3,
+ "visible": True,
+ "tooltip": "Whether to auto-scale misfits functions (tile, frequency, joint methods) based on chi-factor.",
+ },
+ "initial_beta_ratio": {
+ "min": 0.0,
+ "precision": 2,
+ "group": "Cooling schedule/target",
"optional": True,
+ "enabled": True,
+ "label": "Initial beta ratio",
"value": 10.0,
+ "verbose": 2,
+ "tooltip": "Estimate the trade-off parameter by scaling the ratio between the largest derivatives in the objective function gradients.",
+ },
+ "initial_beta": {
+ "min": 0.0,
+ "group": "Cooling schedule/target",
+ "optional": True,
"enabled": False,
+ "dependency": "initial_beta_ratio",
+ "dependencyType": "disabled",
+ "label": "Initial beta",
+ "value": 1.0,
+ "verbose": 2,
+ "tooltip": "Trade-off parameter between data misfit and regularization.",
+ },
+ "coolingFactor": {
+ "group": "Cooling schedule/target",
+ "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.1,
+ "max": 100,
+ "precision": 1,
+ "lineEdit": False,
+ "verbose": 2,
+ },
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 2,
+ "min": 1,
+ "LineEdit": False,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": True,
+ "tooltip": "Set the number of iterations per beta value. Use higher values for more non-linear optimization problems.",
+ },
+ "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,
+ "verbose": 3,
+ "tooltip": "Perform an Armijo backtracking linesearch for the provided number of iterations.",
+ },
+ "max_cg_iterations": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Maximum CG iterations",
+ "value": 30,
+ "enabled": True,
+ "verbose": 2,
+ },
+ "tol_cg": {
+ "min": 0,
+ "group": "Optimization",
+ "label": "Conjugate gradient tolerance",
+ "value": 0.0001,
+ "enabled": True,
+ "verbose": 3,
+ },
+ "f_min_change": {
+ "group": "Optimization",
+ "label": "Minimum change in objective function",
+ "value": 0.01,
+ "min": 1e-06,
+ "verbose": 3,
+ "enabled": True,
+ "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed.",
+ },
+ "beta_tol": {
+ "group": "Update IRLS directive",
+ "label": "Beta tolerance",
+ "value": 0.5,
+ "min": 0.0001,
+ "verbose": 3,
+ "visible": False,
+ },
+ "prctile": {
+ "group": "Update IRLS directive",
+ "label": "Percentile",
+ "value": 95,
+ "max": 100,
+ "min": 5,
+ "verbose": 3,
+ "visible": False,
+ },
+ "coolEps_q": {
+ "group": "Update IRLS directive",
+ "label": "Cool epsilon q",
+ "value": True,
+ "verbose": 3,
+ "visible": False,
+ },
+ "coolEpsFact": {
+ "group": "Update IRLS directive",
+ "label": "Cool epsilon fact",
+ "value": 1.2,
+ "verbose": 3,
+ "visible": False,
+ },
+ "beta_search": {
+ "group": "Update IRLS directive",
+ "label": "Perform beta search",
+ "value": False,
+ "verbose": 3,
+ "visible": False,
+ "tooltip": "Whether to perform a beta search.",
+ },
+ "sens_wts_threshold": {
+ "group": "Update sensitivity weights directive",
+ "tooltip": "Update sensitivity weight threshold",
+ "label": "Threshold (%)",
+ "value": 1.0,
+ "max": 100.0,
+ "min": 0.0,
+ "precision": 3,
+ "enabled": True,
+ "verbose": 2,
+ },
+ "every_iteration_bool": {
+ "group": "Update sensitivity weights directive",
+ "tooltip": "Update weights at every iteration",
+ "label": "Every iteration",
+ "value": True,
+ "verbose": 2,
+ "enabled": True,
},
"parallelized": {
"group": "Compute",
"label": "Use parallelization",
"value": True,
+ "visible": False,
},
"n_cpu": {
"min": 1,
@@ -417,6 +500,19 @@
"enabled": False,
"label": "Number of CPUs",
"value": 1,
+ "visible": False,
+ },
+ "tile_spatial": {
+ "group": "Compute",
+ "label": "Number of tiles",
+ "parent": "data_object",
+ "isValue": True,
+ "property": "",
+ "value": 1,
+ "min": 1,
+ "max": 1000,
+ "verbose": 2,
+ "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library.",
},
"store_sensitivities": {
"choiceList": ["disk", "ram"],
@@ -425,35 +521,46 @@
"tooltip": "Use disk on a fast local SSD, and RAM elsewhere",
"value": "ram",
},
+ "save_sensitivities": {
+ "group": "Update sensitivity weights directive",
+ "label": "Save sensitivities",
+ "tooltip": "Save the summed square row sensitivities to geoh5.",
+ "value": False,
+ },
"max_chunk_size": {
"min": 0,
"group": "Compute",
"optional": True,
"enabled": True,
- "label": "Maximum chunk size",
+ "label": "Maximum chunk size (Mb)",
"value": 128,
"verbose": 3,
+ "visible": False,
+ "tooltip": "Limit the chunk size used by Dask for distributed computation.",
},
"chunk_by_rows": {
"group": "Compute",
"label": "Chunk by rows",
"value": True,
"verbose": 3,
+ "visible": False,
},
"out_group": {
"label": "SimPEG group",
- "value": None,
+ "value": "",
"groupType": "{55ed3daf-c192-4d4b-a439-60fa987fe2b8}",
"group": "Drag-and-drop options",
"visible": True,
"optional": True,
"enabled": False,
+ "tooltip": "Optionally set the SimPEG group to which results will be saved.",
},
"generate_sweep": {
"label": "Generate sweep file",
"group": "Python run preferences",
"main": True,
"value": False,
+ "tooltip": "Generates a file for sweeping parameters instead of running the application.",
},
"fix_aspect_ratio": True,
"colorbar": False,
@@ -473,7 +580,7 @@
validations = {
"topography_object": {
- "types": [str, UUID, Surface, Points, Grid2D, Curve],
+ "types": [str, UUID, Surface, Points, Grid2D, Curve, type(None)],
},
"alpha_s": {"types": [int, float]},
"length_scale_x": {"types": [int, float]},
diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py
index 15e7437e..5b25cf8d 100644
--- a/simpeg_drivers/driver.py
+++ b/simpeg_drivers/driver.py
@@ -1,19 +1,13 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -28,11 +22,13 @@
import numpy as np
from dask import config as dconf
from geoapps_utils.driver.driver import BaseDriver
+
+from geoh5py.data import Data
from geoh5py.groups import SimPEGGroup
from geoh5py.shared.utils import fetch_active_workspace
from geoh5py.ui_json import InputFile
from param_sweeps.driver import SweepParams
-from SimPEG import (
+from simpeg import (
dask,
directives,
inverse_problem,
@@ -41,7 +37,7 @@
objective_function,
optimization,
)
-from SimPEG.regularization import BaseRegularization, Sparse
+from simpeg.regularization import BaseRegularization, Sparse
from simpeg_drivers import DRIVER_MAP
from simpeg_drivers.components import (
@@ -102,14 +98,10 @@ def data_misfit(self):
)
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
+ self.inversion_data.save_data()
+ self._data_misfit.multipliers = np.asarray(
+ self._data_misfit.multipliers, dtype=float
+ )
return self._data_misfit
@@ -143,7 +135,7 @@ def inversion(self):
return self._inversion
@property
- def inversion_data(self):
+ def inversion_data(self) -> InversionData:
"""Inversion data"""
if getattr(self, "_inversion_data", None) is None:
with fetch_active_workspace(self.workspace, mode="r+"):
@@ -152,16 +144,11 @@ def inversion_data(self):
return self._inversion_data
@property
- def inversion_mesh(self):
+ def inversion_mesh(self) -> InversionMesh:
"""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,
- )
+ self._inversion_mesh = InversionMesh(self.workspace, self.params)
return self._inversion_mesh
@property
@@ -271,7 +258,8 @@ def params(self, val: (InversionBaseParams, SweepParams)):
@property
def regularization(self):
if getattr(self, "_regularization", None) is None:
- self._regularization = self.get_regularization()
+ with fetch_active_workspace(self.workspace, mode="r"):
+ self._regularization = self.get_regularization()
return self._regularization
@@ -323,15 +311,24 @@ def run(self):
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()
+ self.directives.save_iteration_data_directive.write(0, predicted)
+
+ if (
+ isinstance(
+ self.directives.save_iteration_data_directive,
+ directives.SaveDataGeoH5,
+ )
+ and len(self.directives.save_iteration_data_directive.channels) > 1
+ ):
+ directives.SavePropertyGroup(
+ self.inversion_data.entity,
+ channels=self.directives.save_iteration_data_directive.channels,
+ components=self.directives.save_iteration_data_directive.components,
+ ).write(0)
+
+ for directive in self.directives.save_directives:
+ if isinstance(directive, directives.SaveLogFilesGeoH5):
+ directive.save_log()
def start_inversion_message(self):
# SimPEG reports half phi_d, so we scale to match
@@ -348,12 +345,12 @@ def start_inversion_message(self):
data_count = len(self.inversion_data.survey.std)
print(
- f"Target Misfit: {0.5 * self.params.chi_factor * data_count:.2e} ({data_count} data "
- f"with chifact = {self.params.chi_factor}) / 2"
+ f"Target Misfit: {self.params.chi_factor * data_count:.2e} ({data_count} data "
+ f"with chifact = {self.params.chi_factor})"
)
print(
- f"IRLS Start Misfit: {0.5 * chi_start * data_count:.2e} ({data_count} data "
- f"with chifact = {chi_start}) / 2"
+ f"IRLS Start Misfit: {chi_start * data_count:.2e} ({data_count} data "
+ f"with chifact = {chi_start})"
)
@property
@@ -390,24 +387,30 @@ def get_regularization(self):
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}"),
+ comps = "sxz" if "2d" in self.params.inversion_type else "sxyz"
+ avg_comps = "sxy" if "2d" in self.params.inversion_type else "sxyz"
+ weights = ["alpha_s"] + [f"length_scale_{k}" for k in comps[1:]]
+ for comp, avg_comp, objfct, weight in zip(
+ comps, avg_comps, reg.objfcts, weights
+ ):
+ if getattr(self.models, weight) is None:
+ setattr(reg, weight, 0.0)
+ continue
+
+ weight = mapping * getattr(self.models, weight)
+ norm = mapping * getattr(self.models, f"{comp}_norm")
+ if comp in "xyz":
+ weight = (
+ getattr(reg.regularization_mesh, f"aveCC2F{avg_comp}") * weight
)
+ norm = getattr(reg.regularization_mesh, f"aveCC2F{avg_comp}") * norm
- if getattr(self.params, f"{comp}_norm") is not None:
- norms.append(getattr(self.params, f"{comp}_norm"))
-
- if norms:
- reg.norms = norms
+ objfct.set_weights(**{comp: weight})
+ objfct.norm = norm
if getattr(self.params, "gradient_type") is not None:
setattr(
@@ -448,10 +451,10 @@ def start(cls, filepath: str | Path, driver_class=None):
_ = driver_class
ifile = InputFile.read_ui_json(filepath)
- inversion_type = ifile.data["inversion_type"]
+ inversion_type = ifile.ui_json.get("inversion_type", None)
if inversion_type not in DRIVER_MAP:
msg = f"Inversion type {inversion_type} is not supported."
- msg += f" Valid inversions are: {*list(DRIVER_MAP), }."
+ msg += f" Valid inversions are: {(*list(DRIVER_MAP),)}."
raise NotImplementedError(msg)
mod_name, class_name = DRIVER_MAP.get(inversion_type)
diff --git a/simpeg_drivers/electricals/__init__.py b/simpeg_drivers/electricals/__init__.py
index f1cc7813..2d06129e 100644
--- a/simpeg_drivers/electricals/__init__.py
+++ b/simpeg_drivers/electricals/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/direct_current/__init__.py b/simpeg_drivers/electricals/direct_current/__init__.py
index de3a54f7..4d06f672 100644
--- a/simpeg_drivers/electricals/direct_current/__init__.py
+++ b/simpeg_drivers/electricals/direct_current/__init__.py
@@ -1,16 +1,9 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/constants.py b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/constants.py
index d091d448..4c155330 100644
--- a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/constants.py
+++ b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,21 +20,22 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Direct Current (DC) 2D Batch Inversion",
"icon": "PotentialElectrode",
- "inversion_type": "direct current pseudo 3d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "direct current pseudo 3d",
"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,
@@ -51,21 +45,16 @@
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -74,15 +63,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -94,11 +91,6 @@
"generate_sweep": False,
"files_only": False,
"cleanup": True,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "run_command_boolean": False,
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"potential_channel_bool": True,
}
@@ -106,17 +98,17 @@
"version": simpeg_drivers.__version__,
"title": "Direct Current (DC) 2D Batch Forward",
"icon": "PotentialElectrode",
- "inversion_type": "direct current pseudo 3d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "direct current pseudo 3d",
"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,
@@ -125,7 +117,11 @@
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -136,11 +132,6 @@
"generate_sweep": False,
"files_only": False,
"cleanup": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "run_command_boolean": False,
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
@@ -156,6 +147,7 @@
"label": "Line ID",
"parent": "data_object",
"value": None,
+ "tooltip": "Selects the data representing the different lines in the survey.",
},
"data_object": {
"main": True,
@@ -241,6 +233,14 @@
"label": "Expansion factor",
"value": 1.1,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -258,6 +258,8 @@
"main": True,
"group": "Mesh and models",
"isValue": True,
+ "optional": True,
+ "enabled": False,
"parent": "mesh",
"label": "Reference Conductivity (S/m)",
"property": None,
@@ -270,7 +272,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -283,7 +285,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
diff --git a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/driver.py b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/driver.py
index 6f831109..931f5c0f 100644
--- a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/driver.py
+++ b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/params.py b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/params.py
index 6d4b5edd..d2987f95 100644
--- a/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/params.py
+++ b/simpeg_drivers/electricals/direct_current/pseudo_three_dimensions/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/direct_current/three_dimensions/__init__.py b/simpeg_drivers/electricals/direct_current/three_dimensions/__init__.py
index c87f9fc6..5a77fe95 100644
--- a/simpeg_drivers/electricals/direct_current/three_dimensions/__init__.py
+++ b/simpeg_drivers/electricals/direct_current/three_dimensions/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/electricals/direct_current/three_dimensions/constants.py b/simpeg_drivers/electricals/direct_current/three_dimensions/constants.py
index 1ca83ddb..f7b574d0 100644
--- a/simpeg_drivers/electricals/direct_current/three_dimensions/constants.py
+++ b/simpeg_drivers/electricals/direct_current/three_dimensions/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,39 +20,34 @@
from simpeg_drivers.constants import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Direct Current (DC) 3D Inversion",
- "documentation": "https://simpeg-drivers.readthedocs.io/en/stable/content/applications/dcip_inversion.html",
"icon": "PotentialElectrode",
- "inversion_type": "direct current 3d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "direct current 3d",
"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,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -70,15 +58,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -88,31 +84,30 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"potential_channel_bool": True,
}
forward_defaults = {
"version": simpeg_drivers.__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",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "direct current 3d",
"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,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -121,16 +116,12 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "Direct Current (DC) 3D Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html",
+ "documentation": "https://mirageoscience-geoapps.readthedocs-hosted.com/en/stable/content/applications/dcip_inversion.html",
"icon": "PotentialElectrode",
"inversion_type": "direct current 3d",
"data_object": {
@@ -168,6 +159,14 @@
"property": None,
"value": 1.0,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
@@ -175,7 +174,7 @@
"main": True,
"isValue": False,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": None,
"value": 1e-1,
},
@@ -186,8 +185,10 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 0.0,
},
"lower_bound": {
@@ -197,7 +198,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -210,7 +211,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
@@ -273,7 +274,7 @@
"upper_bound": 100.0,
"lower_bound": 1e-5,
"max_global_iterations": 25,
- "sens_wts_threshold": 0.001,
+ "sens_wts_threshold": None,
"topography_object": UUID("{ab3c2083-6ea8-4d31-9230-7aad3ec09525}"),
"topography": UUID("{a603a762-f6cb-4b21-afda-3160e725bf7d}"),
"z_from_topo": True,
diff --git a/simpeg_drivers/electricals/direct_current/three_dimensions/driver.py b/simpeg_drivers/electricals/direct_current/three_dimensions/driver.py
index b34ec492..80566c0a 100644
--- a/simpeg_drivers/electricals/direct_current/three_dimensions/driver.py
+++ b/simpeg_drivers/electricals/direct_current/three_dimensions/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/direct_current/three_dimensions/params.py b/simpeg_drivers/electricals/direct_current/three_dimensions/params.py
index db14cda4..56b833d7 100644
--- a/simpeg_drivers/electricals/direct_current/three_dimensions/params.py
+++ b/simpeg_drivers/electricals/direct_current/three_dimensions/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -46,6 +39,7 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._potential_channel_bool = None
self._potential_channel = None
self._potential_uncertainty = None
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
@@ -57,6 +51,15 @@ def inversion_type(self):
def inversion_type(self, val):
self.setter_validator("inversion_type", val)
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def potential_channel_bool(self):
return self._potential_channel_bool
diff --git a/simpeg_drivers/electricals/direct_current/two_dimensions/__init__.py b/simpeg_drivers/electricals/direct_current/two_dimensions/__init__.py
index 62ac57b4..970f5f01 100644
--- a/simpeg_drivers/electricals/direct_current/two_dimensions/__init__.py
+++ b/simpeg_drivers/electricals/direct_current/two_dimensions/__init__.py
@@ -1,20 +1,15 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
-from .params import DirectCurrent2DParams # noqa: F401
__all__ = ["DirectCurrent2DParams"]
diff --git a/simpeg_drivers/electricals/direct_current/two_dimensions/constants.py b/simpeg_drivers/electricals/direct_current/two_dimensions/constants.py
index db01bb98..94cf4c32 100644
--- a/simpeg_drivers/electricals/direct_current/two_dimensions/constants.py
+++ b/simpeg_drivers/electricals/direct_current/two_dimensions/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,15 +20,19 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Direct Current (DC) 2D Inversion",
"icon": "PotentialElectrode",
- "inversion_type": "direct current 2d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "direct current 2d",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": True,
"line_object": None,
@@ -52,21 +49,16 @@
"horizontal_padding": 1000.0,
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -75,15 +67,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -93,10 +93,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"potential_channel_bool": True,
}
@@ -104,11 +100,14 @@
"version": simpeg_drivers.__version__,
"title": "Direct Current (DC) 2D Forward",
"icon": "PotentialElectrode",
- "inversion_type": "direct current 2d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "direct current 2d",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": True,
"line_object": None,
@@ -124,7 +123,11 @@
"horizontal_padding": 1000.0,
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -133,10 +136,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"gradient_type": "total",
}
@@ -153,6 +152,7 @@
"label": "Line ID",
"parent": "data_object",
"value": None,
+ "tooltip": "Selects the data representing the different lines in the survey.",
},
"line_id": {
"group": "Data",
@@ -160,6 +160,7 @@
"min": 1,
"label": "Line number",
"value": 1,
+ "tooltip": "Selects the line of data to be processed.",
},
"data_object": {
"main": True,
@@ -209,6 +210,8 @@
"u_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Easting core cell size (m)",
@@ -217,6 +220,8 @@
"v_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Northing core cell size (m)",
@@ -225,6 +230,8 @@
"depth_core": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Depth of core (m)",
@@ -233,6 +240,8 @@
"horizontal_padding": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Horizontal padding (m)",
@@ -241,17 +250,28 @@
"vertical_padding": {
"min": 0.0,
"group": "Mesh and models",
- "main": True,
+ "dependency": "mesh",
"dependencyType": "disabled",
+ "main": True,
"label": "Vertical padding (m)",
"value": 1000.0,
},
"expansion_factor": {
"main": True,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"label": "Expansion factor",
"value": 1.1,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -259,7 +279,7 @@
"main": True,
"isValue": False,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": None,
"value": 1e-3,
},
@@ -270,8 +290,10 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 1e-3,
},
"lower_bound": {
@@ -281,7 +303,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -294,7 +316,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
diff --git a/simpeg_drivers/electricals/direct_current/two_dimensions/driver.py b/simpeg_drivers/electricals/direct_current/two_dimensions/driver.py
index f2a742d1..95dbbbbb 100644
--- a/simpeg_drivers/electricals/direct_current/two_dimensions/driver.py
+++ b/simpeg_drivers/electricals/direct_current/two_dimensions/driver.py
@@ -1,30 +1,23 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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_drivers.driver import InversionDriver
+from simpeg_drivers.electricals.driver import Base2DDriver
from .constants import validations
from .params import DirectCurrent2DParams
-class DirectCurrent2DDriver(InversionDriver):
+class DirectCurrent2DDriver(Base2DDriver):
_params_class = DirectCurrent2DParams
_validations = validations
diff --git a/simpeg_drivers/electricals/direct_current/two_dimensions/params.py b/simpeg_drivers/electricals/direct_current/two_dimensions/params.py
index 9a8cc743..a9deb13d 100644
--- a/simpeg_drivers/electricals/direct_current/two_dimensions/params.py
+++ b/simpeg_drivers/electricals/direct_current/two_dimensions/params.py
@@ -1,26 +1,20 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers.electricals.params import Base2DParams
+
from .constants import (
default_ui_json,
forward_defaults,
diff --git a/simpeg_drivers/electricals/driver.py b/simpeg_drivers/electricals/driver.py
index 991b1908..f0a87d78 100644
--- a/simpeg_drivers/electricals/driver.py
+++ b/simpeg_drivers/electricals/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -24,21 +17,60 @@
from pathlib import Path
import numpy as np
-from geoapps_utils.locations import get_locations
-from geoapps_utils.numerical import weighted_average
+from geoapps_utils.utils.locations import get_locations
+from geoapps_utils.utils.numerical import weighted_average
from geoh5py.data import Data
from geoh5py.objects import DrapeModel
+from geoh5py.ui_json.ui_json import fetch_active_workspace
from geoh5py.workspace import Workspace
from simpeg_drivers.components.data import InversionData
+from simpeg_drivers.components.meshes import InversionMesh
from simpeg_drivers.components.topography import InversionTopography
from simpeg_drivers.components.windows import InversionWindow
+from simpeg_drivers.driver import InversionDriver
from simpeg_drivers.line_sweep.driver import LineSweepDriver
from simpeg_drivers.params import BaseParams
from simpeg_drivers.utils.surveys import extract_dcip_survey
from simpeg_drivers.utils.utils import get_drape_model
+class Base2DDriver(InversionDriver):
+ @property
+ def inversion_mesh(self) -> InversionMesh:
+ """Inversion mesh"""
+ if getattr(self, "_inversion_mesh", None) is None:
+ with fetch_active_workspace(self.workspace, mode="r+"):
+ if self.params.mesh is None:
+ self.params.mesh = self.create_drape_mesh()
+
+ self._inversion_mesh = InversionMesh(self.workspace, self.params)
+ return self._inversion_mesh
+
+ def create_drape_mesh(self) -> DrapeModel:
+ """Create a drape mesh for the inversion."""
+ current_entity = self.params.data_object.current_electrodes
+ receiver_locs = np.vstack(
+ [self.params.data_object.vertices, current_entity.vertices]
+ )
+ with fetch_active_workspace(self.workspace):
+ mesh = get_drape_model(
+ self.workspace,
+ "Models",
+ receiver_locs,
+ [
+ self.params.u_cell_size,
+ self.params.v_cell_size,
+ ],
+ self.params.depth_core,
+ [self.params.horizontal_padding] * 2
+ + [self.params.vertical_padding, 1],
+ self.params.expansion_factor,
+ )[0]
+
+ return mesh
+
+
class BasePseudo3DDriver(LineSweepDriver):
_params_class: type(BaseParams)
_params_2d_class: type(BaseParams)
@@ -93,6 +125,7 @@ def write_files(self, lookup):
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_data.save_data()
self._inversion_topography = InversionTopography(
self.workspace, self.pseudo3d_params
)
diff --git a/simpeg_drivers/electricals/induced_polarization/__init__.py b/simpeg_drivers/electricals/induced_polarization/__init__.py
index de3a54f7..4d06f672 100644
--- a/simpeg_drivers/electricals/induced_polarization/__init__.py
+++ b/simpeg_drivers/electricals/induced_polarization/__init__.py
@@ -1,16 +1,9 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/constants.py b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/constants.py
index c12e019c..edd5e580 100644
--- a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/constants.py
+++ b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,15 +20,19 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Induced Polarization (IP) 2D Batch Inversion",
"icon": "PotentialElectrode",
- "inversion_type": "induced polarization pseudo 3d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "induced polarization pseudo 3d",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"line_object": None,
"z_from_topo": False,
@@ -51,22 +48,17 @@
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"conductivity_model": 1e-3,
"starting_model": 1e-3,
- "reference_model": 1e-3,
- "lower_bound": None,
+ "reference_model": None,
+ "lower_bound": 0.0,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -75,15 +67,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -95,11 +95,6 @@
"generate_sweep": False,
"files_only": False,
"cleanup": True,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "run_command_boolean": False,
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"chargeability_channel_bool": True,
}
@@ -107,11 +102,14 @@
"version": simpeg_drivers.__version__,
"title": "Induced Polarization (IP) 2D Batch Forward",
"icon": "PotentialElectrode",
- "inversion_type": "induced polarization pseudo 3d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "induced polarization pseudo 3d",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"line_object": None,
"z_from_topo": False,
@@ -126,8 +124,12 @@
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"conductivity_model": 1e-3,
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -138,11 +140,6 @@
"generate_sweep": False,
"files_only": False,
"cleanup": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "run_command_boolean": False,
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
@@ -158,6 +155,7 @@
"label": "Line ID",
"parent": "data_object",
"value": None,
+ "tooltip": "Selects the data representing the different lines in the survey.",
},
"data_object": {
"main": True,
@@ -197,6 +195,14 @@
"value": None,
"visible": True,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"conductivity_model": {
"association": "Cell",
"dataType": "Float",
@@ -274,6 +280,8 @@
"parent": "mesh",
"label": "Reference chargeability (V/V)",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 1e-3,
},
"lower_bound": {
diff --git a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/driver.py b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/driver.py
index 22581042..f41ab6a7 100644
--- a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/driver.py
+++ b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/params.py b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/params.py
index 0fb92085..93112c9b 100644
--- a/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/params.py
+++ b/simpeg_drivers/electricals/induced_polarization/pseudo_three_dimensions/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/induced_polarization/three_dimensions/__init__.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/__init__.py
index 860286c4..4bf5a597 100644
--- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/__init__.py
+++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/electricals/induced_polarization/three_dimensions/constants.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/constants.py
index 50683ac4..5d582215 100644
--- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/constants.py
+++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,16 +19,19 @@
from simpeg_drivers import assets_path
from simpeg_drivers import default_ui_json as base_default_ui_json
+
inversion_defaults = {
"version": simpeg_drivers.__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",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "induced polarization 3d",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": True,
"receivers_radar_drape": None,
@@ -44,22 +40,17 @@
"chargeability_channel": None,
"chargeability_uncertainty": 1.0,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"conductivity_model": 1e-3,
"starting_model": 0.0,
- "reference_model": 0.0,
- "lower_bound": None,
+ "reference_model": None,
+ "lower_bound": 0.0,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -70,15 +61,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
- "prctile": 50,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "prctile": 95,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
- "every_iteration_bool": False,
+ "every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -88,10 +87,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"chargeability_channel_bool": True,
}
@@ -99,13 +94,15 @@
forward_defaults = {
"version": simpeg_drivers.__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",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "induced polarization 3d",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": True,
"receivers_radar_drape": None,
@@ -113,8 +110,12 @@
"gps_receivers_offset": None,
"chargeability_channel_bool": True,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"conductivity_model": 1e-3,
"starting_model": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -123,16 +124,12 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "Induced Polarization (IP) 3D Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/dcip_inversion.html",
+ "documentation": "https://mirageoscience-geoapps.readthedocs-hosted.com/en/stable/content/applications/dcip_inversion.html",
"icon": "PotentialElectrode",
"inversion_type": "induced polarization 3d",
"data_object": {
@@ -192,8 +189,18 @@
"parent": "mesh",
"label": "Reference Chargeability (V/V)",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 0.0,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"conductivity_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
diff --git a/simpeg_drivers/electricals/induced_polarization/three_dimensions/driver.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/driver.py
index db923421..7e9a33f6 100644
--- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/driver.py
+++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electricals/induced_polarization/three_dimensions/params.py b/simpeg_drivers/electricals/induced_polarization/three_dimensions/params.py
index c6103984..8ecaa5bc 100644
--- a/simpeg_drivers/electricals/induced_polarization/three_dimensions/params.py
+++ b/simpeg_drivers/electricals/induced_polarization/three_dimensions/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -47,6 +40,7 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._chargeability_channel = None
self._chargeability_uncertainty = None
self._conductivity_model = None
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
@@ -89,3 +83,12 @@ def conductivity_model(self):
@conductivity_model.setter
def conductivity_model(self, val):
self.setter_validator("conductivity_model", val, fun=self._uuid_promoter)
+
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/__init__.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/__init__.py
index 680ae2c9..4a6b1cb1 100644
--- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/__init__.py
+++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/constants.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/constants.py
index 8b99120a..00bf5619 100644
--- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/constants.py
+++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,15 +20,19 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Induced Polarization (IP) 2D Inversion",
"icon": "PotentialElectrode",
- "inversion_type": "induced polarization 2d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "induced polarization 2d",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": True,
"line_object": None,
@@ -52,22 +49,17 @@
"horizontal_padding": 1000.0,
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
+ "model_type": "Conductivity (S/m)",
"conductivity_model": 1e-3,
"starting_model": None,
"reference_model": None,
- "lower_bound": None,
+ "lower_bound": 0.0,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -76,15 +68,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
- "every_iteration_bool": False,
+ "every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -94,10 +94,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
"chargeability_channel_bool": True,
}
@@ -105,11 +101,14 @@
"version": simpeg_drivers.__version__,
"title": "Induced Polarization (IP) 2D Forward",
"icon": "PotentialElectrode",
- "inversion_type": "induced polarization 2d",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "induced polarization 2d",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": True,
"line_object": None,
@@ -125,8 +124,12 @@
"horizontal_padding": 1000.0,
"vertical_padding": 1000.0,
"expansion_factor": 1.1,
+ "model_type": "Conductivity (S/m)",
"conductivity_model": 1e-3,
"starting_model": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -135,10 +138,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
@@ -154,6 +153,7 @@
"label": "Line ID",
"parent": "data_object",
"value": None,
+ "tooltip": "Selects the data representing the different lines in the survey.",
},
"line_id": {
"group": "Data",
@@ -161,6 +161,7 @@
"min": 1,
"label": "Line number",
"value": 1,
+ "tooltip": "Selects the line of data to be processed.",
},
"data_object": {
"main": True,
@@ -209,6 +210,8 @@
"u_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Easting core cell size (m)",
@@ -217,6 +220,8 @@
"v_cell_size": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Northing core cell size (m)",
@@ -225,6 +230,8 @@
"depth_core": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Depth of core (m)",
@@ -233,6 +240,8 @@
"horizontal_padding": {
"min": 0.0,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"main": True,
"enabled": True,
"label": "Horizontal padding (m)",
@@ -241,17 +250,28 @@
"vertical_padding": {
"min": 0.0,
"group": "Mesh and models",
- "main": True,
+ "dependency": "mesh",
"dependencyType": "disabled",
+ "main": True,
"label": "Vertical padding (m)",
"value": 1000.0,
},
"expansion_factor": {
"main": True,
"group": "Mesh and models",
+ "dependency": "mesh",
+ "dependencyType": "disabled",
"label": "Expansion factor",
"value": 1.1,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"conductivity_model": {
"association": "Cell",
"dataType": "Float",
@@ -283,6 +303,8 @@
"parent": "mesh",
"label": "Reference chargeability (V/V)",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 0.0,
},
"lower_bound": {
diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/driver.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/driver.py
index 0883dd0f..31450649 100644
--- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/driver.py
+++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/driver.py
@@ -1,30 +1,23 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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_drivers.driver import InversionDriver
+from simpeg_drivers.electricals.driver import Base2DDriver
from .constants import validations
from .params import InducedPolarization2DParams
-class InducedPolarization2DDriver(InversionDriver):
+class InducedPolarization2DDriver(Base2DDriver):
_params_class = InducedPolarization2DParams
_validations = validations
diff --git a/simpeg_drivers/electricals/induced_polarization/two_dimensions/params.py b/simpeg_drivers/electricals/induced_polarization/two_dimensions/params.py
index 5544a4e6..1c7a98e3 100644
--- a/simpeg_drivers/electricals/induced_polarization/two_dimensions/params.py
+++ b/simpeg_drivers/electricals/induced_polarization/two_dimensions/params.py
@@ -1,26 +1,20 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers.electricals.params import Base2DParams
+
from .constants import (
default_ui_json,
forward_defaults,
diff --git a/simpeg_drivers/electricals/params.py b/simpeg_drivers/electricals/params.py
index 8703c2fd..b13c6f90 100644
--- a/simpeg_drivers/electricals/params.py
+++ b/simpeg_drivers/electricals/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -38,6 +31,7 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._horizontal_padding: float = 100.0
self._vertical_padding: float = 100.0
self._expansion_factor: float = 100.0
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
@@ -53,6 +47,15 @@ def line_object(self, val):
if isinstance(val, Data) and val.association is not DataAssociationEnum.CELL:
raise ValueError("Line identifier must be associated with cells.")
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def u_cell_size(self):
""""""
@@ -127,32 +130,6 @@ def line_id(self):
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):
"""
diff --git a/simpeg_drivers/electromagnetics/__init__.py b/simpeg_drivers/electromagnetics/__init__.py
index de3a54f7..4d06f672 100644
--- a/simpeg_drivers/electromagnetics/__init__.py
+++ b/simpeg_drivers/electromagnetics/__init__.py
@@ -1,16 +1,9 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electromagnetics/frequency_domain/__init__.py b/simpeg_drivers/electromagnetics/frequency_domain/__init__.py
index d9d1e73c..9dc6d396 100644
--- a/simpeg_drivers/electromagnetics/frequency_domain/__init__.py
+++ b/simpeg_drivers/electromagnetics/frequency_domain/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/electromagnetics/frequency_domain/constants.py b/simpeg_drivers/electromagnetics/frequency_domain/constants.py
index deeecb93..4ecb2603 100644
--- a/simpeg_drivers/electromagnetics/frequency_domain/constants.py
+++ b/simpeg_drivers/electromagnetics/frequency_domain/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,27 +19,36 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Frequency-domain EM (FEM) Inversion",
"icon": "surveyairborneem",
- "inversion_type": "fem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "fem",
"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,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"inversion_style": "voxel",
+ "alpha_s": 1.0,
"length_scale_x": 1.0,
"length_scale_y": 1.0,
"length_scale_z": 1.0,
@@ -55,26 +57,24 @@
"y_norm": 2.0,
"z_norm": 2.0,
"gradient_type": "total",
+ "max_irls_iterations": 25,
+ "starting_chi_factor": 1.0,
+ "beta_tol": 0.5,
+ "prctile": 95,
"chi_factor": 1.0,
+ "auto_scale_misfits": True,
"initial_beta_ratio": 1e2,
"initial_beta": None,
- "coolingRate": 2,
"coolingFactor": 2.0,
+ "coolingRate": 2,
"max_global_iterations": 50,
"max_line_search_iterations": 20,
- "max_cg_iterations": 50,
+ "max_cg_iterations": 30,
"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,
+ "f_min_change": 0.01,
"sens_wts_threshold": 1.0,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -84,26 +84,29 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__version__,
"title": "Frequency-domain EM (FEM) Forward",
"icon": "surveyairborneem",
- "inversion_type": "fem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "fem",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_real_channel_bool": True,
"z_imag_channel_bool": True,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -112,10 +115,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
@@ -192,6 +191,14 @@
"dependencyType": "enabled",
"value": None,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
@@ -199,7 +206,7 @@
"main": True,
"isValue": False,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": None,
"value": 1e-3,
},
@@ -210,8 +217,10 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 1e-3,
},
"lower_bound": {
@@ -221,7 +230,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -234,7 +243,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
diff --git a/simpeg_drivers/electromagnetics/frequency_domain/driver.py b/simpeg_drivers/electromagnetics/frequency_domain/driver.py
index a0351137..78dd8cc3 100644
--- a/simpeg_drivers/electromagnetics/frequency_domain/driver.py
+++ b/simpeg_drivers/electromagnetics/frequency_domain/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/electromagnetics/frequency_domain/params.py b/simpeg_drivers/electromagnetics/frequency_domain/params.py
index 675dd4ea..ed48874d 100644
--- a/simpeg_drivers/electromagnetics/frequency_domain/params.py
+++ b/simpeg_drivers/electromagnetics/frequency_domain/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -51,6 +44,7 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._z_imag_channel_bool = None
self._z_imag_channel = None
self._z_imag_uncertainty = None
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
@@ -98,6 +92,15 @@ def uncertainty(self, component: str) -> float:
uid = self.uncertainty_channel(component)
return self.property_group_data(uid)
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def tx_offsets(self):
if self._tx_offsets is None and self.data_object is not None:
diff --git a/simpeg_drivers/electromagnetics/time_domain/__init__.py b/simpeg_drivers/electromagnetics/time_domain/__init__.py
index c4b6eb3d..0649217f 100644
--- a/simpeg_drivers/electromagnetics/time_domain/__init__.py
+++ b/simpeg_drivers/electromagnetics/time_domain/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/electromagnetics/time_domain/constants.py b/simpeg_drivers/electromagnetics/time_domain/constants.py
index 0653fca6..6178d2cc 100644
--- a/simpeg_drivers/electromagnetics/time_domain/constants.py
+++ b/simpeg_drivers/electromagnetics/time_domain/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,15 +19,19 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Time-domain EM (TEM) Inversion",
"icon": "surveyairborneem",
- "inversion_type": "tdem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "tdem",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"data_units": "dB/dt (T/s)",
"z_channel": None,
@@ -44,12 +41,17 @@
"y_channel": None,
"y_uncertainty": None,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"inversion_style": "voxel",
+ "alpha_s": 1.0,
"length_scale_x": 1.0,
"length_scale_y": 1.0,
"length_scale_z": 1.0,
@@ -58,26 +60,24 @@
"y_norm": 2.0,
"z_norm": 2.0,
"gradient_type": "total",
+ "max_irls_iterations": 25,
+ "starting_chi_factor": 1.0,
+ "beta_tol": 0.5,
+ "prctile": 95,
"chi_factor": 1.0,
+ "auto_scale_misfits": True,
"initial_beta_ratio": 1e2,
"initial_beta": None,
- "coolingRate": 4,
"coolingFactor": 2.0,
+ "coolingRate": 2,
"max_global_iterations": 50,
"max_line_search_iterations": 20,
- "max_cg_iterations": 50,
+ "max_cg_iterations": 30,
"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,
+ "f_min_change": 0.01,
"sens_wts_threshold": 1.0,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -87,28 +87,31 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__version__,
"title": "Time-domain EM (TEM) Forward",
"icon": "surveyairborneem",
- "inversion_type": "tdem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "tdem",
"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,
+ "model_type": "Conductivity (S/m)",
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -117,10 +120,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
@@ -235,6 +234,14 @@
"dependencyType": "enabled",
"value": None,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
@@ -242,7 +249,7 @@
"main": True,
"isValue": False,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": None,
"value": 1e-3,
},
@@ -253,8 +260,10 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": None,
+ "optional": True,
+ "enabled": False,
"value": 1e-3,
},
"lower_bound": {
@@ -264,7 +273,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -277,14 +286,14 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
"enabled": False,
},
"store_sensitivities": {
- "choiceList": ["ram"],
+ "choiceList": ["ram", "disk"],
"group": "Compute",
"label": "Storage device",
"tooltip": "Only RAM storage available for now.",
diff --git a/simpeg_drivers/electromagnetics/time_domain/driver.py b/simpeg_drivers/electromagnetics/time_domain/driver.py
index bcc2fb5a..4e5ecb6b 100644
--- a/simpeg_drivers/electromagnetics/time_domain/driver.py
+++ b/simpeg_drivers/electromagnetics/time_domain/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -68,7 +61,7 @@ def get_tiles(self) -> list[np.ndarray]:
)
receivers_tx_ids = self.params.data_object.tx_id_property.values
tiles = []
- for t_id, group in enumerate(tx_tiles):
+ for _t_id, group in enumerate(tx_tiles):
sub_group = []
for value in group:
receiver_ind = receivers_tx_ids == unique_tile_ids[value]
diff --git a/simpeg_drivers/electromagnetics/time_domain/params.py b/simpeg_drivers/electromagnetics/time_domain/params.py
index a7f70092..0f2d9340 100644
--- a/simpeg_drivers/electromagnetics/time_domain/params.py
+++ b/simpeg_drivers/electromagnetics/time_domain/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,6 +48,8 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._y_channel = None
self._y_uncertainty = None
+ self._model_type = "Conductivity (S/m)"
+
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
def data_channel(self, component: str):
@@ -89,14 +84,23 @@ def property_group_data(self, property_group: UUID):
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]
+ next(k for k in property_names if f"{f:.2e}" in k)
) # Safer if data was saved with geoapps naming convention
data[f] = properties[f_ind]
- except IndexError:
+ except StopIteration:
data[f] = properties[i] # in case of other naming conventions
return data
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def unit_conversion(self):
"""Return time unit conversion factor."""
diff --git a/simpeg_drivers/joint/__init__.py b/simpeg_drivers/joint/__init__.py
index de3a54f7..4d06f672 100644
--- a/simpeg_drivers/joint/__init__.py
+++ b/simpeg_drivers/joint/__init__.py
@@ -1,16 +1,9 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/joint/constants.py b/simpeg_drivers/joint/constants.py
index c0c8dd69..d61346a6 100644
--- a/simpeg_drivers/joint/constants.py
+++ b/simpeg_drivers/joint/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,6 +14,7 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
default_ui_json = {
"title": "SimPEG Joint Surveys Inversion",
"inversion_type": "joint surveys",
diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py
index 07321067..355bc7c1 100644
--- a/simpeg_drivers/joint/driver.py
+++ b/simpeg_drivers/joint/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -31,12 +24,12 @@
create_octree_from_octrees,
treemesh_2_octree,
)
-from SimPEG.maps import TileMap
-from SimPEG.objective_function import ComboObjectiveFunction
+from simpeg import directives
+from simpeg.maps import TileMap
+from simpeg.objective_function import ComboObjectiveFunction
from simpeg_drivers import DRIVER_MAP
-from simpeg_drivers.components.factories import SaveIterationGeoh5Factory
-from simpeg_drivers.components.meshes import InversionMesh
+from simpeg_drivers.components.factories import SaveDataGeoh5Factory
from simpeg_drivers.driver import InversionDriver
from simpeg_drivers.joint.params import BaseJointParams
@@ -54,9 +47,13 @@ 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):
+ for label, driver in zip("abc", self.drivers, strict=False):
if driver.data_misfit is not None:
objective_functions += driver.data_misfit.objfcts
+
+ for fun in driver.data_misfit.objfcts:
+ fun.name = f"Group {label.upper()} {fun.name}"
+
multipliers += [
getattr(self.params, f"group_{label}_multiplier") ** 2.0
] * len(driver.data_misfit.objfcts)
@@ -124,7 +121,7 @@ def initialize(self):
global_actives |= local_actives
self.models.active_cells = global_actives
- for driver, wire in zip(self.drivers, self.wires):
+ for driver, wire in zip(self.drivers, self.wires, strict=True):
projection = TileMap(
self.inversion_mesh.mesh,
global_actives,
@@ -132,6 +129,7 @@ def initialize(self):
enforce_active=False,
components=3 if driver.inversion_data.vector else 1,
)
+ driver.params.active_model = None
driver.models.active_cells = projection.local_active
driver.data_misfit.model_map = projection * wire
@@ -151,18 +149,6 @@ 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."""
@@ -178,7 +164,7 @@ def validate_create_mesh(self):
[driver.inversion_mesh.entity for driver in self.drivers],
)
for driver in self.drivers:
- setattr(driver.inversion_mesh, "_mesh", None)
+ driver.inversion_mesh.mesh = None
def validate_create_models(self):
"""Construct models from the local drivers."""
@@ -205,12 +191,12 @@ def run(self):
self.models.starting, compute_J=False
)
- for sub, driver in zip(predicted, self.drivers):
- SaveIterationGeoh5Factory(driver.params).build(
+ for sub, driver in zip(predicted, self.drivers, strict=True):
+ SaveDataGeoh5Factory(driver.params).build(
inversion_object=driver.inversion_data,
sorting=np.argsort(np.hstack(driver.sorting)),
ordering=driver.ordering,
- ).save_components(0, sub)
+ ).write(0, sub)
else:
# Run the inversion
self.start_inversion_message()
@@ -219,3 +205,10 @@ def run(self):
self.logger.end()
sys.stdout = self.logger.terminal
self.logger.log.close()
+ self._update_log()
+
+ def _update_log(self):
+ """Update the log with the inversion results."""
+ for directive in self.directives.directive_list:
+ if isinstance(directive, directives.SaveLogFilesGeoH5):
+ directive.save_log()
diff --git a/simpeg_drivers/joint/joint_cross_gradient/__init__.py b/simpeg_drivers/joint/joint_cross_gradient/__init__.py
index b0dba7bb..e46957ca 100644
--- a/simpeg_drivers/joint/joint_cross_gradient/__init__.py
+++ b/simpeg_drivers/joint/joint_cross_gradient/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/joint/joint_cross_gradient/constants.py b/simpeg_drivers/joint/joint_cross_gradient/constants.py
index 68c94299..0991cbc7 100644
--- a/simpeg_drivers/joint/joint_cross_gradient/constants.py
+++ b/simpeg_drivers/joint/joint_cross_gradient/constants.py
@@ -1,71 +1,72 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers
from simpeg_drivers.constants import validations as base_validations
from simpeg_drivers.joint.constants import default_ui_json as joint_default_ui_json
+
inversion_defaults = {
+ "version": simpeg_drivers.__version__,
"title": "SimPEG Joint Cross Gradient Inversion",
- "inversion_type": "joint cross gradient",
+ "icon": "",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "joint cross gradient",
"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,
+ "cross_gradient_weight_a_b": 1.0,
"group_c": None,
"group_c_multiplier": 1.0,
- "cross_gradient_weight_c_a": 1e6,
- "cross_gradient_weight_c_b": 1e6,
+ "cross_gradient_weight_c_a": 1.0,
+ "cross_gradient_weight_c_b": 1.0,
"mesh": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"inversion_style": "voxel",
+ "alpha_s": None,
+ "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": 1.0,
+ "beta_tol": 0.5,
+ "prctile": 95,
"chi_factor": 1.0,
- "initial_beta_ratio": 10.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
"initial_beta": None,
- "coolingRate": 1,
"coolingFactor": 2.0,
- "max_global_iterations": 100,
+ "coolingRate": 1,
+ "max_global_iterations": 50,
"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,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": True,
"parallelized": True,
@@ -76,10 +77,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py
index 817b566c..05c3dc40 100644
--- a/simpeg_drivers/joint/joint_cross_gradient/driver.py
+++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -24,13 +17,13 @@
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 simpeg import directives, maps
+from simpeg.objective_function import ComboObjectiveFunction
+from simpeg.regularization import CrossGradient
from simpeg_drivers.components.factories import (
DirectivesFactory,
- SaveIterationGeoh5Factory,
+ SaveModelGeoh5Factory,
)
from simpeg_drivers.joint.driver import BaseJointDriver
@@ -71,11 +64,7 @@ def validate_create_models(self):
model += (projection * model_local_values) / (norm + 1e-8)
if model is not None:
- setattr(
- getattr(self.models, f"_{model_type}"),
- "model",
- model,
- )
+ getattr(self.models, f"_{model_type}").model = model
@property
def directives(self):
@@ -102,36 +91,59 @@ def directives(self):
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
+ driver.data_misfit.model_map,
+ *save_model.transforms,
+ ]
directives_list.append(save_model)
- if (
- getattr(driver_directives, "vector_inversion_directive")
- is not None
- ):
+ if driver_directives.vector_inversion_directive is not None:
directives_list.append(
- getattr(driver_directives, "vector_inversion_directive")
+ driver_directives.vector_inversion_directive
)
+ if driver_directives.save_property_group is not None:
+ directives_list.append(driver_directives.save_property_group)
+
+ save_sensitivities = driver_directives.save_sensitivities_directive
+ if save_sensitivities is not None:
+ save_sensitivities.transforms = [
+ driver.data_misfit.model_map,
+ *save_sensitivities.transforms,
+ ]
+ directives_list.append(save_sensitivities)
+
count += n_tiles
- for driver, wire in zip(self.drivers, self.wires):
- factory = SaveIterationGeoh5Factory(self.params)
+ for driver, wire in zip(self.drivers, self.wires, strict=True):
+ factory = SaveModelGeoh5Factory(driver.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
+ if (
+ getattr(driver.params, "model_type", None)
+ == "Resistivity (Ohm-m)"
+ ):
+ model_directive.label = "resistivity"
+
+ model_directive.transforms = [wire, *model_directive.transforms]
directives_list.append(model_directive)
+ if driver.directives.save_property_group is not None:
+ directives_list.append(
+ directives.SavePropertyGroup(
+ self.inversion_mesh.entity,
+ channels=["declination", "inclination"],
+ )
+ )
+
self._directives = DirectivesFactory(self)
+ directives_list.append(self._directives.save_iteration_log_files)
self._directives.directive_list = (
self._directives.inversion_directives + directives_list
)
@@ -170,20 +182,19 @@ def get_regularization(self):
driver.regularization = ComboObjectiveFunction(objfcts=reg_block)
for label, driver_pairs in zip(
- ["a_b", "c_a", "c_b"], combinations(self.drivers, 2)
+ ["a_b", "c_a", "c_b"], combinations(self.drivers, 2), strict=False
):
# 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],
- ]
+ wires = maps.Wires(
+ ("a", self._mapping[driver_pairs[0], mapping_a]),
+ ("b", self._mapping[driver_pairs[1], mapping_b]),
+ )
reg_list.append(
CrossGradient(
self.inversion_mesh.mesh,
wires,
- normalize=True,
active_cells=self.models.active_cells,
)
)
diff --git a/simpeg_drivers/joint/joint_cross_gradient/params.py b/simpeg_drivers/joint/joint_cross_gradient/params.py
index 3eceabb3..5403b2a9 100644
--- a/simpeg_drivers/joint/joint_cross_gradient/params.py
+++ b/simpeg_drivers/joint/joint_cross_gradient/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/joint/joint_surveys/__init__.py b/simpeg_drivers/joint/joint_surveys/__init__.py
index a7f0f453..101990b9 100644
--- a/simpeg_drivers/joint/joint_surveys/__init__.py
+++ b/simpeg_drivers/joint/joint_surveys/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/joint/joint_surveys/constants.py b/simpeg_drivers/joint/joint_surveys/constants.py
index 988aa976..7cb55b50 100644
--- a/simpeg_drivers/joint/joint_surveys/constants.py
+++ b/simpeg_drivers/joint/joint_surveys/constants.py
@@ -1,35 +1,35 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers
from simpeg_drivers.constants import validations as base_validations
from simpeg_drivers.joint.constants import default_ui_json as joint_default_ui_json
+
################# defaults ##################
inversion_defaults = {
+ "version": simpeg_drivers.__version__,
"title": "SimPEG Joint Surveys Inversion",
- "inversion_type": "joint surveys",
+ "icon": "",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "joint surveys",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"group_a": None,
"group_a_multiplier": 1.0,
"group_b": None,
@@ -37,21 +37,16 @@
"group_c": None,
"group_c_multiplier": 1.0,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"starting_model": None,
"reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -62,13 +57,20 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 1,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": True,
"parallelized": True,
@@ -79,16 +81,20 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "SimPEG Joint Surveys Inversion",
"inversion_type": "joint surveys",
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and Models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": "Cell",
"dataType": "Float",
@@ -132,7 +138,7 @@
"association": "Cell",
"main": True,
"dataType": "Float",
- "group": "Mesh and models",
+ "group": "Mesh and Models",
"isValue": False,
"parent": "mesh",
"label": "Reference",
diff --git a/simpeg_drivers/joint/joint_surveys/driver.py b/simpeg_drivers/joint/joint_surveys/driver.py
index 30801a2e..d2b6a816 100644
--- a/simpeg_drivers/joint/joint_surveys/driver.py
+++ b/simpeg_drivers/joint/joint_surveys/driver.py
@@ -1,33 +1,32 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 logging import getLogger
+
import numpy as np
from geoh5py.shared.utils import fetch_active_workspace
-from SimPEG import maps
+from simpeg import maps
+
+from simpeg_drivers.components.factories import DirectivesFactory, SaveModelGeoh5Factory
+from simpeg_drivers.joint.driver import BaseJointDriver
-from ...components.factories import DirectivesFactory
-from ...joint.driver import BaseJointDriver
from .constants import validations
from .params import JointSurveysParams
+logger = getLogger(__name__)
+
+
class JointSurveyDriver(BaseJointDriver):
_params_class = JointSurveysParams
_validations = validations
@@ -55,14 +54,26 @@ def validate_create_models(self):
norm = np.array(np.sum(projection, axis=1)).flatten()
model = (projection * model_local_values) / (norm + 1e-8)
- if self.drivers[0].models.is_sigma:
+ if self.drivers[0].models.is_sigma and model_type in [
+ "starting",
+ "reference",
+ "lower_bound",
+ "upper_bound",
+ "conductivity",
+ ]:
model = np.exp(model)
-
- setattr(
- getattr(self.models, f"_{model_type}"),
- "model",
- model,
- )
+ if (
+ getattr(self.params, "model_type", None)
+ == "Resistivity (Ohm-m)"
+ ):
+ logger.info(
+ "Converting input %s model to %s",
+ model_type,
+ getattr(self.params, "model_type", None),
+ )
+ model = 1.0 / model
+
+ getattr(self.models, f"_{model_type}").model = model
@property
def wires(self):
@@ -80,14 +91,22 @@ def directives(self):
directives_list = []
count = 0
for driver in self.drivers:
+ if getattr(driver.params, "model_type", None) is not None:
+ driver.params.model_type = self.params.model_type
+
driver_directives = DirectivesFactory(driver)
save_model = driver_directives.save_iteration_model_directive
save_model.transforms = [
- driver.data_misfit.model_map
- ] + save_model.transforms
+ driver.data_misfit.model_map,
+ *save_model.transforms,
+ ]
+
directives_list.append(save_model)
+ if driver_directives.save_property_group is not None:
+ directives_list.append(driver_directives.save_property_group)
+
n_tiles = len(driver.data_misfit.objfcts)
for name in [
"save_iteration_data_directive",
@@ -104,16 +123,23 @@ def directives(self):
count += n_tiles
+ model_factory = SaveModelGeoh5Factory(self.params)
+ model_factory.factory_type = self.drivers[0].params.inversion_type
+ global_model_save = model_factory.build(
+ inversion_object=self.inversion_mesh,
+ active_cells=self.models.active_cells,
+ name="Model",
+ )
+
self._directives = DirectivesFactory(self)
- global_model_save = self._directives.save_iteration_model_directive
- if self.models.is_sigma:
- global_model_save.transforms += [
- maps.ExpMap(self.inversion_mesh.mesh)
- ]
+ if self._directives.save_property_group is not None:
+ directives_list.append(self._directives.save_property_group)
- self._directives.directive_list = (
- self._directives.inversion_directives
- + [global_model_save]
- + directives_list
- )
+ directives_list.append(self._directives.save_iteration_log_files)
+
+ self._directives.directive_list = [
+ *self._directives.inversion_directives,
+ global_model_save,
+ *directives_list,
+ ]
return self._directives
diff --git a/simpeg_drivers/joint/joint_surveys/params.py b/simpeg_drivers/joint/joint_surveys/params.py
index 0b2fb09e..d24f141f 100644
--- a/simpeg_drivers/joint/joint_surveys/params.py
+++ b/simpeg_drivers/joint/joint_surveys/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -37,9 +30,19 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._inversion_defaults = deepcopy(inversion_defaults)
self._inversion_type = "joint surveys"
self._validations = validations
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def physical_property(self):
"""Physical property to invert."""
diff --git a/simpeg_drivers/joint/params.py b/simpeg_drivers/joint/params.py
index 84245415..1cb68812 100644
--- a/simpeg_drivers/joint/params.py
+++ b/simpeg_drivers/joint/params.py
@@ -1,24 +1,17 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 geoh5py.groups import SimPEGGroup
from simpeg_drivers.params import InversionBaseParams
diff --git a/simpeg_drivers/line_sweep/driver.py b/simpeg_drivers/line_sweep/driver.py
index c727f070..fa7197f6 100644
--- a/simpeg_drivers/line_sweep/driver.py
+++ b/simpeg_drivers/line_sweep/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -137,14 +130,14 @@ def collect_results(self):
log_lines = []
for line in np.unique(line_ids):
with Workspace(f"{path / files[line]}.ui.geoh5") as ws:
- out_group = [
+ out_group = next(
group for group in ws.groups if isinstance(group, SimPEGGroup)
- ][0]
- survey = [
+ )
+ survey = next(
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:
@@ -152,11 +145,11 @@ def collect_results(self):
line_indices = line_ids == line
data = self.collect_line_data(survey, line_indices, data)
- mesh = [
+ mesh = next(
child
for child in out_group.children
if isinstance(child, DrapeModel)
- ][0]
+ )
local_simpeg_group = mesh.parent.copy(
name=f"Line {line}",
@@ -170,11 +163,15 @@ def collect_results(self):
for fdat in filedata:
if ".out" in fdat.name:
out_lines += [f"Line {line} from file {files[line]}\n"]
- out_lines += fdat.values.decode(encoding="utf8").split(sep="\n")
+ out_lines += fdat.file_bytes.decode(encoding="utf8").split(
+ sep="\n"
+ )
out_lines += ["\n"]
if ".log" in fdat.name:
- log_lines += fdat.values.decode(encoding="utf8").split(sep="\n")
+ log_lines += fdat.file_bytes.decode(encoding="utf8").split(
+ sep="\n"
+ )
log_lines += ["\n"]
fdat.copy(parent=out_group)
diff --git a/simpeg_drivers/natural_sources/__init__.py b/simpeg_drivers/natural_sources/__init__.py
index 4967d775..4c01f5d1 100644
--- a/simpeg_drivers/natural_sources/__init__.py
+++ b/simpeg_drivers/natural_sources/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/natural_sources/magnetotellurics/__init__.py b/simpeg_drivers/natural_sources/magnetotellurics/__init__.py
index 08c2e08a..bb61690f 100644
--- a/simpeg_drivers/natural_sources/magnetotellurics/__init__.py
+++ b/simpeg_drivers/natural_sources/magnetotellurics/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/natural_sources/magnetotellurics/constants.py b/simpeg_drivers/natural_sources/magnetotellurics/constants.py
index 89be9031..a25caf4e 100644
--- a/simpeg_drivers/natural_sources/magnetotellurics/constants.py
+++ b/simpeg_drivers/natural_sources/magnetotellurics/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,17 +20,21 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
################# defaults ##################
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Magnetotellurics (MT) Inversion",
"icon": "surveymagnetotellurics",
- "inversion_type": "magnetotellurics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "magnetotellurics",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": False,
"receivers_radar_drape": None,
@@ -60,23 +57,18 @@
"zyy_imag_channel": None,
"zyy_imag_uncertainty": None,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"background_conductivity": 1e-3,
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
+ "alpha_s": 1.0,
"length_scale_x": 1.0,
"length_scale_y": 1.0,
"length_scale_z": 1.0,
@@ -86,15 +78,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
- "sens_wts_threshold": 0.001,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
+ "sens_wts_threshold": 1.0,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -104,21 +104,20 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__version__,
"title": "Magnetotellurics (MT) Forward",
"icon": "surveymagnetotellurics",
- "inversion_type": "magnetotellurics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "magnetotellurics",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": False,
"receivers_radar_drape": None,
@@ -133,8 +132,12 @@
"zyy_real_channel_bool": True,
"zyy_imag_channel_bool": True,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"background_conductivity": 1e-3,
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -143,10 +146,6 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
@@ -401,6 +400,14 @@
"dependencyType": "enabled",
"value": None,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
@@ -408,7 +415,7 @@
"main": True,
"isValue": False,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": None,
"value": 1e-3,
},
@@ -419,18 +426,16 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": None,
+ "optional": True,
+ "enabled": False,
"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)",
+ "label": "Background",
"property": None,
"value": 1e-3,
},
@@ -441,7 +446,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -454,7 +459,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
diff --git a/simpeg_drivers/natural_sources/magnetotellurics/driver.py b/simpeg_drivers/natural_sources/magnetotellurics/driver.py
index 09c00bdf..b293ad71 100644
--- a/simpeg_drivers/natural_sources/magnetotellurics/driver.py
+++ b/simpeg_drivers/natural_sources/magnetotellurics/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/natural_sources/magnetotellurics/params.py b/simpeg_drivers/natural_sources/magnetotellurics/params.py
index cff41f0b..ed2696c8 100644
--- a/simpeg_drivers/natural_sources/magnetotellurics/params.py
+++ b/simpeg_drivers/natural_sources/magnetotellurics/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -69,6 +62,7 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._zyy_imag_channel = None
self._zyy_imag_uncertainty = None
self._background_conductivity = None
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
@@ -86,11 +80,11 @@ def property_group_data(self, property_group: UUID):
if self.forward_only:
return {k: None for k in frequencies}
else:
- group = [
+ group = next(
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
]
@@ -98,10 +92,10 @@ def property_group_data(self, property_group: UUID):
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]
+ next(k for k in property_names if f"{f:.2e}" in k)
) # Safer if data was saved with geoapps naming convention
data[f] = properties[f_ind]
- except IndexError:
+ except StopIteration:
data[f] = properties[i] # in case of other naming conventions
return data
@@ -116,6 +110,15 @@ def uncertainty(self, component: str) -> float:
uid = self.uncertainty_channel(component)
return self.property_group_data(uid)
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def zxx_real_channel_bool(self):
return self._zxx_real_channel_bool
diff --git a/simpeg_drivers/natural_sources/tipper/__init__.py b/simpeg_drivers/natural_sources/tipper/__init__.py
index cb1a3310..2cb63156 100644
--- a/simpeg_drivers/natural_sources/tipper/__init__.py
+++ b/simpeg_drivers/natural_sources/tipper/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/natural_sources/tipper/constants.py b/simpeg_drivers/natural_sources/tipper/constants.py
index 6e886f26..1355c375 100644
--- a/simpeg_drivers/natural_sources/tipper/constants.py
+++ b/simpeg_drivers/natural_sources/tipper/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,15 +18,19 @@
import simpeg_drivers
from simpeg_drivers import default_ui_json as base_default_ui_json
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Tipper Inversion",
"icon": "surveyztem",
- "inversion_type": "tipper",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "tipper",
"forward_only": False,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": False,
"receivers_radar_drape": None,
@@ -48,23 +45,18 @@
"tyz_imag_channel": None,
"tyz_imag_uncertainty": None,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"background_conductivity": 1e-3,
"starting_model": 1e-3,
- "reference_model": 1e-3,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
+ "alpha_s": 1.0,
"length_scale_x": 1.0,
"length_scale_y": 1.0,
"length_scale_z": 1.0,
@@ -72,17 +64,25 @@
"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,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
- "gradient_type": "total",
- "sens_wts_threshold": 0.001,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 2,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
+ "sens_wts_threshold": 1.0,
"every_iteration_bool": True,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -92,21 +92,20 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__version__,
"title": "Tipper Forward",
"icon": "surveyztem",
- "inversion_type": "tipper",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "tipper",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": False,
"receivers_radar_drape": None,
@@ -117,8 +116,12 @@
"tyz_real_channel_bool": True,
"tyz_imag_channel_bool": True,
"mesh": None,
+ "model_type": "Conductivity (S/m)",
"background_conductivity": 1e-3,
"starting_model": 1e-3,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -127,16 +130,13 @@
"chunk_by_rows": True,
"out_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "Tipper Inversion",
"icon": "surveyztem",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"inversion_type": "tipper",
"data_object": {
"main": True,
@@ -265,6 +265,14 @@
"dependencyType": "enabled",
"value": None,
},
+ "model_type": {
+ "choiceList": ["Conductivity (S/m)", "Resistivity (Ohm-m)"],
+ "main": True,
+ "group": "Mesh and models",
+ "label": "Model units",
+ "tooltip": "Select the units of the model.",
+ "value": "Conductivity (S/m)",
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
@@ -272,7 +280,7 @@
"main": True,
"isValue": False,
"parent": "mesh",
- "label": "Initial conductivity (S/m)",
+ "label": "Initial",
"property": None,
"value": 1e-3,
},
@@ -283,18 +291,16 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Reference conductivity (S/m)",
+ "label": "Reference",
"property": None,
+ "optional": True,
+ "enabled": False,
"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)",
+ "label": "Background",
"property": None,
"value": 1e-3,
},
@@ -305,7 +311,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Lower bound (S/m)",
+ "label": "Lower bound",
"property": None,
"optional": True,
"value": 1e-8,
@@ -318,7 +324,7 @@
"group": "Mesh and models",
"isValue": True,
"parent": "mesh",
- "label": "Upper bound (S/m)",
+ "label": "Upper bound",
"property": None,
"optional": True,
"value": 100.0,
diff --git a/simpeg_drivers/natural_sources/tipper/driver.py b/simpeg_drivers/natural_sources/tipper/driver.py
index 20b9a055..ec86f368 100644
--- a/simpeg_drivers/natural_sources/tipper/driver.py
+++ b/simpeg_drivers/natural_sources/tipper/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/natural_sources/tipper/params.py b/simpeg_drivers/natural_sources/tipper/params.py
index defa2550..ceb71d53 100644
--- a/simpeg_drivers/natural_sources/tipper/params.py
+++ b/simpeg_drivers/natural_sources/tipper/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -57,6 +50,7 @@ def __init__(self, input_file=None, forward_only=False, **kwargs):
self._tyz_imag_channel = None
self._tyz_imag_uncertainty = None
self._background_conductivity = None
+ self._model_type = "Conductivity (S/m)"
super().__init__(input_file=input_file, forward_only=forward_only, **kwargs)
@@ -74,11 +68,11 @@ def property_group_data(self, property_group: UUID):
if self.forward_only:
return {k: None for k in frequencies}
else:
- group = [
+ group = next(
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
]
@@ -86,10 +80,10 @@ def property_group_data(self, property_group: UUID):
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]
+ next(k for k in property_names if f"{f:.2e}" in k)
) # Safer if data was saved with geoapps naming convention
data[f] = properties[f_ind]
- except IndexError:
+ except StopIteration:
data[f] = properties[i] # in case of other naming conventions
return data
@@ -104,6 +98,15 @@ def uncertainty(self, component: str) -> float:
uid = self.uncertainty_channel(component)
return self.property_group_data(uid)
+ @property
+ def model_type(self):
+ """Model units."""
+ return self._model_type
+
+ @model_type.setter
+ def model_type(self, val):
+ self.setter_validator("model_type", val)
+
@property
def txz_real_channel_bool(self):
return self._txz_real_channel_bool
diff --git a/simpeg_drivers/params.py b/simpeg_drivers/params.py
index 19b19385..12755cba 100644
--- a/simpeg_drivers/params.py
+++ b/simpeg_drivers/params.py
@@ -1,23 +1,17 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 warnings
from copy import deepcopy
from uuid import UUID
@@ -50,6 +44,8 @@ def __init__(
self._forward_only: bool = (
forward_only if input_file is None else input_file.data["forward_only"]
)
+ self._active_model: UUID = None
+ self._auto_scale_misfits: bool = False # Default to previous versions
self._topography_object: UUID = None
self._topography: UUID | float = None
self._data_object: UUID = None
@@ -72,10 +68,10 @@ def __init__(
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._coolEps_q: bool = True
+ self._coolEpsFact: float = 1.2
+ self._beta_search: bool = False
+ self._starting_chi_factor: float = 1.0
self._max_irls_iterations: int = None
self._max_global_iterations: int = None
self._max_line_search_iterations: int = None
@@ -99,11 +95,13 @@ def __init__(
self._n_cpu: int = None
self._max_ram: float = None
self._store_sensitivities: str = None
+ self._save_sensitivities: bool = False
self._out_group = None
self._ga_group = None
self._no_data_value: float = None
self._distributed_workers = None
self._documentation: str = ""
+ self._generate_sweep: bool = False
self._icon: str = ""
self._defaults = (
self._forward_defaults if self.forward_only else self._inversion_defaults
@@ -167,7 +165,7 @@ def uncertainty(self, component: str) -> np.ndarray | None:
return val.values.astype(float)
elif self.data(component) is not None:
d = self.data(component)
- if isinstance(val, (int, float)):
+ if isinstance(val, int | float):
return np.array([float(val)] * len(d))
else:
return d * 0.0 + 1.0 # Default
@@ -199,10 +197,10 @@ def offset(self) -> tuple[list[float], UUID]:
0,
0 if self.receivers_offset_z is None else self.receivers_offset_z,
]
- is_offset = any([(k != 0) for k in offsets])
+ 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)):
+ 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
@@ -245,6 +243,22 @@ def inversion_defaults(self):
)
return self._inversion_defaults
+ @property
+ def active_model(self):
+ return self._active_model
+
+ @active_model.setter
+ def active_model(self, val):
+ self.setter_validator("active_model", val, fun=self._uuid_promoter)
+
+ @property
+ def auto_scale_misfits(self):
+ return self._auto_scale_misfits
+
+ @auto_scale_misfits.setter
+ def auto_scale_misfits(self, val):
+ self.setter_validator("auto_scale_misfits", val)
+
@property
def topography_object(self):
return self._topography_object
@@ -300,6 +314,10 @@ def receivers_radar_drape(self):
@receivers_radar_drape.setter
def receivers_radar_drape(self, val):
self.setter_validator("receivers_radar_drape", val, fun=self._uuid_promoter)
+ warnings.warn(
+ "The use of 'receivers_radar_drape' will be deprecated in future release.",
+ DeprecationWarning,
+ )
@property
def receivers_offset_z(self):
@@ -308,6 +326,18 @@ def receivers_offset_z(self):
@receivers_offset_z.setter
def receivers_offset_z(self, val):
self.setter_validator("receivers_offset_z", val)
+ warnings.warn(
+ "The use of 'receiver_offset_z' will be deprecated in future release.",
+ DeprecationWarning,
+ )
+
+ @property
+ def generate_sweep(self):
+ return self._generate_sweep
+
+ @generate_sweep.setter
+ def generate_sweep(self, val):
+ self.setter_validator("generate_sweep", val)
@property
def gps_receivers_offset(self):
@@ -445,6 +475,10 @@ def coolEps_q(self):
@coolEps_q.setter
def coolEps_q(self, val):
self.setter_validator("coolEps_q", val)
+ warnings.warn(
+ "The use of 'coolEps_q' will be deprecated in future release.",
+ DeprecationWarning,
+ )
@property
def coolEpsFact(self):
@@ -453,6 +487,10 @@ def coolEpsFact(self):
@coolEpsFact.setter
def coolEpsFact(self, val):
self.setter_validator("coolEpsFact", val)
+ warnings.warn(
+ "The use of 'coolEpsFact' will be deprecated in future release.",
+ DeprecationWarning,
+ )
@property
def beta_search(self):
@@ -461,6 +499,10 @@ def beta_search(self):
@beta_search.setter
def beta_search(self, val):
self.setter_validator("beta_search", val)
+ warnings.warn(
+ "The use of 'beta_search' will be deprecated in future release.",
+ DeprecationWarning,
+ )
@property
def starting_chi_factor(self):
@@ -659,6 +701,14 @@ def store_sensitivities(self):
def store_sensitivities(self, val):
self.setter_validator("store_sensitivities", val)
+ @property
+ def save_sensitivities(self):
+ return self._save_sensitivities
+
+ @save_sensitivities.setter
+ def save_sensitivities(self, val):
+ self.setter_validator("save_sensitivities", val)
+
@property
def out_group(self) -> SimPEGGroup | None:
"""Return the SimPEGGroup object."""
diff --git a/simpeg_drivers/potential_fields/__init__.py b/simpeg_drivers/potential_fields/__init__.py
index b5634440..67b0a1b8 100644
--- a/simpeg_drivers/potential_fields/__init__.py
+++ b/simpeg_drivers/potential_fields/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/potential_fields/gravity/__init__.py b/simpeg_drivers/potential_fields/gravity/__init__.py
index db8049a0..856c8b15 100644
--- a/simpeg_drivers/potential_fields/gravity/__init__.py
+++ b/simpeg_drivers/potential_fields/gravity/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/potential_fields/gravity/constants.py b/simpeg_drivers/potential_fields/gravity/constants.py
index 5d4136d6..98287ae9 100644
--- a/simpeg_drivers/potential_fields/gravity/constants.py
+++ b/simpeg_drivers/potential_fields/gravity/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -28,21 +21,20 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Gravity Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
"icon": "surveyairbornegravity",
- "inversion_type": "gravity",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "gravity",
"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,
@@ -65,20 +57,14 @@
"gyz_uncertainty": 1.0,
"mesh": None,
"starting_model": 1e-3,
- "reference_model": 0.0,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -89,15 +75,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 1,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": False,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -108,22 +102,20 @@
"out_group": None,
"ga_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__version__,
"title": "Gravity Forward",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
"icon": "surveyairbornegravity",
- "inversion_type": "gravity",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "gravity",
"forward_only": True,
- "topography_object": None,
- "topography": None,
"data_object": None,
"z_from_topo": False,
"receivers_radar_drape": None,
@@ -141,6 +133,9 @@
"gyz_channel_bool": False,
"mesh": None,
"starting_model": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": None,
"output_tile_files": False,
"parallelized": True,
"n_cpu": None,
@@ -150,16 +145,12 @@
"out_group": None,
"ga_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "Gravity Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
+ "documentation": "https://mirageoscience-geoapps.readthedocs-hosted.com/en/stable/content/applications/grav_mag_inversion.html",
"icon": "surveyairbornegravity",
"inversion_type": "gravity",
"data_object": {
@@ -477,6 +468,17 @@
"property": None,
"value": 1.0,
},
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": False,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": True,
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
diff --git a/simpeg_drivers/potential_fields/gravity/driver.py b/simpeg_drivers/potential_fields/gravity/driver.py
index f93e383f..6235d1a1 100644
--- a/simpeg_drivers/potential_fields/gravity/driver.py
+++ b/simpeg_drivers/potential_fields/gravity/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/potential_fields/gravity/params.py b/simpeg_drivers/potential_fields/gravity/params.py
index 5961bdb3..eaba1f75 100644
--- a/simpeg_drivers/potential_fields/gravity/params.py
+++ b/simpeg_drivers/potential_fields/gravity/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/potential_fields/magnetic_scalar/__init__.py b/simpeg_drivers/potential_fields/magnetic_scalar/__init__.py
index 38b9db7a..f36feceb 100644
--- a/simpeg_drivers/potential_fields/magnetic_scalar/__init__.py
+++ b/simpeg_drivers/potential_fields/magnetic_scalar/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/potential_fields/magnetic_scalar/constants.py b/simpeg_drivers/potential_fields/magnetic_scalar/constants.py
index 233ac288..8ee7e8e9 100644
--- a/simpeg_drivers/potential_fields/magnetic_scalar/constants.py
+++ b/simpeg_drivers/potential_fields/magnetic_scalar/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -28,24 +21,23 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__version__,
"title": "Magnetic Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
"icon": "surveyairbornemagnetics",
- "inversion_type": "magnetic scalar",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "magnetic scalar",
"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,
@@ -68,20 +60,14 @@
"bzz_uncertainty": 1.0,
"mesh": None,
"starting_model": 1e-4,
- "reference_model": 0.0,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -92,15 +78,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 1,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": False,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -111,30 +105,27 @@
"out_group": None,
"ga_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__version__,
"title": "Magnetic Forward",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
- "icon": "surveyairbornegravity",
- "inversion_type": "magnetic scalar",
+ "icon": "surveyairbornemagnetics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "magnetic scalar",
"forward_only": True,
"inducing_field_strength": 50000.0,
"inducing_field_inclination": 90.0,
"inducing_field_declination": 0.0,
"topography_object": None,
"topography": None,
+ "active_model": 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,
@@ -156,16 +147,12 @@
"out_group": None,
"ga_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "Magnetic Susceptibility Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
+ "documentation": "https://mirageoscience-geoapps.readthedocs-hosted.com/en/stable/content/applications/grav_mag_inversion.html",
"icon": "surveyairbornegravity",
"inversion_type": "magnetic scalar",
"inducing_field_strength": {
@@ -513,6 +500,17 @@
"property": None,
"value": 1.0,
},
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": False,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": True,
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
diff --git a/simpeg_drivers/potential_fields/magnetic_scalar/driver.py b/simpeg_drivers/potential_fields/magnetic_scalar/driver.py
index 797221d1..a96f63b1 100644
--- a/simpeg_drivers/potential_fields/magnetic_scalar/driver.py
+++ b/simpeg_drivers/potential_fields/magnetic_scalar/driver.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/potential_fields/magnetic_scalar/params.py b/simpeg_drivers/potential_fields/magnetic_scalar/params.py
index fb02047a..3a637c68 100644
--- a/simpeg_drivers/potential_fields/magnetic_scalar/params.py
+++ b/simpeg_drivers/potential_fields/magnetic_scalar/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/potential_fields/magnetic_vector/__init__.py b/simpeg_drivers/potential_fields/magnetic_vector/__init__.py
index b9c0d289..f94f5e6f 100644
--- a/simpeg_drivers/potential_fields/magnetic_vector/__init__.py
+++ b/simpeg_drivers/potential_fields/magnetic_vector/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
diff --git a/simpeg_drivers/potential_fields/magnetic_vector/constants.py b/simpeg_drivers/potential_fields/magnetic_vector/constants.py
index bfa3d3b5..522d9998 100644
--- a/simpeg_drivers/potential_fields/magnetic_vector/constants.py
+++ b/simpeg_drivers/potential_fields/magnetic_vector/constants.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -28,24 +21,23 @@
from simpeg_drivers import default_ui_json as base_default_ui_json
from simpeg_drivers.constants import validations as base_validations
+
inversion_defaults = {
"version": simpeg_drivers.__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",
+ "icon": "surveyairbornemagnetics",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "magnetic vector",
"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,
@@ -68,24 +60,18 @@
"bzz_uncertainty": 1.0,
"mesh": None,
"starting_model": 1e-4,
- "reference_model": 0.0,
+ "reference_model": None,
"lower_bound": None,
"upper_bound": None,
"starting_inclination": None,
"starting_declination": None,
"reference_inclination": None,
"reference_declination": None,
+ "topography_object": None,
+ "topography": None,
+ "active_model": 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,
@@ -96,15 +82,23 @@
"z_norm": 2.0,
"gradient_type": "total",
"max_irls_iterations": 25,
- "starting_chi_factor": None,
- "f_min_change": 1e-4,
+ "starting_chi_factor": 1.0,
"beta_tol": 0.5,
"prctile": 95,
- "coolEps_q": True,
- "coolEpsFact": 1.2,
- "beta_search": False,
+ "chi_factor": 1.0,
+ "auto_scale_misfits": True,
+ "initial_beta_ratio": 1e2,
+ "initial_beta": None,
+ "coolingFactor": 2.0,
+ "coolingRate": 1,
+ "max_global_iterations": 50,
+ "max_line_search_iterations": 20,
+ "max_cg_iterations": 30,
+ "tol_cg": 1e-4,
+ "f_min_change": 0.01,
"sens_wts_threshold": 0.001,
"every_iteration_bool": False,
+ "save_sensitivities": False,
"parallelized": True,
"n_cpu": None,
"tile_spatial": 1,
@@ -115,30 +109,27 @@
"out_group": None,
"ga_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
forward_defaults = {
"version": simpeg_drivers.__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",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
+ "conda_environment": "simpeg_drivers",
+ "run_command": "simpeg_drivers.driver",
"geoh5": None, # Must remain at top of list for notebook app initialization
+ "monitoring_directory": None,
+ "workspace_geoh5": None,
+ "inversion_type": "magnetic vector",
"forward_only": True,
"inducing_field_strength": 50000.0,
"inducing_field_inclination": 90.0,
"inducing_field_declination": 0.0,
"topography_object": None,
"topography": None,
+ "active_model": 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,
@@ -162,16 +153,12 @@
"out_group": None,
"ga_group": None,
"generate_sweep": False,
- "monitoring_directory": None,
- "workspace_geoh5": None,
- "run_command": "simpeg_drivers.driver",
- "conda_environment": "simpeg_drivers",
"distributed_workers": None,
}
default_ui_json = {
"title": "Magnetic Vector (MVI) Inversion",
- "documentation": "https://geoapps.readthedocs.io/en/stable/content/applications/grav_mag_inversion.html",
+ "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/stable/intro.html",
"icon": "surveyairbornegravity",
"inversion_type": "magnetic vector",
"inducing_field_strength": {
@@ -519,6 +506,17 @@
"property": None,
"value": 1.0,
},
+ "coolingRate": {
+ "group": "Optimization",
+ "label": "Iterations per beta",
+ "value": 1,
+ "min": 1,
+ "LineEdit": False,
+ "max": 10,
+ "precision": 1,
+ "verbose": 2,
+ "enabled": True,
+ },
"starting_model": {
"association": ["Cell", "Vertex"],
"dataType": "Float",
diff --git a/simpeg_drivers/potential_fields/magnetic_vector/driver.py b/simpeg_drivers/potential_fields/magnetic_vector/driver.py
index 51605df3..a240bfc4 100644
--- a/simpeg_drivers/potential_fields/magnetic_vector/driver.py
+++ b/simpeg_drivers/potential_fields/magnetic_vector/driver.py
@@ -1,24 +1,17 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg import maps
from simpeg_drivers.driver import InversionDriver
diff --git a/simpeg_drivers/potential_fields/magnetic_vector/params.py b/simpeg_drivers/potential_fields/magnetic_vector/params.py
index 8462759b..3a58e427 100644
--- a/simpeg_drivers/potential_fields/magnetic_vector/params.py
+++ b/simpeg_drivers/potential_fields/magnetic_vector/params.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/utils/__init__.py b/simpeg_drivers/utils/__init__.py
index de3a54f7..4d06f672 100644
--- a/simpeg_drivers/utils/__init__.py
+++ b/simpeg_drivers/utils/__init__.py
@@ -1,16 +1,9 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/simpeg_drivers/utils/surveys.py b/simpeg_drivers/utils/surveys.py
index de0fb405..3a16b9d9 100644
--- a/simpeg_drivers/utils/surveys.py
+++ b/simpeg_drivers/utils/surveys.py
@@ -1,31 +1,23 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 collections.abc import Callable
+from __future__ import annotations
import numpy as np
from discretize import TreeMesh
-from geoapps_utils.numerical import traveling_salesman
+from geoapps_utils.utils.numerical import traveling_salesman
from geoh5py import Workspace
from geoh5py.objects import PotentialElectrode
from scipy.spatial import cKDTree
-from SimPEG.survey import BaseSurvey
+from simpeg.survey import BaseSurvey
def counter_clockwise_sort(segments: np.ndarray, vertices: np.ndarray) -> np.ndarray:
@@ -37,10 +29,12 @@ def counter_clockwise_sort(segments: np.ndarray, vertices: np.ndarray) -> np.nda
:return: Sorted segments.
"""
+ center = np.mean(vertices, axis=0)
+ center_to_vertices = vertices[segments[:, 0], :2] - center[:2]
deltas = vertices[segments[:, 1], :2] - vertices[segments[:, 0], :2]
- cross = np.cross(deltas[:-1], deltas[1:])
+ cross = np.cross(center_to_vertices, deltas)
- if np.sign(np.mean(cross[cross != 0])) < 0:
+ if np.mean(np.sign(cross[cross != 0])) < 0:
segments = segments[::-1, ::-1]
return segments
@@ -178,33 +172,3 @@ def new_neighbors(distances: np.ndarray, neighbors: np.ndarray, nodes: list[int]
for i in neighbors
]
return np.where(ind)[0].tolist()
-
-
-def slice_and_map(obj: np.ndarray, slicer: np.ndarray | Callable):
- """
- Slice an array and return both sliced array and global to local map.
-
- :param object: Array to be sliced.
- :param slicer: Boolean index array, Integer index array, or callable
- that provides a condition to keep or remove each row of object.
- :return: Sliced array.
- :return: Dictionary map from global to local indices.
- """
-
- if isinstance(slicer, np.ndarray):
- if slicer.dtype == bool:
- sliced_object = obj[slicer]
- g2l = dict(zip(np.where(slicer)[0], np.arange(len(obj))))
- else:
- sliced_object = obj[slicer]
- g2l = dict(zip(slicer, np.arange(len(slicer))))
-
- 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))))
-
- else:
- raise TypeError("Slicer must be a boolean array or callable.")
-
- return sliced_object, g2l
diff --git a/simpeg_drivers/utils/testing.py b/simpeg_drivers/utils/testing.py
index 9f19594e..66c766c1 100644
--- a/simpeg_drivers/utils/testing.py
+++ b/simpeg_drivers/utils/testing.py
@@ -1,19 +1,13 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers is distributed under the terms and conditions of the MIT License '
+# (see LICENSE file at the root of this source code package). '
+# '
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
import warnings
from pathlib import Path
@@ -40,7 +34,7 @@
from octree_creation_app.driver import OctreeDriver
from octree_creation_app.utils import treemesh_2_octree
from scipy.spatial import Delaunay
-from SimPEG import utils
+from simpeg import utils
from simpeg_drivers.utils.utils import active_from_xyz, get_drape_model
@@ -195,7 +189,10 @@ def setup_inversion_workspace(
geoh5=None,
):
if geoh5 is None:
- geoh5 = Workspace.create(Path(work_dir) / "inversion_test.ui.geoh5")
+ if (Path(work_dir) / "inversion_test.ui.geoh5").is_file():
+ geoh5 = Workspace(Path(work_dir) / "inversion_test.ui.geoh5")
+ else:
+ geoh5 = Workspace.create(Path(work_dir) / "inversion_test.ui.geoh5")
# Topography
xx, yy = np.meshgrid(np.linspace(-200.0, 200.0, 50), np.linspace(-200.0, 200.0, 50))
@@ -281,7 +278,7 @@ def topo_drape(x, y):
axis=1,
)
# survey.cells = survey.cells[dist < 100.0, :]
- survey.remove_cells(np.where(dist > 100)[0])
+ survey.remove_cells(np.where(dist > 200)[0])
elif inversion_type == "fem":
survey = AirborneFEMReceivers.create(
@@ -315,10 +312,8 @@ def topo_drape(x, y):
"Tx frequency": {
"values": freqs,
"association": "VERTEX",
- "entity_type": {
- "primitive_type": "REFERENCED",
- "value_map": {k: str(k) for k in freqs},
- },
+ "primitive_type": "REFERENCED",
+ "value_map": {k: str(k) for k in freqs},
}
}
)
diff --git a/simpeg_drivers/utils/utils.py b/simpeg_drivers/utils/utils.py
index 1a3dac72..83e97c30 100644
--- a/simpeg_drivers/utils/utils.py
+++ b/simpeg_drivers/utils/utils.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,22 +18,24 @@
import numpy as np
from discretize import TensorMesh, TreeMesh
from discretize.utils import mesh_utils
-from geoapps_utils.conversions import string_to_numeric
-from geoapps_utils.numerical import running_mean, traveling_salesman
+from geoapps_utils.utils.conversions import string_to_numeric
+from geoapps_utils.utils.numerical import running_mean, traveling_salesman
from geoh5py import Workspace
from geoh5py.groups import Group
from geoh5py.objects import DrapeModel, Octree
+from geoh5py.objects.surveys.direct_current import PotentialElectrode
from geoh5py.objects.surveys.electromagnetics.base import LargeLoopGroundEMSurvey
from geoh5py.shared import INTEGER_NDV
from octree_creation_app.utils import octree_2_treemesh
from scipy.interpolate import LinearNDInterpolator, NearestNDInterpolator, interp1d
from scipy.spatial import ConvexHull, Delaunay, 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
+
if TYPE_CHECKING:
from simpeg_drivers.components.data import InversionData
@@ -90,8 +85,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)
@@ -105,7 +99,7 @@ def calculate_2D_trend(
values = values[hull.vertices]
elif 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
@@ -114,7 +108,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=True):
polynomial.append(
(loc_xy[:, 0] - center_x) ** float(x)
* (loc_xy[:, 1] - center_y) ** float(y - x)
@@ -129,7 +123,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=True)):
data_trend += (
params[count]
* (points[:, 0] - center_x) ** float(x)
@@ -176,12 +170,12 @@ def create_nested_mesh(
base_cell = np.min([base_mesh.h[0][0], base_mesh.h[1][0]])
tx_loops = []
for source in survey.source_list:
- if isinstance(source, (TEMLineCurrent, FEMLineCurrent)):
+ if isinstance(source, TEMLineCurrent | FEMLineCurrent):
mesh_indices = get_intersecting_cells(source.location, base_mesh)
tx_loops.append(base_mesh.cell_centers[mesh_indices, :])
if tx_loops:
- locations = np.vstack([locations] + tx_loops)
+ locations = np.vstack([locations, *tx_loops])
tree = cKDTree(locations[:, :2])
rad, _ = tree.query(base_mesh.gridCC[:, :2])
@@ -260,10 +254,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
@@ -321,7 +313,7 @@ def floating_active(mesh: TensorMesh | TreeMesh, active: np.ndarray):
:param mesh: Tree mesh object
:param active: active cells array
"""
- if not isinstance(mesh, (TreeMesh, TensorMesh)):
+ if not isinstance(mesh, TreeMesh | TensorMesh):
raise TypeError("Input mesh must be of type TreeMesh or TensorMesh.")
if mesh.dim == 2:
@@ -456,12 +448,10 @@ def get_inversion_output(h5file: str | Workspace, inversion_group: str | UUID):
) from exc
outfile = group.get_entity("SimPEG.out")[0]
- out = [
- elem for elem in outfile.values.decode("utf-8").replace("\r", "").split("\n")
- ][:-1]
+ out = list(outfile.file_bytes.decode("utf-8").replace("\r", "").split("\n"))[:-1]
cols = out.pop(0).split(" ")
out = [[string_to_numeric(k) for k in elem.split(" ")] for elem in out]
- out = dict(zip(cols, list(map(list, zip(*out)))))
+ out = dict(zip(cols, list(map(list, zip(*out, strict=True))), strict=True))
return out
@@ -548,14 +538,13 @@ def tile_locations(
# Test each refinement level for maximum space coverage
nTx = 1
nTy = 1
- for ii in range(int(n_tiles + 1)):
+ for _ in range(int(n_tiles + 1)):
nTx += 1
nTy += 1
testx = np.percentile(locations[:, 0], np.arange(0, 100, 100 / nTx))
testy = np.percentile(locations[:, 1], np.arange(0, 100, 100 / nTy))
- # if ii > 0:
dx = testx[:-1] - testx[1:]
dy = testy[:-1] - testy[1:]
@@ -639,8 +628,15 @@ def get_containing_cells(
:param data: Inversion data object
"""
if isinstance(mesh, TreeMesh):
+ if isinstance(data.entity, PotentialElectrode):
+ potentials = data.entity.vertices
+ currents = data.entity.current_electrodes.vertices
+ locations = np.unique(np.r_[potentials, currents], axis=0)
+ else:
+ locations = data.locations
+
inds = mesh._get_containing_cell_indexes( # pylint: disable=protected-access
- data.locations
+ locations
)
if isinstance(data.entity, LargeLoopGroundEMSurvey):
@@ -785,7 +781,7 @@ def get_neighbouring_cells(mesh: TreeMesh, indices: list | np.ndarray) -> tuple:
axis[1] = (south, north)
axis[2] = (down, up)
"""
- if not isinstance(indices, (list, np.ndarray)):
+ if not isinstance(indices, list | np.ndarray):
raise TypeError("Input 'indices' must be a list or numpy.ndarray of indices.")
if not isinstance(mesh, TreeMesh):
diff --git a/simpeg_drivers/utils/write_default_uijson.py b/simpeg_drivers/utils/write_default_uijson.py
new file mode 100644
index 00000000..c3e1c916
--- /dev/null
+++ b/simpeg_drivers/utils/write_default_uijson.py
@@ -0,0 +1,189 @@
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers.electricals.direct_current.pseudo_three_dimensions.params import (
+ DirectCurrentPseudo3DParams,
+)
+from simpeg_drivers.electricals.direct_current.three_dimensions import (
+ DirectCurrent3DParams,
+)
+from simpeg_drivers.electricals.direct_current.two_dimensions import (
+ DirectCurrent2DParams,
+)
+from simpeg_drivers.electricals.induced_polarization.pseudo_three_dimensions.params import (
+ InducedPolarizationPseudo3DParams,
+)
+from simpeg_drivers.electricals.induced_polarization.three_dimensions import (
+ InducedPolarization3DParams,
+)
+from simpeg_drivers.electricals.induced_polarization.two_dimensions import (
+ InducedPolarization2DParams,
+)
+from simpeg_drivers.electromagnetics.frequency_domain import (
+ FrequencyDomainElectromagneticsParams,
+)
+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,
+)
+
+
+active_data_channels = [
+ "z_real_channel",
+ "z_imag_channel",
+ "zxx_real_channel",
+ "zxx_imag_channel",
+ "zxy_real_channel",
+ "zxy_imag_channel",
+ "zyx_real_channel",
+ "zyx_imag_channel",
+ "zyy_real_channel",
+ "zyy_imag_channel",
+ "txz_real_channel",
+ "txz_imag_channel",
+ "tyz_real_channel",
+ "tyz_imag_channel",
+ "gz_channel",
+ "tmi_channel",
+ "z_channel",
+]
+
+
+def write_default_uijson(path: str | Path):
+ filedict = {
+ "gravity_inversion.ui.json": GravityParams(validate=False),
+ "gravity_forward.ui.json": GravityParams(forward_only=True, validate=False),
+ "magnetic_scalar_inversion.ui.json": MagneticScalarParams(validate=False),
+ "magnetic_scalar_forward.ui.json": MagneticScalarParams(
+ forward_only=True, validate=False
+ ),
+ "magnetic_vector_inversion.ui.json": MagneticVectorParams(validate=False),
+ "magnetic_vector_forward.ui.json": MagneticVectorParams(
+ forward_only=True, validate=False
+ ),
+ "direct_current_inversion_2d.ui.json": DirectCurrent2DParams(validate=False),
+ "direct_current_forward_2d.ui.json": DirectCurrent2DParams(
+ forward_only=True, validate=False
+ ),
+ "direct_current_inversion_3d.ui.json": DirectCurrent3DParams(validate=False),
+ "direct_current_forward_3d.ui.json": DirectCurrent3DParams(
+ forward_only=True, validate=False
+ ),
+ "direct_current_inversion_pseudo3d.ui.json": DirectCurrentPseudo3DParams(
+ validate=False
+ ),
+ "direct_current_forward_pseudo3d.ui.json": DirectCurrentPseudo3DParams(
+ forward_only=True, validate=False
+ ),
+ "induced_polarization_inversion_2d.ui.json": InducedPolarization2DParams(
+ validate=False
+ ),
+ "induced_polarization_forward_2d.ui.json": InducedPolarization2DParams(
+ forward_only=True, validate=False
+ ),
+ "induced_polarization_inversion_3d.ui.json": InducedPolarization3DParams(
+ validate=False
+ ),
+ "induced_polarization_forward_3d.ui.json": InducedPolarization3DParams(
+ forward_only=True, validate=False
+ ),
+ "induced_polarization_inversion_pseudo3d.ui.json": InducedPolarizationPseudo3DParams(
+ validate=False
+ ),
+ "induced_polarization_forward_pseudo3d.ui.json": InducedPolarizationPseudo3DParams(
+ forward_only=True, validate=False
+ ),
+ "fem_inversion.ui.json": FrequencyDomainElectromagneticsParams(
+ forward_only=False, validate=False
+ ),
+ "fem_forward.ui.json": FrequencyDomainElectromagneticsParams(
+ forward_only=True, validate=False
+ ),
+ "tdem_inversion.ui.json": TimeDomainElectromagneticsParams(
+ forward_only=False, validate=False
+ ),
+ "tdem_forward.ui.json": TimeDomainElectromagneticsParams(
+ forward_only=True, validate=False
+ ),
+ "magnetotellurics_inversion.ui.json": MagnetotelluricsParams(
+ forward_only=False, validate=False
+ ),
+ "magnetotellurics_forward.ui.json": MagnetotelluricsParams(
+ forward_only=True, validate=False
+ ),
+ "tipper_inversion.ui.json": TipperParams(forward_only=False, validate=False),
+ "tipper_forward.ui.json": TipperParams(forward_only=True, validate=False),
+ "joint_surveys_inversion.ui.json": JointSurveysParams(
+ forward_only=False, validate=False
+ ),
+ "joint_cross_gradient_inversion.ui.json": JointCrossGradientParams(
+ forward_only=False, validate=False
+ ),
+ }
+
+ for filename, params in filedict.items():
+ validation_options = {
+ "update_enabled": (True if params.geoh5 is not None else False)
+ }
+ params.input_file.validation_options = validation_options
+ if hasattr(params, "forward_only"):
+ if params.forward_only:
+ for form in params.input_file.ui_json.values():
+ if isinstance(form, dict):
+ group = form.get("group", None)
+ if group == "Data":
+ form["group"] = "Survey"
+ for param in [
+ "starting_model",
+ "starting_inclination",
+ "starting_declination",
+ ]:
+ if param in params.input_file.ui_json:
+ form = params.input_file.ui_json[param]
+
+ # Exception for forward sigma models
+ if "model_type" in params.input_file.ui_json:
+ form["label"] = "Value(s)"
+ else:
+ form["label"] = (
+ form["label"].replace("Initial ", "").capitalize()
+ )
+ elif params.data_object is None:
+ for channel in active_data_channels:
+ form = params.input_file.ui_json.get(channel, None)
+ if form:
+ form["enabled"] = True
+
+ ifile = params.input_file
+ ifile.validate = False
+ ifile.ui_json["topography_object"]["enabled"] = True
+ ifile.write_ui_json(name=filename, path=path)
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description="Write defaulted ui.json files.")
+ parser.add_argument(
+ "path",
+ type=Path,
+ help="Path to folder where default ui.json files will be written.",
+ )
+ args = parser.parse_args()
+ write_default_uijson(args.path)
diff --git a/tests/__init__.py b/tests/__init__.py
index de3a54f7..4d06f672 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -1,16 +1,9 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/assets_path_test.py b/tests/assets_path_test.py
index 95c06ba5..c0510ad1 100644
--- a/tests/assets_path_test.py
+++ b/tests/assets_path_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers is distributed under the terms and conditions of the MIT License '
+# (see LICENSE file at the root of this source code package). '
+# '
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
from simpeg_drivers import assets_path
@@ -24,4 +17,4 @@ def test_assets_directory_exist():
def test_uijson_files_exists():
assert (assets_path() / "uijson").is_dir()
- assert list((assets_path() / "uijson").iterdir())[0].is_file()
+ assert next(iter((assets_path() / "uijson").iterdir())).is_file()
diff --git a/tests/conftest.py b/tests/conftest.py
index 553bd7dc..5317a66f 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
index 8c1849e4..991285a6 100644
--- a/tests/constants_test.py
+++ b/tests/constants_test.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 simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -23,6 +24,7 @@
constants as magnetic_vector_constants,
)
+
constants = [
gravity_constants,
magnetic_scalar_constants,
diff --git a/tests/data_test.py b/tests/data_test.py
index af1a67e4..b548390f 100644
--- a/tests/data_test.py
+++ b/tests/data_test.py
@@ -1,26 +1,20 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
+import pytest
+import simpeg
from discretize.utils import mesh_builder_xyz
from geoh5py.objects import Points
from geoh5py.workspace import Workspace
@@ -126,28 +120,34 @@ def test_survey_data(tmp_path: Path):
)
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,
- )
+ with pytest.warns(
+ DeprecationWarning,
+ match="The use of 'receiver_offset_z' will be deprecated in future release.",
+ ):
+ 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)
+ assert driver.inversion is not None
+
local_survey_a = driver.inverse_problem.dmisfit.objfcts[0].simulation.survey
local_survey_b = driver.inverse_problem.dmisfit.objfcts[1].simulation.survey
@@ -173,7 +173,7 @@ def test_survey_data(tmp_path: Path):
np.testing.assert_array_equal(expected_dobs, np.hstack(survey_dobs))
# test save geoh5 iteration data
- driver.directives.directive_list[1].save_components(99, survey_dobs)
+ driver.directives.save_iteration_data_directive.write(99, survey_dobs)
with workspace.open():
bxx_test = workspace.get_entity("Iteration_99_bxx")[0].values
@@ -184,7 +184,7 @@ def test_survey_data(tmp_path: Path):
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)
+ driver.directives.save_iteration_residual_directive.write(99, survey_dobs)
with workspace.open():
assert np.all(
@@ -302,4 +302,4 @@ 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)
+ assert isinstance(survey[0], simpeg.potential_fields.magnetics.Survey)
diff --git a/tests/driver_test.py b/tests/driver_test.py
new file mode 100644
index 00000000..55363efe
--- /dev/null
+++ b/tests/driver_test.py
@@ -0,0 +1,58 @@
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg_drivers.potential_fields import GravityParams
+from simpeg_drivers.potential_fields.gravity.driver import GravityDriver
+from simpeg_drivers.utils.testing import setup_inversion_workspace
+
+
+def test_smallness_terms(tmp_path: Path):
+ n_grid_points = 2
+ refinement = (2,)
+
+ 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,
+ )
+
+ gz = survey.add_data({"gz": {"values": np.ones(survey.n_vertices)}})
+ mesh = model.parent
+ params = GravityParams(
+ geoh5=geoh5,
+ mesh=mesh.uid,
+ topography_object=topography.uid,
+ data_object=gz.parent.uid,
+ starting_model=1e-4,
+ reference_model=0.0,
+ alpha_s=1.0,
+ s_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=1,
+ initial_beta_ratio=1e-2,
+ prctile=100,
+ store_sensitivities="ram",
+ )
+ params.alpha_s = None
+ driver = GravityDriver(params)
+ assert driver.regularization.objfcts[0].alpha_s == 0.0
diff --git a/tests/locations_test.py b/tests/locations_test.py
index 543b01de..cd66c75c 100644
--- a/tests/locations_test.py
+++ b/tests/locations_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/meshes_test.py b/tests/meshes_test.py
index 15dbf3ae..63a6fda2 100644
--- a/tests/meshes_test.py
+++ b/tests/meshes_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -24,7 +17,7 @@
from discretize import TreeMesh
from geoh5py import Workspace
from geoh5py.objects import Octree
-from octree_creation_app.utils import treemesh_2_octree
+from octree_creation_app.utils import octree_2_treemesh, treemesh_2_octree
from simpeg_drivers.components import InversionData, InversionMesh, InversionTopography
from simpeg_drivers.potential_fields import MagneticVectorParams
@@ -65,12 +58,95 @@ def setup_params(tmp_path):
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)
+ inversion_mesh = InversionMesh(ws, params)
assert isinstance(inversion_mesh.mesh, TreeMesh)
+def test_to_treemesh(tmp_path):
+ workspace = Workspace(tmp_path / "test_octree.geoh5")
+
+ # Positive cells sizes and Z ordering
+ cells = np.array(
+ [
+ [0, 0, 0, 1],
+ [1, 0, 0, 1],
+ [0, 1, 0, 1],
+ [1, 1, 0, 1],
+ [0, 0, 1, 1],
+ [1, 0, 1, 1],
+ [0, 1, 1, 1],
+ [1, 1, 1, 1],
+ ]
+ )
+ octree = Octree.create(
+ workspace,
+ u_count=2,
+ v_count=2,
+ w_count=2,
+ u_cell_size=1,
+ v_cell_size=1,
+ w_cell_size=1,
+ octree_cells=cells,
+ name="All is well",
+ )
+ mesh = InversionMesh.to_treemesh(octree)
+ assert np.allclose(mesh.cell_centers, octree.centroids)
+
+ # IJK ordering
+ cells = np.array(
+ [
+ [0, 0, 0, 1],
+ [0, 0, 1, 1],
+ [0, 1, 0, 1],
+ [0, 1, 1, 1],
+ [1, 0, 0, 1],
+ [1, 0, 1, 1],
+ [1, 1, 0, 1],
+ [1, 1, 1, 1],
+ ]
+ )
+ octree = Octree.create(
+ workspace,
+ u_count=2,
+ v_count=2,
+ w_count=2,
+ u_cell_size=1,
+ v_cell_size=1,
+ w_cell_size=1,
+ octree_cells=cells,
+ name="Uh oh",
+ )
+ mesh = InversionMesh.to_treemesh(octree)
+ assert np.allclose(mesh.cell_centers, octree.centroids)
+
+ # Negative cell sizes
+ cells = np.array(
+ [
+ [0, 0, 1, 1],
+ [1, 0, 1, 1],
+ [0, 1, 1, 1],
+ [1, 1, 1, 1],
+ [0, 0, 0, 1],
+ [1, 0, 0, 1],
+ [0, 1, 0, 1],
+ [1, 1, 0, 1],
+ ]
+ )
+ octree = Octree.create(
+ workspace,
+ u_count=2,
+ v_count=2,
+ w_count=2,
+ u_cell_size=1,
+ v_cell_size=1,
+ w_cell_size=-1,
+ octree_cells=cells,
+ name="All is well",
+ )
+ mesh = InversionMesh.to_treemesh(octree)
+ assert np.allclose(mesh.cell_centers, octree.centroids)
+
+
def test_ensure_cell_convention(tmp_path):
workspace = Workspace(tmp_path / "test_octree.geoh5")
octree_cells = np.array(
diff --git a/tests/models_test.py b/tests/models_test.py
index 6b0fd4fa..599e9812 100644
--- a/tests/models_test.py
+++ b/tests/models_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -104,9 +97,7 @@ def test_model_from_object(tmp_path: Path):
ws, params = setup_params(tmp_path)
driver = MagneticVectorDriver(params)
- inversion_mesh = InversionMesh(
- ws, params, driver.inversion_data, driver.inversion_topography
- )
+ inversion_mesh = InversionMesh(ws, params)
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])
diff --git a/tests/params_test.py b/tests/params_test.py
index 0de717ed..0767b77f 100644
--- a/tests/params_test.py
+++ b/tests/params_test.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 simpeg-drivers package. '
+# '
+# simpeg-drivers is distributed under the terms and conditions of the MIT License '
+# (see LICENSE file at the root of this source code package). '
+# '
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# pylint: disable=redefined-outer-name
@@ -200,6 +201,7 @@ def test_params_initialize():
"starting_model",
"conductivity_model",
"min_value",
+ "generate_sweep",
]:
continue
check.append(getattr(params, k) == v)
@@ -236,6 +238,7 @@ def test_input_file_construction(tmp_path: Path):
"reference_model",
"conductivity_model",
"min_value",
+ "generate_sweep",
]:
continue
check.append(getattr(params, k) == v)
@@ -404,17 +407,9 @@ def test_validate_tile_spatial(mvi_params):
catch_invalid_generator(mvi_params, param, invalidval, "type")
-def test_validate_receivers_radar_drape(mvi_params):
- param = "receivers_radar_drape"
- newval = uuid4()
- catch_invalid_generator(mvi_params, param, newval, "association")
- catch_invalid_generator(mvi_params, param, {}, "type")
-
-
@pytest.mark.parametrize(
"param,newval,value,error_type",
[
- ("receivers_offset_z", 99.0, "test", "type"),
("max_chunk_size", 256, "asdf", "type"),
("chunk_by_rows", True, "sdf", "type"),
("output_tile_files", True, "sdf", "type"),
@@ -427,9 +422,6 @@ def test_validate_receivers_radar_drape(mvi_params):
("prctile", 90, "test", "type"),
("coolingRate", 3, "test", "type"),
("coolingFactor", 4.0, "test", "type"),
- ("coolEps_q", False, "test", "type"),
- ("coolEpsFact", 1.1, "test", "type"),
- ("beta_search", True, "test", "type"),
("starting_chi_factor", 2.0, "test", "type"),
("max_global_iterations", 2, "test", "type"),
("max_irls_iterations", 1, "test", "type"),
@@ -441,10 +433,10 @@ def test_validate_receivers_radar_drape(mvi_params):
("length_scale_x", 0.1, "test", "type"),
("length_scale_y", 0.1, "test", "type"),
("length_scale_z", 0.1, "test", "type"),
- ("s_norm", 0.5, "test", "type"),
- ("x_norm", 0.5, "test", "type"),
- ("y_norm", 0.5, "test", "type"),
- ("z_norm", 0.5, "test", "type"),
+ ("s_norm", 0.5, {}, "type"),
+ ("x_norm", 0.5, {}, "type"),
+ ("y_norm", 0.5, {}, "type"),
+ ("z_norm", 0.5, {}, "type"),
("reference_model", 99.0, {}, "type"),
("reference_inclination", 99.0, {}, "type"),
("reference_declination", 99.0, {}, "type"),
@@ -455,11 +447,9 @@ def test_validate_receivers_radar_drape(mvi_params):
("n_cpu", 12, "test", "type"),
],
)
-def test_validate_inversion_parameters(
- mvi_params, param, newval, value, error_type
-): # pylint: disable=expression-not-assigned
+def test_validate_inversion_parameters(mvi_params, param, newval, value, error_type):
param_test_generator(mvi_params, param, newval)
- catch_invalid_generator(mvi_params, param, value, error_type),
+ catch_invalid_generator(mvi_params, param, value, error_type)
def test_validate_geoh5(mvi_params):
diff --git a/tests/run_tests/__init__.py b/tests/run_tests/__init__.py
index 9d502a42..f488969a 100644
--- a/tests/run_tests/__init__.py
+++ b/tests/run_tests/__init__.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 simpeg-drivers.
#
diff --git a/tests/run_tests/driver_airborne_tem_test.py b/tests/run_tests/driver_airborne_tem_test.py
index 973d0a7a..a818749c 100644
--- a/tests/run_tests/driver_airborne_tem_test.py
+++ b/tests/run_tests/driver_airborne_tem_test.py
@@ -1,26 +1,21 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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.groups import SimPEGGroup
from geoh5py.workspace import Workspace
+from pytest import raises
from simpeg_drivers.electromagnetics.time_domain import TimeDomainElectromagneticsParams
from simpeg_drivers.electromagnetics.time_domain.driver import (
@@ -29,6 +24,7 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# To test the full run and validate the inversion.
# Move this file out of the test directory and run.
@@ -39,6 +35,43 @@
}
+def test_bad_waveform(tmp_path: Path):
+ n_grid_points = 3
+ refinement = (2,)
+ 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)
+
+ survey.channels[-1] = 1000.0
+
+ with raises(ValueError, match="The latest time"):
+ _ = fwr_driver.inversion_data.survey
+
+
def test_airborne_tem_fwr_run(
tmp_path: Path,
n_grid_points=3,
@@ -83,7 +116,11 @@ def test_airborne_tem_run(tmp_path: Path, max_iterations=1, pytest=True):
)
with Workspace(workpath) as geoh5:
- survey = geoh5.get_entity("Airborne_rx")[0]
+ survey = next(
+ child
+ for child in geoh5.get_entity("Airborne_rx")
+ if not isinstance(child.parent, SimPEGGroup)
+ )
mesh = geoh5.get_entity("mesh")[0]
topography = geoh5.get_entity("topography")[0]
@@ -118,7 +155,7 @@ def test_airborne_tem_run(tmp_path: Path, max_iterations=1, pytest=True):
data_kwargs = {}
for comp in components:
data_kwargs[f"{comp}_channel"] = survey.find_or_create_property_group(
- name=f"Iteration_0_{comp}"
+ name=f"dB{comp}dt"
)
data_kwargs[f"{comp}_uncertainty"] = survey.find_or_create_property_group(
name=f"dB{comp}dt uncertainties"
diff --git a/tests/run_tests/driver_dc_2d_test.py b/tests/run_tests/driver_dc_2d_test.py
index c9294b83..26ff19a0 100644
--- a/tests/run_tests/driver_dc_2d_test.py
+++ b/tests/run_tests/driver_dc_2d_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -32,13 +25,14 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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,
+ "phi_d": 2814,
+ "phi_m": 15.88,
}
@@ -103,10 +97,11 @@ def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True):
data_object=potential.parent.uid,
potential_channel=potential.uid,
potential_uncertainty=1e-3,
+ model_type="Resistivity (Ohm-m)",
line_object=geoh5.get_entity("line_ids")[0].uid,
line_id=101,
- starting_model=1e-2,
- reference_model=1e-2,
+ starting_model=100.0,
+ reference_model=100.0,
s_norm=0.0,
x_norm=1.0,
y_norm=1.0,
@@ -118,7 +113,7 @@ def test_dc_2d_run(tmp_path: Path, max_iterations=1, pytest=True):
initial_beta=None,
initial_beta_ratio=1e0,
prctile=100,
- upper_bound=10,
+ lower_bound=0.1,
coolingRate=1,
)
params.write_input_file(path=tmp_path, name="Inv_run")
diff --git a/tests/run_tests/driver_dc_p3d_test.py b/tests/run_tests/driver_dc_p3d_test.py
index c0d45363..f5cf8015 100644
--- a/tests/run_tests/driver_dc_p3d_test.py
+++ b/tests/run_tests/driver_dc_p3d_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -33,10 +26,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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": 4320, "phi_m": 0.6145}
+target_run = {"data_norm": 1.099, "phi_d": 8657, "phi_m": 1.217}
def test_dc_p3d_fwr_run(
@@ -131,12 +125,12 @@ def test_dc_p3d_run(
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]
+ middle_line_id = next(k for k, v in lookup.items() if v["line_id"] == 101)
with Workspace(basepath / f"{middle_line_id}.ui.geoh5", mode="r") as workspace:
- middle_inversion_group = [
+ middle_inversion_group = next(
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+"):
diff --git a/tests/run_tests/driver_dc_test.py b/tests/run_tests/driver_dc_test.py
index 7490e507..77d7d792 100644
--- a/tests/run_tests/driver_dc_test.py
+++ b/tests/run_tests/driver_dc_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -31,10 +24,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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}
+target_run = {"data_norm": 0.15043, "phi_d": 221.4, "phi_m": 358.6}
def test_dc_3d_fwr_run(
@@ -123,13 +117,16 @@ def test_dc_3d_run(
upper_bound=10,
tile_spatial=n_lines,
store_sensitivities="ram",
+ auto_scale_misfits=False,
+ save_sensitivities=True,
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"))
-
+ # Should not be auto-scaling
+ np.testing.assert_allclose(driver.data_misfit.multipliers, [1, 1, 1])
output = get_inversion_output(
driver.params.geoh5.h5file, driver.params.out_group.uid
)
@@ -138,6 +135,9 @@ def test_dc_3d_run(
if pytest:
check_target(output, target_run)
+ with Workspace(workpath) as geoh5:
+ assert geoh5.get_entity("Iteration_1_sensitivities")[0] is not None
+
def test_dc_single_line_fwr_run(
tmp_path: Path,
diff --git a/tests/run_tests/driver_fem_test.py b/tests/run_tests/driver_fem_test.py
index 69aa7217..88fdfbee 100644
--- a/tests/run_tests/driver_fem_test.py
+++ b/tests/run_tests/driver_fem_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -23,6 +16,7 @@
import numpy as np
from geoh5py import Workspace
+from geoh5py.groups import SimPEGGroup
from simpeg_drivers.electromagnetics.frequency_domain.driver import (
FrequencyDomainElectromagneticsDriver,
@@ -33,10 +27,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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}
+target_run = {"data_norm": 47.522882323952054, "phi_d": 729, "phi_m": 883.8}
def test_fem_fwr_run(
@@ -81,7 +76,11 @@ def test_fem_run(tmp_path: Path, max_iterations=1, pytest=True):
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)
+ survey = next(
+ child
+ for child in geoh5.get_entity("Airborne_rx")
+ if not isinstance(child.parent, SimPEGGroup)
+ )
mesh = geoh5.get_entity("mesh")[0]
topography = geoh5.get_entity("topography")[0]
data = {}
@@ -118,7 +117,7 @@ def test_fem_run(tmp_path: Path, max_iterations=1, pytest=True):
data_kwargs = {}
for comp, data_group, uncert_group in zip(
- components, data_groups, uncert_groups
+ components, data_groups, uncert_groups, strict=True
):
data_kwargs[f"{comp}_channel"] = data_group.uid
data_kwargs[f"{comp}_uncertainty"] = uncert_group.uid
diff --git a/tests/run_tests/driver_grav_test.py b/tests/run_tests/driver_grav_test.py
index 2680b03e..5011dbae 100644
--- a/tests/run_tests/driver_grav_test.py
+++ b/tests/run_tests/driver_grav_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,10 +20,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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": 3.974e-05, "phi_m": 0.001442}
+target_run = {"data_norm": 0.0028055269276044915, "phi_d": 8.315e-05, "phi_m": 0.002882}
def test_gravity_fwr_run(
@@ -74,6 +68,19 @@ def test_gravity_run(
gz = geoh5.get_entity("Iteration_0_gz")[0]
orig_gz = gz.values.copy()
mesh = geoh5.get_entity("mesh")[0]
+ model = mesh.get_entity("starting_model")[0]
+
+ inds = (mesh.centroids[:, 0] > -35) & (mesh.centroids[:, 0] < 35)
+ norms = np.ones(mesh.n_cells) * 2
+ norms[inds] = 0
+ gradient_norms = mesh.add_data({"norms": {"values": norms}})
+
+ # Test mesh UBC ordered
+ ind = np.argsort(mesh.octree_cells, order=["K", "J", "I"])
+ mesh.octree_cells = mesh.octree_cells[ind]
+ model.values = model.values[ind]
+ gradient_norms.values = gradient_norms.values[ind]
+
topography = geoh5.get_entity("topography")[0]
# Turn some values to nan
@@ -90,9 +97,9 @@ def test_gravity_run(
starting_model=1e-4,
reference_model=0.0,
s_norm=0.0,
- x_norm=0.0,
- y_norm=0.0,
- z_norm=0.0,
+ x_norm=gradient_norms,
+ y_norm=gradient_norms,
+ z_norm=gradient_norms,
gradient_type="components",
gz_channel_bool=True,
z_from_topo=False,
@@ -119,14 +126,14 @@ def test_gravity_run(
residual = run_ws.get_entity("Iteration_1_gz_Residual")[0]
assert np.isnan(residual.values).sum() == 1, "Number of nan residuals differ."
- predicted = [
+ predicted = next(
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."
+ )
+ 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
diff --git a/tests/run_tests/driver_ground_tem_test.py b/tests/run_tests/driver_ground_tem_test.py
index f9e1f1fe..68e2c4dc 100644
--- a/tests/run_tests/driver_ground_tem_test.py
+++ b/tests/run_tests/driver_ground_tem_test.py
@@ -1,22 +1,16 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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 logging import INFO, getLogger
from pathlib import Path
import numpy as np
@@ -29,20 +23,26 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
+logger = getLogger(__name__)
+
+
# 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,
+ "phi_d": 86.58,
+ "phi_m": 443.1,
}
def test_tiling_ground_tem(
tmp_path: Path,
+ *,
n_grid_points=4,
refinement=(2,),
+ **_,
):
# Run the forward
geoh5, _, model, survey, topography = setup_inversion_workspace(
@@ -86,9 +86,13 @@ def test_tiling_ground_tem(
def test_ground_tem_fwr_run(
tmp_path: Path,
+ caplog,
n_grid_points=4,
refinement=(2,),
+ pytest=True,
):
+ if pytest:
+ caplog.set_level(INFO)
# Run the forward
geoh5, _, model, survey, topography = setup_inversion_workspace(
tmp_path,
@@ -117,6 +121,19 @@ def test_ground_tem_fwr_run(
)
params.workpath = tmp_path
fwr_driver = TimeDomainElectromagneticsDriver(params)
+
+ survey.transmitters.remove_cells([15])
+ survey.tx_id_property.name = "tx_id"
+ assert fwr_driver.inversion_data.survey.source_list[0].n_segments == 16
+
+ if pytest:
+ assert len(caplog.records) == 2
+ for record in caplog.records:
+ assert record.levelname == "INFO"
+ assert "counter-clockwise" in record.message
+
+ assert "closed" in caplog.records[0].message
+
fwr_driver.run()
@@ -209,6 +226,7 @@ def test_ground_tem_run(tmp_path: Path, max_iterations=1, pytest=True):
output = get_inversion_output(
driver.params.geoh5.h5file, driver.params.out_group.uid
)
+ assert driver.inversion_data.entity.tx_id_property.name == "tx_id"
output["data"] = orig_dBzdt
if pytest:
check_target(output, target_run, tolerance=0.5)
@@ -219,7 +237,9 @@ def test_ground_tem_run(tmp_path: Path, max_iterations=1, pytest=True):
if __name__ == "__main__":
# Full run
- test_ground_tem_fwr_run(Path("./"), n_grid_points=5, refinement=(2, 2, 2))
+ test_ground_tem_fwr_run(
+ Path("./"), None, n_grid_points=5, refinement=(2, 2, 2), pytest=False
+ )
test_ground_tem_run(
Path("./"),
max_iterations=15,
diff --git a/tests/run_tests/driver_ip_2d_test.py b/tests/run_tests/driver_ip_2d_test.py
index 91316c7d..7cddae02 100644
--- a/tests/run_tests/driver_ip_2d_test.py
+++ b/tests/run_tests/driver_ip_2d_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -31,14 +24,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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,
-}
+target_run = {"data_norm": 0.091350, "phi_d": 25630, "phi_m": 0.1578}
def test_ip_2d_fwr_run(
@@ -62,10 +52,10 @@ def test_ip_2d_fwr_run(
params = InducedPolarization2DParams(
forward_only=True,
geoh5=geoh5,
+ data_object=survey.uid,
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,
diff --git a/tests/run_tests/driver_ip_p3d_test.py b/tests/run_tests/driver_ip_p3d_test.py
index ed98b687..53f2a7bf 100644
--- a/tests/run_tests/driver_ip_p3d_test.py
+++ b/tests/run_tests/driver_ip_p3d_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -32,14 +25,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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,
-}
+target_run = {"data_norm": 0.0919313, "phi_d": 25480, "phi_m": 0.2008}
def test_ip_p3d_fwr_run(
@@ -137,12 +127,12 @@ def test_ip_p3d_run(
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]
+ middle_line_id = next(k for k, v in lookup.items() if v["line_id"] == 101)
with Workspace(basepath / f"{middle_line_id}.ui.geoh5", mode="r") as workspace:
- middle_inversion_group = [
+ middle_inversion_group = next(
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+"):
diff --git a/tests/run_tests/driver_ip_test.py b/tests/run_tests/driver_ip_test.py
index dedd8c7b..083c2411 100644
--- a/tests/run_tests/driver_ip_test.py
+++ b/tests/run_tests/driver_ip_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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,10 +23,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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.438, "phi_m": 0.3258}
+target_run = {"data_norm": 0.0082997, "phi_d": 180.9, "phi_m": 0.6749}
def test_ip_3d_fwr_run(
diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py
index 9acb9898..1a5a6ea2 100644
--- a/tests/run_tests/driver_joint_cross_gradient_test.py
+++ b/tests/run_tests/driver_joint_cross_gradient_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -36,10 +29,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# To test the full run and validate the inversion.
# Move this file out of the test directory and run.
-target_run = {"data_norm": 53.29600188902931, "phi_d": 500, "phi_m": 0.1585}
+target_run = {"data_norm": 53.29601, "phi_d": 10590, "phi_m": 0.1336}
def test_joint_cross_gradient_fwr_run(
@@ -135,7 +129,6 @@ def test_joint_cross_gradient_fwr_run(
def test_joint_cross_gradient_inv_run(
tmp_path,
max_iterations=1,
- n_lines=3,
pytest=True,
):
workpath = tmp_path / "inversion_test.ui.geoh5"
@@ -169,41 +162,48 @@ def test_joint_cross_gradient_inv_run(
if isinstance(child, FloatData):
data = child
- assert data is not None, "Could not find data object."
+ if data is None:
+ raise ValueError("No data found in survey")
orig_data.append(data.values)
if group.options["inversion_type"] == "gravity":
+ data.values = data.values + np.random.randn(data.values.size) * 1e-2
params = GravityParams(
geoh5=geoh5,
mesh=mesh.uid,
- alpha_s=0.0,
+ alpha_s=1.0,
topography_object=topography.uid,
data_object=survey.uid,
gz_channel=data.uid,
- gz_uncertainty=1e-3,
+ gz_uncertainty=1e-2,
starting_model=0.0,
+ reference_model=0.0,
)
drivers.append(GravityDriver(params))
elif group.options["inversion_type"] == "direct current 3d":
+ data.values = data.values + np.random.randn(data.values.size) * 5e-4
params = DirectCurrent3DParams(
geoh5=geoh5,
mesh=mesh.uid,
- alpha_s=0.0,
+ alpha_s=1.0,
topography_object=topography.uid,
data_object=survey.uid,
potential_channel=data.uid,
- potential_uncertainty=1e-3,
- tile_spatial=n_lines,
- starting_model=1e-2,
- reference_model=1e-2,
+ model_type="Resistivity (Ohm-m)",
+ potential_uncertainty=5e-4,
+ tile_spatial=1,
+ starting_model=100.0,
+ reference_model=100.0,
+ save_sensitivities=True,
)
drivers.append(DirectCurrent3DDriver(params))
else:
+ data.values = data.values + np.random.randn(data.values.size) * 10.0
params = MagneticVectorParams(
geoh5=geoh5,
mesh=mesh.uid,
- alpha_s=0.0,
+ alpha_s=1.0,
topography_object=topography.uid,
inducing_field_strength=group.options["inducing_field_strength"][
"value"
@@ -219,7 +219,7 @@ def test_joint_cross_gradient_inv_run(
reference_model=0.0,
tile_spatial=1,
tmi_channel=data.uid,
- tmi_uncertainty=1e0,
+ tmi_uncertainty=1e1,
)
drivers.append(MagneticVectorDriver(params))
@@ -228,15 +228,15 @@ def test_joint_cross_gradient_inv_run(
geoh5=geoh5,
topography_object=topography.uid,
group_a=drivers[0].params.out_group,
- group_a_multiplier=1e-2,
+ group_a_multiplier=1.0,
group_b=drivers[1].params.out_group,
- group_b_multiplier=1e-2,
+ group_b_multiplier=1.0,
group_c=drivers[2].params.out_group,
max_global_iterations=max_iterations,
- initial_beta_ratio=1e2,
- cross_gradient_weight_a_b=5e0,
- cross_gradient_weight_c_a=5e0,
- cross_gradient_weight_c_b=5e0,
+ initial_beta_ratio=1e1,
+ cross_gradient_weight_a_b=1e0,
+ cross_gradient_weight_c_a=1e0,
+ cross_gradient_weight_c_b=1e0,
s_norm=0.0,
x_norm=0.0,
y_norm=0.0,
@@ -270,6 +270,5 @@ def test_joint_cross_gradient_inv_run(
test_joint_cross_gradient_inv_run(
Path("./"),
max_iterations=20,
- n_lines=5,
pytest=False,
)
diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py
index 37dcf850..6fb15c12 100644
--- a/tests/run_tests/driver_joint_surveys_test.py
+++ b/tests/run_tests/driver_joint_surveys_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -28,10 +21,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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}
+target_run = {"data_norm": 0.2997791602206556, "phi_d": 1411, "phi_m": 74.54}
def test_joint_surveys_fwr_run(
@@ -111,9 +105,9 @@ def test_joint_surveys_inv_run(
)
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]
@@ -124,14 +118,16 @@ def test_joint_surveys_inv_run(
else:
survey = child
- assert mesh is not None, "Mesh not found in group."
+ if mesh is None:
+ raise ValueError("No mesh found in the group.")
+ active_model = mesh.get_entity("active_cells")[0]
gz = survey.get_data("Iteration_0_gz")[0]
orig_data.append(gz.values)
params = GravityParams(
geoh5=geoh5,
mesh=mesh.uid,
- topography_object=topography.uid,
+ active_model=active_model.uid,
data_object=survey.uid,
gz_channel=gz.uid,
gz_uncertainty=np.var(gz.values) * 2.0,
@@ -139,10 +135,11 @@ def test_joint_surveys_inv_run(
)
drivers.append(GravityDriver(params))
+ active_model = drivers[0].params.mesh.get_entity("active_cells")[0]
# Run the inverse
joint_params = JointSurveysParams(
geoh5=geoh5,
- topography_object=topography.uid,
+ activate_model=active_model,
mesh=drivers[0].params.mesh,
group_a=drivers[0].params.out_group,
group_b=drivers[1].params.out_group,
diff --git a/tests/run_tests/driver_mag_test.py b/tests/run_tests/driver_mag_test.py
index d4487314..c000f81a 100644
--- a/tests/run_tests/driver_mag_test.py
+++ b/tests/run_tests/driver_mag_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -27,10 +20,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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": 19.01, "phi_m": 2.77e-06}
+target_run = {"data_norm": 8.71227951689941, "phi_d": 37.52, "phi_m": 5.717e-06}
def test_susceptibility_fwr_run(
@@ -86,14 +80,14 @@ def test_susceptibility_run(
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]
+ active_cells = mesh.get_entity("active_cells")[0]
inducing_field = (50000.0, 90.0, 0.0)
# Run the inverse
params = MagneticScalarParams(
geoh5=geoh5,
mesh=mesh.uid,
- topography_object=topography.uid,
+ active_model=active_cells.uid,
inducing_field_strength=inducing_field[0],
inducing_field_inclination=inducing_field[1],
inducing_field_declination=inducing_field[2],
@@ -104,6 +98,7 @@ def test_susceptibility_run(
x_norm=1.0,
y_norm=1.0,
z_norm=1.0,
+ initial_beta_ratio=1e1,
gradient_type="components",
lower_bound=0.0,
tmi_channel_bool=True,
@@ -113,7 +108,7 @@ def test_susceptibility_run(
max_global_iterations=max_iterations,
store_sensitivities="ram",
)
- params.write_input_file(path=tmp_path, name="Inv_run")
+ params.write_input_file(path=tmp_path, name="Inv_run", validate=False)
driver = MagneticScalarDriver.start(str(tmp_path / "Inv_run.ui.json"))
diff --git a/tests/run_tests/driver_mt_test.py b/tests/run_tests/driver_mt_test.py
index cee5eef0..80e40605 100644
--- a/tests/run_tests/driver_mt_test.py
+++ b/tests/run_tests/driver_mt_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -22,6 +15,7 @@
from pathlib import Path
import numpy as np
+from geoh5py.groups import SimPEGGroup
from geoh5py.workspace import Workspace
from simpeg_drivers.natural_sources.magnetotellurics.driver import (
@@ -33,10 +27,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# To test the full run and validate the inversion.
# Move this file out of the test directory and run.
-target_run = {"data_norm": 0.003936, "phi_d": 1.824, "phi_m": 2.551}
+target_run = {"data_norm": 0.0042988, "phi_d": 50.2, "phi_m": 11.1}
def test_magnetotellurics_fwr_run(
@@ -65,7 +60,7 @@ def test_magnetotellurics_fwr_run(
z_from_topo=False,
data_object=survey.uid,
starting_model=model.uid,
- conductivity_model=1e-2,
+ background_conductivity=1e-2,
zxx_real_channel_bool=True,
zxx_imag_channel_bool=True,
zxy_real_channel_bool=True,
@@ -81,6 +76,7 @@ def test_magnetotellurics_fwr_run(
def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
+ # pass
workpath = tmp_path / "inversion_test.ui.geoh5"
if pytest:
workpath = (
@@ -90,7 +86,11 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
)
with Workspace(workpath) as geoh5:
- survey = geoh5.get_entity("survey")[0].copy(copy_children=False)
+ survey = next(
+ child
+ for child in geoh5.get_entity("survey")
+ if not isinstance(child.parent, SimPEGGroup)
+ )
mesh = geoh5.get_entity("mesh")[0]
topography = geoh5.get_entity("topography")[0]
@@ -121,7 +121,7 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
{
f"uncertainty_{comp}_[{ind}]": {
"values": np.ones_like(data_entity.values)
- * np.percentile(np.abs(data_entity.values), 10)
+ * np.percentile(np.abs(data_entity.values), 5)
}
}
)
@@ -134,7 +134,7 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
data_kwargs = {}
for comp, data_group, uncert_group in zip(
- components, data_groups, uncert_groups
+ components, data_groups, uncert_groups, strict=True
):
data_kwargs[f"{comp}_channel"] = data_group.uid
data_kwargs[f"{comp}_uncertainty"] = uncert_group.uid
@@ -148,8 +148,8 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
topography_object=topography.uid,
resolution=0.0,
data_object=survey.uid,
- starting_model=0.01,
- reference_model=0.01,
+ starting_model=100.0,
+ reference_model=100.0,
alpha_s=1.0,
s_norm=1.0,
x_norm=1.0,
@@ -157,10 +157,12 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
z_norm=1.0,
gradient_type="components",
z_from_topo=False,
- upper_bound=0.75,
- conductivity_model=1e-2,
+ coolingRate=1,
+ lower_bound=0.75,
+ model_type="Resistivity (Ohm-m)",
+ background_conductivity=100.0,
max_global_iterations=max_iterations,
- initial_beta_ratio=1e2,
+ initial_beta_ratio=1e3,
prctile=100,
store_sensitivities="ram",
**data_kwargs,
@@ -190,7 +192,6 @@ def test_magnetotellurics_run(tmp_path: Path, max_iterations=1, pytest=True):
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")
diff --git a/tests/run_tests/driver_mvi_test.py b/tests/run_tests/driver_mvi_test.py
index f6bc6fdc..5927a5ca 100644
--- a/tests/run_tests/driver_mvi_test.py
+++ b/tests/run_tests/driver_mvi_test.py
@@ -1,25 +1,19 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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.groups.property_group import GroupTypeEnum
from geoh5py.objects import Curve
from geoh5py.workspace import Workspace
@@ -28,13 +22,14 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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.004415,
- "phi_m": 2.413e-06,
+ "phi_d": 0.01447,
+ "phi_m": 4.657e-06,
}
@@ -121,6 +116,7 @@ def test_magnetic_vector_run(
max_global_iterations=max_iterations,
initial_beta_ratio=1e1,
store_sensitivities="ram",
+ save_sensitivities=True,
prctile=100,
)
params.write_input_file(path=tmp_path, name="Inv_run")
@@ -140,6 +136,12 @@ def test_magnetic_vector_run(
inactive_ind = run_ws.get_entity("active_cells")[0].values == 0
assert np.all(nan_ind == inactive_ind)
+ out_group = run_ws.get_entity("Magnetic vector Inversion")[0]
+ mesh = out_group.get_entity("mesh")[0]
+ assert len(mesh.property_groups) == 2
+ assert len(mesh.property_groups[0].properties) == 2
+ assert mesh.property_groups[1].property_group_type == GroupTypeEnum.DIPDIR
+
if __name__ == "__main__":
# Full run
diff --git a/tests/run_tests/driver_tipper_test.py b/tests/run_tests/driver_tipper_test.py
index e0a79e01..e2230f5b 100644
--- a/tests/run_tests/driver_tipper_test.py
+++ b/tests/run_tests/driver_tipper_test.py
@@ -1,25 +1,19 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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.groups import SimPEGGroup
from geoh5py.workspace import Workspace
from simpeg_drivers.natural_sources import TipperParams
@@ -27,10 +21,11 @@
from simpeg_drivers.utils.testing import check_target, setup_inversion_workspace
from simpeg_drivers.utils.utils import get_inversion_output
+
# 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.3511, "phi_m": 3017}
+target_run = {"data_norm": 0.0055932, "phi_d": 7.346, "phi_m": 472.2}
def test_tipper_fwr_run(
@@ -41,7 +36,7 @@ def test_tipper_fwr_run(
# Run the forward
geoh5, _, model, survey, topography = setup_inversion_workspace(
tmp_path,
- background=1e-3,
+ background=100,
anomaly=1.0,
n_electrodes=n_grid_points,
n_lines=n_grid_points,
@@ -50,6 +45,7 @@ def test_tipper_fwr_run(
drape_height=15.0,
flatten=False,
)
+
params = TipperParams(
forward_only=True,
geoh5=geoh5,
@@ -59,7 +55,8 @@ def test_tipper_fwr_run(
z_from_topo=False,
data_object=survey.uid,
starting_model=model.uid,
- conductivity_model=1e-3,
+ model_type="Resistivity (Ohm-m)",
+ background_conductivity=1e2,
txz_real_channel_bool=True,
txz_imag_channel_bool=True,
tyz_real_channel_bool=True,
@@ -67,6 +64,9 @@ def test_tipper_fwr_run(
)
params.workpath = tmp_path
fwr_driver = TipperDriver(params)
+
+ # Should always be returning conductivity for simpeg simulations
+ assert not np.any(np.exp(fwr_driver.models.starting) > 1.01)
fwr_driver.run()
@@ -76,7 +76,11 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True):
workpath = tmp_path.parent / "test_tipper_fwr_run0" / "inversion_test.ui.geoh5"
with Workspace(workpath) as geoh5:
- survey = geoh5.get_entity("survey")[0]
+ survey = next(
+ child
+ for child in geoh5.get_entity("survey")
+ if not isinstance(child.parent, SimPEGGroup)
+ )
mesh = geoh5.get_entity("mesh")[0]
topography = geoh5.get_entity("topography")[0]
@@ -102,7 +106,7 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True):
{
f"uncertainty_{comp}_[{ind}]": {
"values": np.ones_like(data_entity.values)
- * np.percentile(np.abs(data_entity.values), 5)
+ * np.percentile(np.abs(data_entity.values), 1)
}
}
)
@@ -113,7 +117,7 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True):
data_kwargs = {}
for comp, data_group, uncert_group in zip(
- components, data_groups, uncert_groups
+ components, data_groups, uncert_groups, strict=True
):
data_kwargs[f"{comp}_channel"] = data_group.uid
data_kwargs[f"{comp}_uncertainty"] = uncert_group.uid
@@ -127,22 +131,25 @@ def test_tipper_run(tmp_path: Path, max_iterations=1, pytest=True):
topography_object=topography.uid,
resolution=0.0,
data_object=survey.uid,
- starting_model=0.001,
- reference_model=0.001,
- conductivity_model=1e-3,
+ starting_model=1e2,
+ reference_model=1e2,
+ background_conductivity=1e2,
s_norm=1.0,
x_norm=1.0,
y_norm=1.0,
z_norm=1.0,
alpha_s=1.0,
gradient_type="components",
+ model_type="Resistivity (Ohm-m)",
z_from_topo=False,
- upper_bound=0.75,
+ lower_bound=0.75,
max_global_iterations=max_iterations,
- initial_beta_ratio=1e2,
- coolingRate=2,
+ initial_beta_ratio=1e3,
+ starting_chi_factor=1.0,
+ coolingRate=1,
prctile=100,
- chi_factor=0.1,
+ chi_factor=1.0,
+ max_line_search_iterations=5,
store_sensitivities="ram",
**data_kwargs,
)
diff --git a/tests/topography_test.py b/tests/topography_test.py
index 94f46213..58976e40 100644
--- a/tests/topography_test.py
+++ b/tests/topography_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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/utils_surveys_test.py b/tests/utils_surveys_test.py
index b126b49b..ab2156ed 100644
--- a/tests/utils_surveys_test.py
+++ b/tests/utils_surveys_test.py
@@ -1,19 +1,12 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -23,9 +16,12 @@
def test_counterclockwise_sort():
- segments = np.array([[0, 3], [3, 2], [2, 1], [1, 0]])
- vertices = np.array([[0, 0], [1.5, 0], [0.5, 1], [0.1, 1.5]])
+ vertices = np.array(
+ [[0, 0], [0.25, 1.5], [0.0, 2.0], [0.5, 1], [1.5, 0], [0.2, 0.2]]
+ )
+ segments = np.c_[np.arange(len(vertices)), np.arange(1, len(vertices) + 1)]
+ segments[-1, 1] = 0
ccw_sorted = counter_clockwise_sort(segments, vertices)
- np.testing.assert_equal(ccw_sorted[0, :], [0, 1])
+ np.testing.assert_equal(ccw_sorted[0, :], [0, 5])
diff --git a/tests/version_test.py b/tests/version_test.py
index 82c007ba..d551f3be 100644
--- a/tests/version_test.py
+++ b/tests/version_test.py
@@ -1,29 +1,13 @@
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-# Copyright (c) 2023-2024 Mira Geoscience Ltd.
-# All rights reserved.
-#
-# This file is part of simpeg-drivers.
-#
-# The software and information contained herein are proprietary to, and
-# comprise valuable trade secrets of, Mira Geoscience, which
-# intend to preserve as trade secrets such software and information.
-# This software is furnished pursuant to a written license agreement and
-# may be used, copied, transmitted, and stored only in accordance with
-# the terms of such license and with the inclusion of the above copyright
-# notice. This software and information or any other copies thereof may
-# not be provided or otherwise made available to any other person.
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
-#
-# This file is part of simpeg-drivers.
-#
-#
-# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-#
-# This file is part of simpeg_drivers package.
-#
-# All rights reserved.
+# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
+# Copyright (c) 2025 Mira Geoscience Ltd. '
+# '
+# This file is part of simpeg-drivers package. '
+# '
+# simpeg-drivers 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
@@ -31,11 +15,14 @@
from pathlib import Path
import tomli as toml
+import yaml
+from jinja2 import Template
+from packaging.version import Version
import simpeg_drivers
-def get_version():
+def get_pyproject_version():
path = Path(__file__).resolve().parents[1] / "pyproject.toml"
with open(str(path), encoding="utf-8") as file:
@@ -44,8 +31,30 @@ def get_version():
return pyproject["tool"]["poetry"]["version"]
+def get_conda_recipe_version():
+ path = Path(__file__).resolve().parents[1] / "meta.yaml"
+
+ with open(str(path), encoding="utf-8") as file:
+ content = file.read()
+
+ template = Template(content)
+ rendered_yaml = template.render()
+
+ recipe = yaml.safe_load(rendered_yaml)
+
+ return recipe["package"]["version"]
+
+
def test_version_is_consistent():
- assert simpeg_drivers.__version__ == get_version()
+ assert simpeg_drivers.__version__ == get_pyproject_version()
+ normalized_conda_version = Version(get_conda_recipe_version())
+ normalized_version = Version(simpeg_drivers.__version__)
+ assert normalized_conda_version == normalized_version
+
+
+def test_conda_version_is_pep440():
+ version = Version(get_conda_recipe_version())
+ assert version is not None
def test_version_is_semver():
diff --git a/virtual-packages.yml b/virtual-packages.yml
new file mode 100644
index 00000000..17d042e3
--- /dev/null
+++ b/virtual-packages.yml
@@ -0,0 +1,4 @@
+subdirs:
+ linux-64:
+ packages:
+ __glibc: "2.17"