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 23b61df9..5ee515af 100644 --- a/environments/py-3.10-linux-64-dev.conda.lock.yml +++ b/environments/py-3.10-linux-64-dev.conda.lock.yml @@ -85,7 +85,7 @@ dependencies: - jedi=0.19.2=pyhff2d567_0 - jinja2=3.1.4=pyhd8ed1ab_0 - joblib=1.4.2=pyhd8ed1ab_0 - - json5=0.9.28=pyhff2d567_0 + - json5=0.10.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py310hff52083_1 - jsonschema=4.23.0=pyhd8ed1ab_0 - jsonschema-specifications=2024.10.1=pyhd8ed1ab_0 @@ -201,7 +201,7 @@ dependencies: - pybtex=0.24.0=pyhd8ed1ab_2 - pybtex-docutils=1.0.3=py310hff52083_2 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py310h505e2c1_0 - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0 - pydiso=0.1.2=py310h7b68af5_0 @@ -215,7 +215,7 @@ dependencies: - pytest-cov=6.0.0=pyhd8ed1ab_0 - python=3.10.15=h4a871b0_2_cpython - python-dateutil=2.9.0.post0=pyhff2d567_0 - - python-fastjsonschema=2.20.0=pyhd8ed1ab_0 + - python-fastjsonschema=2.21.0=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-tzdata=2023.4=pyhd8ed1ab_0 - python_abi=3.10=5_cp310 @@ -232,7 +232,7 @@ dependencies: - scikit-learn=1.4.2=py310h981052a_1 - scipy=1.14.1=py310hfcf56fc_1 - send2trash=1.8.3=pyh0d859eb_0 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sniffio=1.3.1=pyhd8ed1ab_0 - snowballstemmer=2.2.0=pyhd8ed1ab_0 @@ -268,7 +268,7 @@ dependencies: - tomli=2.1.0=pyhff2d567_0 - tomlkit=0.13.2=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py310ha75aee5_1 + - tornado=6.4.2=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_0 - traitlets=5.14.3=pyhd8ed1ab_0 - types-python-dateutil=2.9.0.20241003=pyhff2d567_0 @@ -298,7 +298,7 @@ dependencies: - zstd=1.5.6=ha6fb4c9_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/environments/py-3.10-linux-64.conda.lock.yml b/environments/py-3.10-linux-64.conda.lock.yml index 32e27f3e..116a80d3 100644 --- a/environments/py-3.10-linux-64.conda.lock.yml +++ b/environments/py-3.10-linux-64.conda.lock.yml @@ -108,7 +108,7 @@ dependencies: - psutil=6.1.0=py310ha75aee5_0 - pthread-stubs=0.4=hb9d3cd8_1002 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py310h505e2c1_0 - pydiso=0.1.2=py310h7b68af5_0 - pymatsolver=0.2.0=ha770c72_3 @@ -124,7 +124,7 @@ dependencies: - readline=8.2=h8228510_1 - scikit-learn=1.4.2=py310h981052a_1 - scipy=1.14.1=py310hfcf56fc_1 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sortedcontainers=2.4.0=pyhd8ed1ab_0 - tbb=2021.12.0=h84d6215_4 @@ -132,7 +132,7 @@ dependencies: - threadpoolctl=3.5.0=pyhc1e730c_0 - tk=8.6.13=noxft_h4845f30_101 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py310ha75aee5_1 + - tornado=6.4.2=py310ha75aee5_0 - tqdm=4.67.1=pyhd8ed1ab_0 - typing-extensions=4.12.2=hd8ed1ab_0 - typing_extensions=4.12.2=pyha770c72_0 @@ -151,7 +151,7 @@ dependencies: - zstd=1.5.6=ha6fb4c9_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 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 96dafec6..0638ff3b 100644 --- a/environments/py-3.10-win-64-dev.conda.lock.yml +++ b/environments/py-3.10-win-64-dev.conda.lock.yml @@ -84,7 +84,7 @@ dependencies: - jedi=0.19.2=pyhff2d567_0 - jinja2=3.1.4=pyhd8ed1ab_0 - joblib=1.4.2=pyhd8ed1ab_0 - - json5=0.9.28=pyhff2d567_0 + - json5=0.10.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py310h5588dad_1 - jsonschema=4.23.0=pyhd8ed1ab_0 - jsonschema-specifications=2024.10.1=pyhd8ed1ab_0 @@ -187,7 +187,7 @@ dependencies: - pybtex=0.24.0=pyhd8ed1ab_2 - pybtex-docutils=1.0.3=py310h5588dad_2 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py310hc226416_0 - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0 - pydiso=0.1.2=py310h5da8fee_0 @@ -201,7 +201,7 @@ dependencies: - pytest-cov=6.0.0=pyhd8ed1ab_0 - python=3.10.15=hfaddaf0_2_cpython - python-dateutil=2.9.0.post0=pyhff2d567_0 - - python-fastjsonschema=2.20.0=pyhd8ed1ab_0 + - python-fastjsonschema=2.21.0=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-tzdata=2023.4=pyhd8ed1ab_0 - python_abi=3.10=5_cp310 @@ -219,7 +219,7 @@ dependencies: - scikit-learn=1.4.2=py310hf2a6c47_1 - scipy=1.14.1=py310hbd0dde3_1 - send2trash=1.8.3=pyh5737063_0 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sniffio=1.3.1=pyhd8ed1ab_0 - snowballstemmer=2.2.0=pyhd8ed1ab_0 @@ -255,7 +255,7 @@ dependencies: - tomli=2.1.0=pyhff2d567_0 - tomlkit=0.13.2=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py310ha8f682b_1 + - tornado=6.4.2=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_0 - traitlets=5.14.3=pyhd8ed1ab_0 - types-python-dateutil=2.9.0.20241003=pyhff2d567_0 @@ -291,7 +291,7 @@ dependencies: - zstd=1.5.6=h0ea2cb4_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/environments/py-3.10-win-64.conda.lock.yml b/environments/py-3.10-win-64.conda.lock.yml index c6c5e2b1..0ade1e4c 100644 --- a/environments/py-3.10-win-64.conda.lock.yml +++ b/environments/py-3.10-win-64.conda.lock.yml @@ -95,7 +95,7 @@ dependencies: - pthread-stubs=0.4=hcd874cb_1001 - pthreads-win32=2.9.1=h2466b09_4 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py310hc226416_0 - pydiso=0.1.2=py310h5da8fee_0 - pymatsolver=0.2.0=ha770c72_3 @@ -110,7 +110,7 @@ dependencies: - pyyaml=6.0.2=py310ha8f682b_1 - scikit-learn=1.4.2=py310hf2a6c47_1 - scipy=1.14.1=py310hbd0dde3_1 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sortedcontainers=2.4.0=pyhd8ed1ab_0 - tbb=2021.12.0=hc790b64_4 @@ -118,7 +118,7 @@ dependencies: - threadpoolctl=3.5.0=pyhc1e730c_0 - tk=8.6.13=h5226925_1 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py310ha8f682b_1 + - tornado=6.4.2=py310ha8f682b_0 - tqdm=4.67.1=pyhd8ed1ab_0 - typing-extensions=4.12.2=hd8ed1ab_0 - typing_extensions=4.12.2=pyha770c72_0 @@ -142,7 +142,7 @@ dependencies: - zstd=1.5.6=h0ea2cb4_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/environments/py-3.11-linux-64-dev.conda.lock.yml b/environments/py-3.11-linux-64-dev.conda.lock.yml index 5f1d8bf0..1c649348 100644 --- a/environments/py-3.11-linux-64-dev.conda.lock.yml +++ b/environments/py-3.11-linux-64-dev.conda.lock.yml @@ -85,7 +85,7 @@ dependencies: - jedi=0.19.2=pyhff2d567_0 - jinja2=3.1.4=pyhd8ed1ab_0 - joblib=1.4.2=pyhd8ed1ab_0 - - json5=0.9.28=pyhff2d567_0 + - json5=0.10.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py311h38be061_1 - jsonschema=4.23.0=pyhd8ed1ab_0 - jsonschema-specifications=2024.10.1=pyhd8ed1ab_0 @@ -202,7 +202,7 @@ dependencies: - pybtex=0.24.0=pyhd8ed1ab_2 - pybtex-docutils=1.0.3=py311h38be061_2 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py311h9e33e62_0 - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0 - pydiso=0.1.2=py311h979a38d_0 @@ -216,7 +216,7 @@ dependencies: - pytest-cov=6.0.0=pyhd8ed1ab_0 - python=3.11.10=hc5c86c4_3_cpython - python-dateutil=2.9.0.post0=pyhff2d567_0 - - python-fastjsonschema=2.20.0=pyhd8ed1ab_0 + - python-fastjsonschema=2.21.0=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-tzdata=2023.4=pyhd8ed1ab_0 - python_abi=3.11=5_cp311 @@ -233,7 +233,7 @@ dependencies: - scikit-learn=1.4.2=py311he08f58d_1 - scipy=1.14.1=py311he9a78e4_1 - send2trash=1.8.3=pyh0d859eb_0 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sniffio=1.3.1=pyhd8ed1ab_0 - snowballstemmer=2.2.0=pyhd8ed1ab_0 @@ -269,7 +269,7 @@ dependencies: - tomli=2.1.0=pyhff2d567_0 - tomlkit=0.13.2=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py311h9ecbd09_1 + - tornado=6.4.2=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_0 - traitlets=5.14.3=pyhd8ed1ab_0 - types-python-dateutil=2.9.0.20241003=pyhff2d567_0 @@ -299,7 +299,7 @@ dependencies: - zstd=1.5.6=ha6fb4c9_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/environments/py-3.11-linux-64.conda.lock.yml b/environments/py-3.11-linux-64.conda.lock.yml index e36494b3..ee30c40c 100644 --- a/environments/py-3.11-linux-64.conda.lock.yml +++ b/environments/py-3.11-linux-64.conda.lock.yml @@ -109,7 +109,7 @@ dependencies: - psutil=6.1.0=py311h9ecbd09_0 - pthread-stubs=0.4=hb9d3cd8_1002 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py311h9e33e62_0 - pydiso=0.1.2=py311h979a38d_0 - pymatsolver=0.2.0=ha770c72_3 @@ -125,7 +125,7 @@ dependencies: - readline=8.2=h8228510_1 - scikit-learn=1.4.2=py311he08f58d_1 - scipy=1.14.1=py311he9a78e4_1 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sortedcontainers=2.4.0=pyhd8ed1ab_0 - tbb=2021.12.0=h84d6215_4 @@ -133,7 +133,7 @@ dependencies: - threadpoolctl=3.5.0=pyhc1e730c_0 - tk=8.6.13=noxft_h4845f30_101 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py311h9ecbd09_1 + - tornado=6.4.2=py311h9ecbd09_0 - tqdm=4.67.1=pyhd8ed1ab_0 - typing-extensions=4.12.2=hd8ed1ab_0 - typing_extensions=4.12.2=pyha770c72_0 @@ -152,7 +152,7 @@ dependencies: - zstd=1.5.6=ha6fb4c9_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/environments/py-3.11-win-64-dev.conda.lock.yml b/environments/py-3.11-win-64-dev.conda.lock.yml index 1d671003..248950ab 100644 --- a/environments/py-3.11-win-64-dev.conda.lock.yml +++ b/environments/py-3.11-win-64-dev.conda.lock.yml @@ -84,7 +84,7 @@ dependencies: - jedi=0.19.2=pyhff2d567_0 - jinja2=3.1.4=pyhd8ed1ab_0 - joblib=1.4.2=pyhd8ed1ab_0 - - json5=0.9.28=pyhff2d567_0 + - json5=0.10.0=pyhd8ed1ab_0 - jsonpointer=3.0.0=py311h1ea47a8_1 - jsonschema=4.23.0=pyhd8ed1ab_0 - jsonschema-specifications=2024.10.1=pyhd8ed1ab_0 @@ -188,7 +188,7 @@ dependencies: - pybtex=0.24.0=pyhd8ed1ab_2 - pybtex-docutils=1.0.3=py311h1ea47a8_2 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py311h533ab2d_0 - pydata-sphinx-theme=0.15.4=pyhd8ed1ab_0 - pydiso=0.1.2=py311h6340b4d_0 @@ -202,7 +202,7 @@ dependencies: - pytest-cov=6.0.0=pyhd8ed1ab_0 - python=3.11.10=hce54a09_3_cpython - python-dateutil=2.9.0.post0=pyhff2d567_0 - - python-fastjsonschema=2.20.0=pyhd8ed1ab_0 + - python-fastjsonschema=2.21.0=pyhd8ed1ab_0 - python-json-logger=2.0.7=pyhd8ed1ab_0 - python-tzdata=2023.4=pyhd8ed1ab_0 - python_abi=3.11=5_cp311 @@ -220,7 +220,7 @@ dependencies: - scikit-learn=1.4.2=py311hdcb8d17_1 - scipy=1.14.1=py311hf16d85f_1 - send2trash=1.8.3=pyh5737063_0 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sniffio=1.3.1=pyhd8ed1ab_0 - snowballstemmer=2.2.0=pyhd8ed1ab_0 @@ -256,7 +256,7 @@ dependencies: - tomli=2.1.0=pyhff2d567_0 - tomlkit=0.13.2=pyha770c72_0 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py311he736701_1 + - tornado=6.4.2=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_0 - traitlets=5.14.3=pyhd8ed1ab_0 - types-python-dateutil=2.9.0.20241003=pyhff2d567_0 @@ -292,7 +292,7 @@ dependencies: - zstd=1.5.6=h0ea2cb4_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/environments/py-3.11-win-64.conda.lock.yml b/environments/py-3.11-win-64.conda.lock.yml index 902f79ce..dd63ca21 100644 --- a/environments/py-3.11-win-64.conda.lock.yml +++ b/environments/py-3.11-win-64.conda.lock.yml @@ -96,7 +96,7 @@ dependencies: - pthread-stubs=0.4=hcd874cb_1001 - pthreads-win32=2.9.1=h2466b09_4 - pycparser=2.22=pyhd8ed1ab_0 - - pydantic=2.10.1=pyh10f6f8f_0 + - pydantic=2.10.2=pyh3cfb1c2_0 - pydantic-core=2.27.1=py311h533ab2d_0 - pydiso=0.1.2=py311h6340b4d_0 - pymatsolver=0.2.0=ha770c72_3 @@ -111,7 +111,7 @@ dependencies: - pyyaml=6.0.2=py311he736701_1 - scikit-learn=1.4.2=py311hdcb8d17_1 - scipy=1.14.1=py311hf16d85f_1 - - setuptools=75.6.0=pyhff2d567_0 + - setuptools=75.6.0=pyhff2d567_1 - six=1.16.0=pyh6c4a22f_0 - sortedcontainers=2.4.0=pyhd8ed1ab_0 - tbb=2021.12.0=hc790b64_4 @@ -119,7 +119,7 @@ dependencies: - threadpoolctl=3.5.0=pyhc1e730c_0 - tk=8.6.13=h5226925_1 - toolz=1.0.0=pyhd8ed1ab_0 - - tornado=6.4.1=py311he736701_1 + - tornado=6.4.2=py311he736701_0 - tqdm=4.67.1=pyhd8ed1ab_0 - typing-extensions=4.12.2=hd8ed1ab_0 - typing_extensions=4.12.2=pyha770c72_0 @@ -143,7 +143,7 @@ dependencies: - zstd=1.5.6=h0ea2cb4_0 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@2a9d77a577fadf9c1256b0385e588e499f7f0dcf - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@59133afc4586f2924236098f5f001d402f162667 - octree-creation-app @ git+https://github.com/MiraGeoscience/octree-creation-app.git@8cf9eb474930e3d901a8a66737d896c4fb63f4fb - param-sweeps @ git+https://github.com/MiraGeoscience/param-sweeps.git@644febfba1e81b1777a8ebf86744541c8e1fce09 diff --git a/py-3.10.conda-lock.yml b/py-3.10.conda-lock.yml index 7bb507e7..36d48563 100644 --- a/py-3.10.conda-lock.yml +++ b/py-3.10.conda-lock.yml @@ -2269,27 +2269,27 @@ package: category: main optional: false - name: json5 - version: 0.9.28 + version: 0.10.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.28-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.10.0-pyhd8ed1ab_0.conda hash: - md5: b5fd1ac9269dd22e003eaac27e249d97 - sha256: 402586e586761e0d51dd590fb71786f7f4e21c16353ca7d1c559358a1f849b26 + md5: 165cbd1d80be88dafadeabfaae6fa588 + sha256: df01c5253bb5f8c68526c8bad92b8e832ed58a0d4c40d08a65c81c51821bc23d category: dev optional: true - name: json5 - version: 0.9.28 + version: 0.10.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.28-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.10.0-pyhd8ed1ab_0.conda hash: - md5: b5fd1ac9269dd22e003eaac27e249d97 - sha256: 402586e586761e0d51dd590fb71786f7f4e21c16353ca7d1c559358a1f849b26 + md5: 165cbd1d80be88dafadeabfaae6fa588 + sha256: df01c5253bb5f8c68526c8bad92b8e832ed58a0d4c40d08a65c81c51821bc23d category: dev optional: true - name: jsonpointer @@ -5558,7 +5558,7 @@ package: category: main optional: false - name: pydantic - version: 2.10.1 + version: 2.10.2 manager: conda platform: linux-64 dependencies: @@ -5567,14 +5567,14 @@ package: python: '>=3.9' typing-extensions: '>=4.6.1' typing_extensions: '>=4.12.2' - url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.1-pyh10f6f8f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.2-pyh3cfb1c2_0.conda hash: - md5: c15343c9dbdb30766a07e5b70e46c7d3 - sha256: b1872231d26ee3ded32bd1fe3ee1b3c7d9834ad72bf28aed70e5cd1235341584 + md5: e661b732b4d7514ace55a01873f03201 + sha256: 47368f0eeb63b2dd4c9c54ff35b216d01ae1c27b90d3c7a2066ef8e005f32103 category: main optional: false - name: pydantic - version: 2.10.1 + version: 2.10.2 manager: conda platform: win-64 dependencies: @@ -5583,10 +5583,10 @@ package: python: '>=3.9' typing-extensions: '>=4.6.1' typing_extensions: '>=4.12.2' - url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.1-pyh10f6f8f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.2-pyh3cfb1c2_0.conda hash: - md5: c15343c9dbdb30766a07e5b70e46c7d3 - sha256: b1872231d26ee3ded32bd1fe3ee1b3c7d9834ad72bf28aed70e5cd1235341584 + md5: e661b732b4d7514ace55a01873f03201 + sha256: 47368f0eeb63b2dd4c9c54ff35b216d01ae1c27b90d3c7a2066ef8e005f32103 category: main optional: false - name: pydantic-core @@ -6014,27 +6014,27 @@ package: category: main optional: false - name: python-fastjsonschema - version: 2.20.0 + version: 2.21.0 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.0-pyhd8ed1ab_0.conda hash: - md5: b98d2018c01ce9980c03ee2850690fab - sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: 4c849126120d1b3d61cf0eac8120ea70 + sha256: 09ae0acccbfc325b9b65946795c0055e0a40374e4e73b264f3b7e8cd8ae0a95a category: dev optional: true - name: python-fastjsonschema - version: 2.20.0 + version: 2.21.0 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.0-pyhd8ed1ab_0.conda hash: - md5: b98d2018c01ce9980c03ee2850690fab - sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: 4c849126120d1b3d61cf0eac8120ea70 + sha256: 09ae0acccbfc325b9b65946795c0055e0a40374e4e73b264f3b7e8cd8ae0a95a category: dev optional: true - name: python-json-logger @@ -6532,10 +6532,10 @@ package: platform: linux-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda hash: - md5: 68d7d406366926b09a6a023e3d0f71d7 - sha256: eeec4645f70ce0ed03348397dced9d218a650a42df98592419af61d2689163ed + md5: fc80f7995e396cbaeabd23cf46c413dc + sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 category: main optional: false - name: setuptools @@ -6544,10 +6544,10 @@ package: platform: win-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda hash: - md5: 68d7d406366926b09a6a023e3d0f71d7 - sha256: eeec4645f70ce0ed03348397dced9d218a650a42df98592419af61d2689163ed + md5: fc80f7995e396cbaeabd23cf46c413dc + sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 category: main optional: false - name: six @@ -7511,7 +7511,7 @@ package: category: main optional: false - name: tornado - version: 6.4.1 + version: 6.4.2 manager: conda platform: linux-64 dependencies: @@ -7519,14 +7519,14 @@ package: libgcc: '>=13' python: '>=3.10,<3.11.0a0' python_abi: 3.10.* - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py310ha75aee5_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py310ha75aee5_0.conda hash: - md5: 260c9ae4b2d9af7d5cce7b721cba6132 - sha256: db63e4d301ae8241343a9e04321a0a8d23e214460715faea029dd199e6f5dcc5 + md5: 166d59aab40b9c607b4cc21c03924e9d + sha256: 9c2b86d4e58c8b0e7d13a7f4c440f34e2201bae9cfc1d7e1d30a5bc7ffb1d4c8 category: main optional: false - name: tornado - version: 6.4.1 + version: 6.4.2 manager: conda platform: win-64 dependencies: @@ -7535,10 +7535,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/tornado-6.4.1-py310ha8f682b_1.conda + url: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.2-py310ha8f682b_0.conda hash: - md5: 975e757765691110c1785f97bbe73c32 - sha256: fada61447a6dd6a8abd3f2f127888d1cffab9be24265511b9477fe88fc81ba66 + md5: e6819d3a0cae0f1b1838875f858421d1 + sha256: 2e5671d0db03961692b3390778ce6aba40702bd57584fa60badf4baa7614679b category: main optional: false - name: tqdm @@ -8357,12 +8357,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 hash: - sha256: a3384338d013434e761dcc392b63dd95ffc81988 + sha256: d925c0b9b418a7c8e4c80e18a04fff640d455f43 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 category: main optional: false - name: geoh5py @@ -8374,12 +8374,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 hash: - sha256: a3384338d013434e761dcc392b63dd95ffc81988 + sha256: d925c0b9b418a7c8e4c80e18a04fff640d455f43 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 category: main optional: false - name: mira-simpeg diff --git a/py-3.11.conda-lock.yml b/py-3.11.conda-lock.yml index 95376dea..df934c3f 100644 --- a/py-3.11.conda-lock.yml +++ b/py-3.11.conda-lock.yml @@ -2267,27 +2267,27 @@ package: category: main optional: false - name: json5 - version: 0.9.28 + version: 0.10.0 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.28-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.10.0-pyhd8ed1ab_0.conda hash: - md5: b5fd1ac9269dd22e003eaac27e249d97 - sha256: 402586e586761e0d51dd590fb71786f7f4e21c16353ca7d1c559358a1f849b26 + md5: 165cbd1d80be88dafadeabfaae6fa588 + sha256: df01c5253bb5f8c68526c8bad92b8e832ed58a0d4c40d08a65c81c51821bc23d category: dev optional: true - name: json5 - version: 0.9.28 + version: 0.10.0 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.28-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.10.0-pyhd8ed1ab_0.conda hash: - md5: b5fd1ac9269dd22e003eaac27e249d97 - sha256: 402586e586761e0d51dd590fb71786f7f4e21c16353ca7d1c559358a1f849b26 + md5: 165cbd1d80be88dafadeabfaae6fa588 + sha256: df01c5253bb5f8c68526c8bad92b8e832ed58a0d4c40d08a65c81c51821bc23d category: dev optional: true - name: jsonpointer @@ -5583,7 +5583,7 @@ package: category: main optional: false - name: pydantic - version: 2.10.1 + version: 2.10.2 manager: conda platform: linux-64 dependencies: @@ -5592,14 +5592,14 @@ package: python: '>=3.9' typing-extensions: '>=4.6.1' typing_extensions: '>=4.12.2' - url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.1-pyh10f6f8f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.2-pyh3cfb1c2_0.conda hash: - md5: c15343c9dbdb30766a07e5b70e46c7d3 - sha256: b1872231d26ee3ded32bd1fe3ee1b3c7d9834ad72bf28aed70e5cd1235341584 + md5: e661b732b4d7514ace55a01873f03201 + sha256: 47368f0eeb63b2dd4c9c54ff35b216d01ae1c27b90d3c7a2066ef8e005f32103 category: main optional: false - name: pydantic - version: 2.10.1 + version: 2.10.2 manager: conda platform: win-64 dependencies: @@ -5608,10 +5608,10 @@ package: python: '>=3.9' typing-extensions: '>=4.6.1' typing_extensions: '>=4.12.2' - url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.1-pyh10f6f8f_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.10.2-pyh3cfb1c2_0.conda hash: - md5: c15343c9dbdb30766a07e5b70e46c7d3 - sha256: b1872231d26ee3ded32bd1fe3ee1b3c7d9834ad72bf28aed70e5cd1235341584 + md5: e661b732b4d7514ace55a01873f03201 + sha256: 47368f0eeb63b2dd4c9c54ff35b216d01ae1c27b90d3c7a2066ef8e005f32103 category: main optional: false - name: pydantic-core @@ -6041,27 +6041,27 @@ package: category: main optional: false - name: python-fastjsonschema - version: 2.20.0 + version: 2.21.0 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.0-pyhd8ed1ab_0.conda hash: - md5: b98d2018c01ce9980c03ee2850690fab - sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: 4c849126120d1b3d61cf0eac8120ea70 + sha256: 09ae0acccbfc325b9b65946795c0055e0a40374e4e73b264f3b7e8cd8ae0a95a category: dev optional: true - name: python-fastjsonschema - version: 2.20.0 + version: 2.21.0 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.0-pyhd8ed1ab_0.conda hash: - md5: b98d2018c01ce9980c03ee2850690fab - sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: 4c849126120d1b3d61cf0eac8120ea70 + sha256: 09ae0acccbfc325b9b65946795c0055e0a40374e4e73b264f3b7e8cd8ae0a95a category: dev optional: true - name: python-json-logger @@ -6559,10 +6559,10 @@ package: platform: linux-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda hash: - md5: 68d7d406366926b09a6a023e3d0f71d7 - sha256: eeec4645f70ce0ed03348397dced9d218a650a42df98592419af61d2689163ed + md5: fc80f7995e396cbaeabd23cf46c413dc + sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 category: main optional: false - name: setuptools @@ -6571,10 +6571,10 @@ package: platform: win-64 dependencies: python: '>=3.9' - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_0.conda + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.6.0-pyhff2d567_1.conda hash: - md5: 68d7d406366926b09a6a023e3d0f71d7 - sha256: eeec4645f70ce0ed03348397dced9d218a650a42df98592419af61d2689163ed + md5: fc80f7995e396cbaeabd23cf46c413dc + sha256: abb12e1dd515b13660aacb5d0fd43835bc2186cab472df25b7716cd65e095111 category: main optional: false - name: six @@ -7538,7 +7538,7 @@ package: category: main optional: false - name: tornado - version: 6.4.1 + version: 6.4.2 manager: conda platform: linux-64 dependencies: @@ -7546,14 +7546,14 @@ package: libgcc: '>=13' python: '>=3.11,<3.12.0a0' python_abi: 3.11.* - url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py311h9ecbd09_1.conda + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.2-py311h9ecbd09_0.conda hash: - md5: 616fed0b6f5c925250be779b05d1d7f7 - sha256: 21390d0c5708581959ebd89702433c1d06a56ddd834797a194b217f98e38df53 + md5: df3aee9c3e44489257a840b8354e77b9 + sha256: afa3489113154b5cb0724b0bf120b62df91f426dabfe5d02f2ba09e90d346b28 category: main optional: false - name: tornado - version: 6.4.1 + version: 6.4.2 manager: conda platform: win-64 dependencies: @@ -7562,10 +7562,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/tornado-6.4.1-py311he736701_1.conda + url: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.2-py311he736701_0.conda hash: - md5: f361535f90629358e3ea8f2161b239f3 - sha256: 8e448bc682a6540a0aadc1f821c0d60f03d70272350caa2af519316fd1753f68 + md5: 7e33077ce1bc0bf45c45a92e37432f16 + sha256: 7e313f1724e5eb7d13f7a1ebd6026a378f3f58a638ba7cdc3bd452c01323bb29 category: main optional: false - name: tqdm @@ -8384,12 +8384,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 hash: - sha256: a3384338d013434e761dcc392b63dd95ffc81988 + sha256: d925c0b9b418a7c8e4c80e18a04fff640d455f43 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 category: main optional: false - name: geoh5py @@ -8401,12 +8401,12 @@ package: numpy: '>=1.26.0,<1.27.0' pillow: '>=10.3.0,<10.4.0' pydantic: '>=2.5.2,<3.0.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 hash: - sha256: a3384338d013434e761dcc392b63dd95ffc81988 + sha256: d925c0b9b418a7c8e4c80e18a04fff640d455f43 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@a3384338d013434e761dcc392b63dd95ffc81988 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d925c0b9b418a7c8e4c80e18a04fff640d455f43 category: main optional: false - name: mira-simpeg diff --git a/simpeg_drivers-assets/uijson/sensitivity_cutoff.ui.json b/simpeg_drivers-assets/uijson/sensitivity_cutoff.ui.json index 3d1c340c..3729451f 100644 --- a/simpeg_drivers-assets/uijson/sensitivity_cutoff.ui.json +++ b/simpeg_drivers-assets/uijson/sensitivity_cutoff.ui.json @@ -37,6 +37,17 @@ "precision": 1, "lineEdit": true }, + "cutoff_method": { + "main": true, + "group": "Sensitivity", + "label": "Method", + "choiceList": [ + "percentile", + "percent", + "log_percent" + ], + "value": "percentile" + }, "mask_name": { "main": true, "label": "Name", diff --git a/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/driver.py b/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/driver.py index ea164b9c..6bf83b49 100644 --- a/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/driver.py +++ b/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/driver.py @@ -21,26 +21,75 @@ import numpy as np from geoapps_utils.driver.driver import BaseDriver from geoh5py.data import FloatData -from geoh5py.objects import Octree -from geoh5py.shared.utils import fetch_active_workspace -from .params import SensitivityCutoffParams +from simpeg_drivers.depth_of_investigation.sensitivity_cutoff.params import ( + SensitivityCutoffParams, +) logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) -def scale_sensitivity(sensitivity: FloatData) -> np.ndarray: +def lower_percentile_mask(data: np.ndarray, cutoff: float) -> np.ndarray: """ - Normalize sensitivity and convert to percentage. + Create mask for data to remove lower percentile values. - :param sensitivity: Sum squared sensitivity matrix. + :param data: Data. + :param cutoff: lower percentile below which the mask will filter values. """ - out = sensitivity.values.copy() - out *= 100 / np.nanmax(out) + finite_data = data[~np.isnan(data)] + cutoff_value = np.percentile(finite_data, cutoff) + mask = data > cutoff_value - return out + return mask + + +def lower_percent_mask(data: np.ndarray, cutoff: float, logspace=False) -> np.ndarray: + """ + Create mask for data to remove bottom ten percent of normalized values. + + :param data: Data. + :param cutoff: Data are normalized into the range [0, 100] so that the + cutoff value eliminates the bottom n percent of data. + :param logspace: Applies cutoff on log10(data). + """ + + if logspace: + data[data == 0] = np.nan + data = np.log10(data) + data -= np.nanmin(data) + + scaled_data = data * 100 / np.nanmax(data) + mask = scaled_data > cutoff + + return mask + + +def sensitivity_mask( + sensitivity: FloatData, cutoff: float, method: str = "percentile" +) -> np.ndarray: + """ + Create cutoff mask for one of 'percentile', 'percent', or 'log_percent' methods. + + :param sensitivity: Sensitivity data object. + :param cutoff: Cutoff value. + :param method: Cutoffs methods can be lower 'percentile', 'percent', or 'log_percent'. + """ + values = sensitivity.values.copy() + + if method == "percentile": + mask = lower_percentile_mask(values, cutoff) + elif method == "percent": + mask = lower_percent_mask(values, cutoff) + elif method == "log_percent": + mask = lower_percent_mask(values, cutoff, logspace=True) + else: + raise ValueError( + "Invalid method. Must be 'percentile', 'percent', or 'log_percent'." + ) + + return mask class SensitivityCutoffDriver(BaseDriver): @@ -59,17 +108,14 @@ def __init__(self, params: SensitivityCutoffParams): def run(self): logger.info("Scaling sensitivities . . .") - scaled_sensitivity = scale_sensitivity(self.params.sensitivity_model) + mask = sensitivity_mask( + self.params.sensitivity_model, + self.params.sensitivity_cutoff, + self.params.cutoff_method, + ) logger.info("Creating cutoff mask '%s'", self.params.mask_name) - cutoff_mask, normalized_sensitivities = self.params.mesh.add_data( - { - f"{self.params.mask_name}": { - "values": scaled_sensitivity > self.params.sensitivity_cutoff, - }, - f"{self.params.sensitivity_model.name}_normalized": { - "values": scaled_sensitivity - }, - } + cutoff_mask = self.params.mesh.add_data( + {f"{self.params.mask_name}": {"values": mask, "association": "CELL"}} ) self.update_monitoring_directory(self.params.mesh) diff --git a/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/params.py b/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/params.py index 35ed16c3..99aaa5b3 100644 --- a/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/params.py +++ b/simpeg_drivers/depth_of_investigation/sensitivity_cutoff/params.py @@ -51,6 +51,7 @@ class SensitivityCutoffParams(BaseData): mesh: Octree sensitivity_model: FloatData sensitivity_cutoff: float = 0.1 + cutoff_method: str = "percentile" mask_name: str | None = "Sensitivity Cutoff" @field_validator("mask_name") diff --git a/tests/depth_of_investigation_tests/sensitivity_cutoff_test.py b/tests/depth_of_investigation_tests/sensitivity_cutoff_test.py deleted file mode 100644 index 16651d80..00000000 --- a/tests/depth_of_investigation_tests/sensitivity_cutoff_test.py +++ /dev/null @@ -1,109 +0,0 @@ -# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -# Copyright (c) 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. -# -# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' - -import numpy as np -from geoh5py import Workspace -from geoh5py.objects import Points -from octree_creation_app.driver import OctreeDriver -from octree_creation_app.params import OctreeParams - -from simpeg_drivers.depth_of_investigation.sensitivity_cutoff.driver import ( - SensitivityCutoffDriver, - scale_sensitivity, -) -from simpeg_drivers.depth_of_investigation.sensitivity_cutoff.params import ( - SensitivityCutoffParams, -) - - -def generate_sensitivity(workspace: Workspace, depth_scaling=False): - x = np.linspace(-500, 500, 21) - y = np.array([-200, -100, 0, 100, 200]) - x_grid, y_grid = np.meshgrid(x, y) - vertices = np.c_[ - x_grid.flatten(), y_grid.flatten(), np.zeros_like(x_grid.flatten()) - ] - survey = Points.create(workspace, name="survey", vertices=vertices) - refinements = { - "Refinement A object": survey, - "Refinement A levels": "4, 4, 4", - "Refinement A horizon": False, - } - octree_params = OctreeParams( - geoh5=workspace, - objects=survey, - u_cell_size=25, - v_cell_size=25, - w_cell_size=25, - padding_distance=1000, - depth_core=500, - minimum_level=4, - diagonal_balance=True, - **refinements, - ) - mesh = OctreeDriver.octree_from_params(octree_params) - - values = np.ones(len(mesh.centroids)) - - if depth_scaling: - z = mesh.centroids[:, 2] - z += np.abs(z.min()) - values *= z - - sensitivity = mesh.add_data( - {"sensitivity": {"association": "Cell", "values": values}} - ) - return sensitivity - - -def test_scale_sensitivity(tmp_path): - ws = Workspace(tmp_path / "test.geoh5") - sensitivity = generate_sensitivity(ws) - validation = scale_sensitivity(sensitivity) - - assert np.allclose(validation, 100 * np.ones_like(validation)) - - -def test_driver(tmp_path): - """ - Explanation - ----------- - - The sensitivity we use scales with elevation and cell size. The program - rescales the sensitivities to remove the cell size bias leaving just the - elevation dependence. With a 10% cutoff, we can predict that the mask - will remove the cells with the lowest 10% of elevations. - """ - - ws = Workspace(tmp_path / "test.geoh5") - sensitivity = generate_sensitivity(ws, depth_scaling=True) - mesh = sensitivity.parent - params = SensitivityCutoffParams( - geoh5=mesh.workspace, - mesh=mesh, - sensitivity_model=sensitivity, - sensitivity_cutoff=10, - ) - driver = SensitivityCutoffDriver(params) - mask = driver.run() - - z = mesh.centroids[:, 2] - z_range = z.max() - z.min() - depth_cutoff = z.min() + (z_range * 0.1) - depth_mask = z >= depth_cutoff - mesh.add_data({"depth_mask": {"association": "Cell", "values": depth_mask}}) - assert np.allclose(depth_mask, mask.values) diff --git a/tests/depth_of_investivation_tests/sensitivity_cutoff_test.py b/tests/depth_of_investivation_tests/sensitivity_cutoff_test.py new file mode 100644 index 00000000..1bbcc71a --- /dev/null +++ b/tests/depth_of_investivation_tests/sensitivity_cutoff_test.py @@ -0,0 +1,72 @@ +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 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. +# +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +import numpy as np +import pytest +from geoh5py import Workspace +from geoh5py.objects import Points + +from simpeg_drivers.depth_of_investigation.sensitivity_cutoff.driver import ( + lower_percent_mask, + lower_percentile_mask, + sensitivity_mask, +) + + +def test_lower_percentile_mask(): + sensitivity = np.arange(200.0) + sensitivity[sensitivity > 100] = np.nan + cutoff = 10 + mask = lower_percentile_mask(sensitivity, cutoff) + assert np.sum(mask) == 90 + + +def test_lower_percent_mask(): + sensitivity = np.arange(200.0) + sensitivity[sensitivity > 100] = np.nan + cutoff = 10 + mask = lower_percent_mask(sensitivity, cutoff) + assert np.all(sensitivity[mask] > 10) + + +def test_lower_log_percent_mask(): + sensitivity = np.hstack([[0], np.logspace(-5, -1, 5), np.logspace(1, 7, 7)]) + sensitivity[sensitivity > 1e5] = np.nan + cutoff = 10 + mask = lower_percent_mask(sensitivity, cutoff, logspace=True) + assert np.all(sensitivity[mask] > 1e-4) + + +def test_sensitivity_mask(tmp_path): + ws = Workspace(tmp_path / "test.geoh5") + pts = Points.create(ws, name="test", vertices=np.random.randn(100, 3)) + data = pts.add_data({"sensitivity": {"values": np.random.randn(100)}}) + + assert np.all( + sensitivity_mask(sensitivity=data, cutoff=10, method="percentile") + == lower_percentile_mask(data.values, 10) + ) + assert np.all( + sensitivity_mask(sensitivity=data, cutoff=10, method="percent") + == lower_percent_mask(data.values, 10) + ) + assert np.all( + sensitivity_mask(sensitivity=data, cutoff=10, method="log_percent") + == lower_percent_mask(data.values, 10, logspace=True) + ) + with pytest.raises(ValueError, match="Invalid method. Must be 'percentile'"): + sensitivity_mask(sensitivity=data, cutoff=10, method="invalid_method") diff --git a/tests/run_tests/sensitivity_cutoff_test.py b/tests/run_tests/sensitivity_cutoff_test.py new file mode 100644 index 00000000..4d4f7cf5 --- /dev/null +++ b/tests/run_tests/sensitivity_cutoff_test.py @@ -0,0 +1,156 @@ +# '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# 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 + +from pathlib import Path + +import numpy as np +from geoh5py.workspace import Workspace + +from simpeg_drivers.depth_of_investigation.sensitivity_cutoff.driver import ( + SensitivityCutoffDriver, +) +from simpeg_drivers.depth_of_investigation.sensitivity_cutoff.params import ( + SensitivityCutoffParams, +) +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 setup_inversion_results( + tmp_path: Path, + n_grid_points=2, + refinement=(2,), +): + geoh5, mesh, 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, + ) + + # Run the inverse with save_sensitivities=True + gz = survey.add_data({"gz": {"values": np.random.randn(len(survey.vertices))}}) + params = GravityParams( + geoh5=geoh5, + mesh=mesh.uid, + topography_object=topography.uid, + data_object=gz.parent.uid, + starting_model=1e-4, + reference_model=0.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", + save_sensitivities=True, + ) + params.write_input_file(path=tmp_path, name="Inv_run") + GravityDriver.start(str(tmp_path / "Inv_run.ui.json")) + + +def test_sensitivity_percent_cutoff_run(tmp_path): + setup_inversion_results( + tmp_path, + n_grid_points=2, + refinement=(2,), + ) + + with Workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + sensitivity = geoh5.get_entity("Iteration_1_sensitivities")[0] + mesh = sensitivity.parent + params = SensitivityCutoffParams( + geoh5=geoh5, + mesh=mesh, + sensitivity_model=sensitivity, + sensitivity_cutoff=1, + cutoff_method="percent", + mask_name="5 percent cutoff", + ) + params.write_ui_json(path=tmp_path / "sensitivity_cutoff_percent") + + SensitivityCutoffDriver.start(str(tmp_path / "sensitivity_cutoff_percent.ui.json")) + with Workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + mask = geoh5.get_entity("5 percent cutoff")[0] + assert mask.values.sum() == 1355 + + +def test_sensitivity_cutoff_percentile_run(tmp_path): + setup_inversion_results( + tmp_path, + n_grid_points=2, + refinement=(2,), + ) + + with Workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + sensitivity = geoh5.get_entity("Iteration_1_sensitivities")[0] + mesh = sensitivity.parent + params = SensitivityCutoffParams( + geoh5=geoh5, + mesh=mesh, + sensitivity_model=sensitivity, + sensitivity_cutoff=1, + cutoff_method="percentile", + mask_name="5 percentile cutoff", + ) + params.write_ui_json(path=tmp_path / "sensitivity_cutoff_percentile") + + SensitivityCutoffDriver.start( + str(tmp_path / "sensitivity_cutoff_percentile.ui.json") + ) + with Workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + mask = geoh5.get_entity("5 percentile cutoff")[0] + assert mask.values.sum() == 22861 + + +def test_sensitivity_cutoff_log_percent_run(tmp_path): + setup_inversion_results( + tmp_path, + n_grid_points=2, + refinement=(2,), + ) + + with Workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + sensitivity = geoh5.get_entity("Iteration_1_sensitivities")[0] + mesh = sensitivity.parent + params = SensitivityCutoffParams( + geoh5=geoh5, + mesh=mesh, + sensitivity_model=sensitivity, + sensitivity_cutoff=1, + cutoff_method="log_percent", + mask_name="5 percent log cutoff", + ) + params.write_ui_json(path=tmp_path / "sensitivity_cutoff_log_percent") + + SensitivityCutoffDriver.start( + str(tmp_path / "sensitivity_cutoff_log_percent.ui.json") + ) + with Workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + mask = geoh5.get_entity("5 percent log cutoff")[0] + assert mask.values.sum() == 23144