diff --git a/environments/py-3.12-linux-64-dev.conda.lock.yml b/environments/py-3.12-linux-64-dev.conda.lock.yml index 61690e41f..ceb8c4023 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -10,7 +10,7 @@ dependencies: - _python_abi3_support=1.0=hd8ed1ab_3 - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.8.0=pyhd8ed1ab_0 - - anyio=4.15.0=pyh5ded981_0 + - anyio=4.15.1=pyh5ded981_1 - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=26.1.0=py312h5cc1888_1 - arrow=1.4.0=pyhcf101f3_0 @@ -45,7 +45,7 @@ dependencies: - certifi=2026.7.22=pyhd8ed1ab_0 - cffi=2.1.1=py312h703531f_3 - charset-normalizer=3.5.1=pyhd8ed1ab_0 - - click=8.4.2=pyhc90fa1f_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 @@ -100,7 +100,7 @@ dependencies: - jsonschema-specifications=2025.9.1=pyhcf101f3_0 - jsonschema-with-format-nongpl=4.26.0=hcf101f3_1 - jupyter-book=2.1.6=pyhcf101f3_0 - - jupyter-builder=1.2.2=pyhcf101f3_0 + - jupyter-builder=1.2.3=pyh5ded981_0 - jupyter-lsp=2.3.1=pyhcf101f3_0 - jupyter_client=8.10.0=pyhcf101f3_0 - jupyter_core=5.9.1=pyhc90fa1f_0 @@ -163,7 +163,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_3 - - llvm-openmp=23.1.0=h7148c6a_0 + - llvm-openmp=23.1.1=h7148c6a_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.2.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h8a5da7c_1 @@ -206,7 +206,7 @@ dependencies: - pexpect=4.9.0=pyhd8ed1ab_1 - pillow=12.3.0=py312h38079b3_1 - pip=26.2.1=pyh8b19718_0 - - platformdirs=4.11.6=pyh5ded981_0 + - platformdirs=4.11.8=pyh5ded981_0 - pluggy=1.6.0=pyhf9edf01_1 - prometheus_client=0.26.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.53=pyha770c72_0 @@ -264,7 +264,7 @@ dependencies: - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1 - sphinxcontrib-serializinghtml=2.0.0=pyhd8ed1ab_0 - stack_data=0.6.3=pyhd8ed1ab_1 - - tbb=2023.0.0=hab88423_2 + - tbb=2023.1.0=hfd44327_0 - tblib=3.2.2=pyhcf101f3_0 - terminado=0.18.1=pyhc90fa1f_1 - threadpoolctl=3.6.0=pyhecae5ae_0 @@ -292,9 +292,9 @@ dependencies: - wheel=0.48.0=pyhd8ed1ab_0 - widgetsnbextension=3.6.10=pyhd8ed1ab_0 - wrapt=2.4.0=py312h1b36aeb_0 - - xorg-libxau=1.0.12=hb03c661_2 + - xorg-libxau=1.0.12=h7cc23a3_2 - xorg-libxdmcp=1.1.5=hb03c661_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=hebe6cf0_3 - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h09e67af_11 @@ -304,8 +304,8 @@ dependencies: - zlib-ng=2.3.3=hce19668_1 - zstd=1.5.7=hb78ec9c_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index c17b7ab64..be928d80a 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -28,7 +28,7 @@ dependencies: - ca-certificates=2026.7.22=hbd8a1cb_0 - cached-property=2.0.1=pyhcf101f3_0 - cached_property=2.0.1=pyhcf101f3_0 - - click=8.4.2=pyhc90fa1f_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - contourpy=1.3.3=py312h0a2e395_4 - cycler=0.12.1=pyhcf101f3_2 @@ -100,7 +100,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_3 - - llvm-openmp=23.1.0=h7148c6a_0 + - llvm-openmp=23.1.1=h7148c6a_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h8a5da7c_1 - matplotlib-base=3.10.9=py312he3d6523_0 @@ -146,7 +146,7 @@ dependencies: - setuptools=84.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - - tbb=2023.0.0=hab88423_2 + - tbb=2023.1.0=hfd44327_0 - tblib=3.2.2=pyhcf101f3_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=noxft_h1df4ec4_4 @@ -162,9 +162,9 @@ dependencies: - urllib3=2.7.0=pyhd8ed1ab_0 - wheel=0.48.0=pyhd8ed1ab_0 - wrapt=2.4.0=py312h1b36aeb_0 - - xorg-libxau=1.0.12=hb03c661_2 + - xorg-libxau=1.0.12=h7cc23a3_2 - xorg-libxdmcp=1.1.5=hb03c661_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=hebe6cf0_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 @@ -172,8 +172,8 @@ dependencies: - zlib-ng=2.3.3=hce19668_1 - zstd=1.5.7=hb78ec9c_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.12-win-64-dev.conda.lock.yml b/environments/py-3.12-win-64-dev.conda.lock.yml index 312cf4fd0..083880bbb 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -10,7 +10,7 @@ dependencies: - _python_abi3_support=1.0=hd8ed1ab_3 - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.8.0=pyhd8ed1ab_0 - - anyio=4.15.0=pyh5ded981_0 + - anyio=4.15.1=pyh5ded981_1 - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=26.1.0=py312he06e257_1 - arrow=1.4.0=pyhcf101f3_0 @@ -44,7 +44,7 @@ dependencies: - certifi=2026.7.22=pyhd8ed1ab_0 - cffi=2.1.1=py312he06e257_3 - charset-normalizer=3.5.1=pyhd8ed1ab_0 - - click=8.4.2=pyh6dadd2b_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 @@ -99,7 +99,7 @@ dependencies: - jsonschema-specifications=2025.9.1=pyhcf101f3_0 - jsonschema-with-format-nongpl=4.26.0=hcf101f3_1 - jupyter-book=2.1.6=pyhcf101f3_0 - - jupyter-builder=1.2.2=pyhcf101f3_0 + - jupyter-builder=1.2.3=pyh5ded981_0 - jupyter-lsp=2.3.1=pyhcf101f3_0 - jupyter_client=8.10.0=pyhcf101f3_0 - jupyter_core=5.9.1=pyh6dadd2b_0 @@ -147,10 +147,10 @@ dependencies: - libwebp-base=1.6.0=h4d5522a_1 - libwinpthread=12.0.0.r4.gg4f2fc60ca=h11686cb_11 - libxcb=1.17.0=h874e120_2 - - libxml2=2.15.3=h8ef44ab_1 - - libxml2-16=2.15.3=h3cfd58e_1 + - libxml2=2.15.4=he095d88_0 + - libxml2-16=2.15.4=h3cfd58e_0 - libzlib=1.3.2=hfd05255_3 - - llvm-openmp=23.1.0=h49e36cd_0 + - llvm-openmp=23.1.1=h49e36cd_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.2.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h05f76fc_1 @@ -171,7 +171,7 @@ dependencies: - nbconvert-pandoc=7.16.6=h7d6f222_1 - nbformat=5.11.1=pyhcf101f3_0 - nest-asyncio2=1.7.2=pyhcf101f3_0 - - nodejs=26.8.0=h80d1838_1 + - nodejs=26.8.1=h80d1838_1 - notebook=7.6.2=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py312hc128f0a_1 @@ -189,7 +189,7 @@ dependencies: - partd=1.4.2=pyhd8ed1ab_0 - pillow=12.3.0=py312h31f0997_1 - pip=26.2.1=pyh8b19718_0 - - platformdirs=4.11.6=pyh5ded981_0 + - platformdirs=4.11.8=pyh5ded981_0 - pluggy=1.6.0=pyhf9edf01_1 - prometheus_client=0.26.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.53=pyha770c72_0 @@ -246,7 +246,7 @@ dependencies: - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1 - sphinxcontrib-serializinghtml=2.0.0=pyhd8ed1ab_0 - stack_data=0.6.3=pyhd8ed1ab_1 - - tbb=2023.0.0=hd3d4ead_2 + - tbb=2023.1.0=hdcfe883_0 - tblib=3.2.2=pyhcf101f3_0 - terminado=0.18.1=pyh6dadd2b_1 - threadpoolctl=3.6.0=pyhecae5ae_0 @@ -280,9 +280,9 @@ dependencies: - win_inet_pton=1.1.0=pyh7428d3b_8 - winpty=0.4.3=4 - wrapt=2.4.0=py312he5662c2_0 - - xorg-libxau=1.0.12=hba3369d_2 + - xorg-libxau=1.0.12=hfa92662_2 - xorg-libxdmcp=1.1.5=hba3369d_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3a581c9_11 @@ -292,8 +292,8 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index a87d01121..df1014405 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -27,7 +27,7 @@ dependencies: - ca-certificates=2026.7.22=h4c7d964_0 - cached-property=2.0.1=pyhcf101f3_0 - cached_property=2.0.1=pyhcf101f3_0 - - click=8.4.2=pyh6dadd2b_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.3=py312h78d62e6_4 @@ -86,10 +86,10 @@ dependencies: - libwebp-base=1.6.0=h4d5522a_1 - libwinpthread=12.0.0.r4.gg4f2fc60ca=h11686cb_11 - libxcb=1.17.0=h874e120_2 - - libxml2=2.15.3=h8ef44ab_1 - - libxml2-16=2.15.3=h3cfd58e_1 + - libxml2=2.15.4=he095d88_0 + - libxml2-16=2.15.4=h3cfd58e_0 - libzlib=1.3.2=hfd05255_3 - - llvm-openmp=23.1.0=h49e36cd_0 + - llvm-openmp=23.1.1=h49e36cd_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py312h05f76fc_1 - matplotlib-base=3.10.9=py312h0ebf65c_0 @@ -130,7 +130,7 @@ dependencies: - setuptools=84.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - - tbb=2023.0.0=hd3d4ead_2 + - tbb=2023.1.0=hdcfe883_0 - tblib=3.2.2=pyhcf101f3_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=h967ab96_4 @@ -151,9 +151,9 @@ dependencies: - wheel=0.48.0=pyhd8ed1ab_0 - win_inet_pton=1.1.0=pyh7428d3b_8 - wrapt=2.4.0=py312he5662c2_0 - - xorg-libxau=1.0.12=hba3369d_2 + - xorg-libxau=1.0.12=hfa92662_2 - xorg-libxdmcp=1.1.5=hba3369d_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 @@ -162,8 +162,8 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.13-linux-64-dev.conda.lock.yml b/environments/py-3.13-linux-64-dev.conda.lock.yml index a5f245e86..d148a10df 100644 --- a/environments/py-3.13-linux-64-dev.conda.lock.yml +++ b/environments/py-3.13-linux-64-dev.conda.lock.yml @@ -10,7 +10,7 @@ dependencies: - _python_abi3_support=1.0=hd8ed1ab_3 - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.8.0=pyhd8ed1ab_0 - - anyio=4.15.0=pyh5ded981_0 + - anyio=4.15.1=pyh5ded981_1 - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=26.1.0=py313h995f894_1 - arrow=1.4.0=pyhcf101f3_0 @@ -45,7 +45,7 @@ dependencies: - certifi=2026.7.22=pyhd8ed1ab_0 - cffi=2.1.1=py313ha52865f_3 - charset-normalizer=3.5.1=pyhd8ed1ab_0 - - click=8.4.2=pyhc90fa1f_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 @@ -100,7 +100,7 @@ dependencies: - jsonschema-specifications=2025.9.1=pyhcf101f3_0 - jsonschema-with-format-nongpl=4.26.0=hcf101f3_1 - jupyter-book=2.1.6=pyhcf101f3_0 - - jupyter-builder=1.2.2=pyhcf101f3_0 + - jupyter-builder=1.2.3=pyh5ded981_0 - jupyter-lsp=2.3.1=pyhcf101f3_0 - jupyter_client=8.10.0=pyhcf101f3_0 - jupyter_core=5.9.1=pyhc90fa1f_0 @@ -162,7 +162,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_3 - - llvm-openmp=23.1.0=h7148c6a_0 + - llvm-openmp=23.1.1=h7148c6a_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.2.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313h3dea7bd_1 @@ -205,7 +205,7 @@ dependencies: - pexpect=4.9.0=pyhd8ed1ab_1 - pillow=12.3.0=py313h3b26573_1 - pip=26.2.1=pyh145f28c_0 - - platformdirs=4.11.6=pyh5ded981_0 + - platformdirs=4.11.8=pyh5ded981_0 - pluggy=1.6.0=pyhf9edf01_1 - prometheus_client=0.26.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.53=pyha770c72_0 @@ -262,7 +262,7 @@ dependencies: - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1 - sphinxcontrib-serializinghtml=2.0.0=pyhd8ed1ab_0 - stack_data=0.6.3=pyhd8ed1ab_1 - - tbb=2023.0.0=hab88423_2 + - tbb=2023.1.0=hfd44327_0 - tblib=3.2.2=pyhcf101f3_0 - terminado=0.18.1=pyhc90fa1f_1 - threadpoolctl=3.6.0=pyhecae5ae_0 @@ -288,9 +288,9 @@ dependencies: - websocket-client=1.9.2=pyh5ded981_1 - widgetsnbextension=3.6.10=pyhd8ed1ab_0 - wrapt=2.4.0=py313hd42f317_0 - - xorg-libxau=1.0.12=hb03c661_2 + - xorg-libxau=1.0.12=h7cc23a3_2 - xorg-libxdmcp=1.1.5=hb03c661_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=hebe6cf0_3 - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h09e67af_11 @@ -300,8 +300,8 @@ dependencies: - zlib-ng=2.3.3=hce19668_1 - zstd=1.5.7=hb78ec9c_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.13-linux-64.conda.lock.yml b/environments/py-3.13-linux-64.conda.lock.yml index ff8517a74..5856db7be 100644 --- a/environments/py-3.13-linux-64.conda.lock.yml +++ b/environments/py-3.13-linux-64.conda.lock.yml @@ -28,7 +28,7 @@ dependencies: - ca-certificates=2026.7.22=hbd8a1cb_0 - cached-property=2.0.1=pyhcf101f3_0 - cached_property=2.0.1=pyhcf101f3_0 - - click=8.4.2=pyhc90fa1f_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - contourpy=1.3.3=py313hc8edb43_4 - cycler=0.12.1=pyhcf101f3_2 @@ -99,7 +99,7 @@ dependencies: - libxml2=2.15.1=h26afc86_0 - libxml2-16=2.15.1=ha9997c6_0 - libzlib=1.3.2=h25fd6f3_3 - - llvm-openmp=23.1.0=h7148c6a_0 + - llvm-openmp=23.1.1=h7148c6a_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313h3dea7bd_1 - matplotlib-base=3.10.9=py313h683a580_0 @@ -144,7 +144,7 @@ dependencies: - scipy=1.17.1=py313h4b8bb8b_1 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - - tbb=2023.0.0=hab88423_2 + - tbb=2023.1.0=hfd44327_0 - tblib=3.2.2=pyhcf101f3_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=noxft_h1df4ec4_4 @@ -158,9 +158,9 @@ dependencies: - tzdata=2026c=h151e31d_0 - urllib3=2.7.0=pyhd8ed1ab_0 - wrapt=2.4.0=py313hd42f317_0 - - xorg-libxau=1.0.12=hb03c661_2 + - xorg-libxau=1.0.12=h7cc23a3_2 - xorg-libxdmcp=1.1.5=hb03c661_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=hebe6cf0_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 @@ -168,8 +168,8 @@ dependencies: - zlib-ng=2.3.3=hce19668_1 - zstd=1.5.7=hb78ec9c_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.13-win-64-dev.conda.lock.yml b/environments/py-3.13-win-64-dev.conda.lock.yml index ee66f17e0..81286f1d5 100644 --- a/environments/py-3.13-win-64-dev.conda.lock.yml +++ b/environments/py-3.13-win-64-dev.conda.lock.yml @@ -10,7 +10,7 @@ dependencies: - _python_abi3_support=1.0=hd8ed1ab_3 - alabaster=0.7.16=pyhd8ed1ab_0 - annotated-types=0.8.0=pyhd8ed1ab_0 - - anyio=4.15.0=pyh5ded981_0 + - anyio=4.15.1=pyh5ded981_1 - argon2-cffi=25.1.0=pyhd8ed1ab_0 - argon2-cffi-bindings=26.1.0=py313h5ea7bf4_1 - arrow=1.4.0=pyhcf101f3_0 @@ -44,7 +44,7 @@ dependencies: - certifi=2026.7.22=pyhd8ed1ab_0 - cffi=2.1.1=py313h5ea7bf4_3 - charset-normalizer=3.5.1=pyhd8ed1ab_0 - - click=8.4.2=pyh6dadd2b_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - comm=0.2.3=pyhe01879c_0 @@ -99,7 +99,7 @@ dependencies: - jsonschema-specifications=2025.9.1=pyhcf101f3_0 - jsonschema-with-format-nongpl=4.26.0=hcf101f3_1 - jupyter-book=2.1.6=pyhcf101f3_0 - - jupyter-builder=1.2.2=pyhcf101f3_0 + - jupyter-builder=1.2.3=pyh5ded981_0 - jupyter-lsp=2.3.1=pyhcf101f3_0 - jupyter_client=8.10.0=pyhcf101f3_0 - jupyter_core=5.9.1=pyh6dadd2b_0 @@ -148,10 +148,10 @@ dependencies: - libwebp-base=1.6.0=h4d5522a_1 - libwinpthread=12.0.0.r4.gg4f2fc60ca=h11686cb_11 - libxcb=1.17.0=h874e120_2 - - libxml2=2.15.3=h8ef44ab_1 - - libxml2-16=2.15.3=h3cfd58e_1 + - libxml2=2.15.4=he095d88_0 + - libxml2-16=2.15.4=h3cfd58e_0 - libzlib=1.3.2=hfd05255_3 - - llvm-openmp=23.1.0=h49e36cd_0 + - llvm-openmp=23.1.1=h49e36cd_0 - locket=1.0.0=pyhd8ed1ab_0 - markdown-it-py=4.2.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313hd650c13_1 @@ -172,7 +172,7 @@ dependencies: - nbconvert-pandoc=7.16.6=h7d6f222_1 - nbformat=5.11.1=pyhcf101f3_0 - nest-asyncio2=1.7.2=pyhcf101f3_0 - - nodejs=26.8.0=h80d1838_1 + - nodejs=26.8.1=h80d1838_1 - notebook=7.6.2=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py313hc90dcd4_1 @@ -190,7 +190,7 @@ dependencies: - partd=1.4.2=pyhd8ed1ab_0 - pillow=12.3.0=py313h38f99e1_1 - pip=26.2.1=pyh145f28c_0 - - platformdirs=4.11.6=pyh5ded981_0 + - platformdirs=4.11.8=pyh5ded981_0 - pluggy=1.6.0=pyhf9edf01_1 - prometheus_client=0.26.0=pyhd8ed1ab_0 - prompt-toolkit=3.0.53=pyha770c72_0 @@ -246,7 +246,7 @@ dependencies: - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1 - sphinxcontrib-serializinghtml=2.0.0=pyhd8ed1ab_0 - stack_data=0.6.3=pyhd8ed1ab_1 - - tbb=2023.0.0=hd3d4ead_2 + - tbb=2023.1.0=hdcfe883_0 - tblib=3.2.2=pyhcf101f3_0 - terminado=0.18.1=pyh6dadd2b_1 - threadpoolctl=3.6.0=pyhecae5ae_0 @@ -278,9 +278,9 @@ dependencies: - win_inet_pton=1.1.0=pyh7428d3b_8 - winpty=0.4.3=4 - wrapt=2.4.0=py313h5fd188c_0 - - xorg-libxau=1.0.12=hba3369d_2 + - xorg-libxau=1.0.12=hfa92662_2 - xorg-libxdmcp=1.1.5=hba3369d_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h3a581c9_11 @@ -290,8 +290,8 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/environments/py-3.13-win-64.conda.lock.yml b/environments/py-3.13-win-64.conda.lock.yml index e2a497893..0af94b8e5 100644 --- a/environments/py-3.13-win-64.conda.lock.yml +++ b/environments/py-3.13-win-64.conda.lock.yml @@ -27,7 +27,7 @@ dependencies: - ca-certificates=2026.7.22=h4c7d964_0 - cached-property=2.0.1=pyhcf101f3_0 - cached_property=2.0.1=pyhcf101f3_0 - - click=8.4.2=pyh6dadd2b_0 + - click=8.5.0=pyh5ded981_0 - cloudpickle=3.1.2=pyhcf101f3_1 - colorama=0.4.6=pyhd8ed1ab_1 - contourpy=1.3.3=py313h1a38498_4 @@ -87,10 +87,10 @@ dependencies: - libwebp-base=1.6.0=h4d5522a_1 - libwinpthread=12.0.0.r4.gg4f2fc60ca=h11686cb_11 - libxcb=1.17.0=h874e120_2 - - libxml2=2.15.3=h8ef44ab_1 - - libxml2-16=2.15.3=h3cfd58e_1 + - libxml2=2.15.4=he095d88_0 + - libxml2-16=2.15.4=h3cfd58e_0 - libzlib=1.3.2=hfd05255_3 - - llvm-openmp=23.1.0=h49e36cd_0 + - llvm-openmp=23.1.1=h49e36cd_0 - locket=1.0.0=pyhd8ed1ab_0 - markupsafe=3.0.3=py313hd650c13_1 - matplotlib-base=3.10.9=py313he1ded55_0 @@ -130,7 +130,7 @@ dependencies: - scipy=1.17.1=py313he51e9a2_1 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 - - tbb=2023.0.0=hd3d4ead_2 + - tbb=2023.1.0=hdcfe883_0 - tblib=3.2.2=pyhcf101f3_0 - threadpoolctl=3.6.0=pyhecae5ae_0 - tk=8.6.13=h967ab96_4 @@ -149,9 +149,9 @@ dependencies: - vcomp14=14.51.36247=habf1de7_41 - win_inet_pton=1.1.0=pyh7428d3b_8 - wrapt=2.4.0=py313h5fd188c_0 - - xorg-libxau=1.0.12=hba3369d_2 + - xorg-libxau=1.0.12=hfa92662_2 - xorg-libxdmcp=1.1.5=hba3369d_2 - - xyzservices=2026.3.0=pyhd8ed1ab_0 + - xyzservices=2026.9.1=pyhd8ed1ab_0 - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 @@ -160,8 +160,8 @@ dependencies: - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_7 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@32b32031020ddf26fde40b2da817c14b9d8b86e9 - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@54e7b09e58ffa63ee0cdad1b811df8225aafcfb1 diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index da3df344b..c1a5875da 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -131,33 +131,31 @@ package: category: main optional: false - name: anyio - version: 4.15.0 + version: 4.15.1 manager: conda platform: linux-64 dependencies: - exceptiongroup: '>=1.0.2' idna: '>=2.8' python: '' - typing_extensions: '>=4.5' - url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.0-pyh5ded981_0.conda + typing_extensions: '>=4.16.0' + url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda hash: - md5: 28190db0e223089024a41b06c11af36e - sha256: 35fefb7c4bc39bca28d8764b4f59bd7b739c47e3af8e5e20ee22621db0c594b3 + md5: 33cdc5ba7c481b371f08f88e6c048c55 + sha256: fc25a84c9c1ad4b48c136ad2363100e8b0faa3b0ab8985e61c9c8fa0b3431945 category: dev optional: true - name: anyio - version: 4.15.0 + version: 4.15.1 manager: conda platform: win-64 dependencies: - exceptiongroup: '>=1.0.2' idna: '>=2.8' python: '' - typing_extensions: '>=4.5' - url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.0-pyh5ded981_0.conda + typing_extensions: '>=4.16.0' + url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda hash: - md5: 28190db0e223089024a41b06c11af36e - sha256: 35fefb7c4bc39bca28d8764b4f59bd7b739c47e3af8e5e20ee22621db0c594b3 + md5: 33cdc5ba7c481b371f08f88e6c048c55 + sha256: fc25a84c9c1ad4b48c136ad2363100e8b0faa3b0ab8985e61c9c8fa0b3431945 category: dev optional: true - name: argon2-cffi @@ -1131,30 +1129,27 @@ package: category: dev optional: true - name: click - version: 8.4.2 + version: 8.5.0 manager: conda platform: linux-64 dependencies: - __unix: '' - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda hash: - md5: 2c4bd6aeb90bb157456841c3270a0d92 - sha256: ccc4787f511964f9a1f2d2d2859c91c5d571fb60f7f09d4c4e092c9b7a94e671 + md5: dea5b13a211bbf99876deb980b408a66 + sha256: 9afb0c2c089330321a219c7ee5a25313bd574d4024be606cbb33e7a5735df662 category: main optional: false - name: click - version: 8.4.2 + version: 8.5.0 manager: conda platform: win-64 dependencies: - __win: '' - colorama: '' python: '' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.4.2-pyh6dadd2b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda hash: - md5: 8a0d65027e25e367f9f1754f0604e8de - sha256: 5b5c96afdd801dd9c3b78ebc2cd9a9f3ce34186257415d394dde1aa8468aa3c0 + md5: dea5b13a211bbf99876deb980b408a66 + sha256: 9afb0c2c089330321a219c7ee5a25313bd574d4024be606cbb33e7a5735df662 category: main optional: false - name: cloudpickle @@ -2769,7 +2764,7 @@ package: category: dev optional: true - name: jupyter-builder - version: 1.2.2 + version: 1.2.3 manager: conda platform: linux-64 dependencies: @@ -2777,14 +2772,14 @@ package: python: '' tomli: '' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.3-pyh5ded981_0.conda hash: - md5: 9672806e67ea8b09a61408597a418e20 - sha256: 46777dd25ae623f960ec9ed9eae44cc7f96f371f3bc96f85d3ebf95737bd4e88 + md5: bac0e43cada154f38a627bde5e7e6016 + sha256: 3eba9c6b859a217ad8de382d1af76983611c221364a059bfd379f2f09dd663ef category: dev optional: true - name: jupyter-builder - version: 1.2.2 + version: 1.2.3 manager: conda platform: win-64 dependencies: @@ -2792,10 +2787,10 @@ package: python: '' tomli: '' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.3-pyh5ded981_0.conda hash: - md5: 9672806e67ea8b09a61408597a418e20 - sha256: 46777dd25ae623f960ec9ed9eae44cc7f96f371f3bc96f85d3ebf95737bd4e88 + md5: bac0e43cada154f38a627bde5e7e6016 + sha256: 3eba9c6b859a217ad8de382d1af76983611c221364a059bfd379f2f09dd663ef category: dev optional: true - name: jupyter-lsp @@ -4401,22 +4396,22 @@ package: category: main optional: false - name: libxml2 - version: 2.15.3 + version: 2.15.4 manager: conda platform: win-64 dependencies: icu: '>=78.3,<79.0a0' libiconv: '>=1.18,<2.0a0' liblzma: '>=5.8.3,<6.0a0' - libxml2-16: 2.15.3 + libxml2-16: 2.15.4 libzlib: '>=1.3.2,<2.0a0' ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/libxml2-2.15.4-he095d88_0.conda hash: - md5: 45a5a1c709a69f14cf176220788d18a9 - sha256: a83e9adcf7c50f20289dc6890707c8e4e84151b4204b0f7344998138807458d1 + md5: 3ce54d0f8f24dfab99d82414411640aa + sha256: a19bb3821830f6b1281e782844d5dd265f796dfed2e4812b16c9995a8c778c88 category: main optional: false - name: libxml2-16 @@ -4437,7 +4432,7 @@ package: category: main optional: false - name: libxml2-16 - version: 2.15.3 + version: 2.15.4 manager: conda platform: win-64 dependencies: @@ -4448,10 +4443,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/libxml2-16-2.15.4-h3cfd58e_0.conda hash: - md5: 6e7dadff3f3bde2d29d29a3ec34f2d58 - sha256: 8163de24a7ddb4ebf9587c3a45ba950caf3690b9646b76f007ca15e6e52b5881 + md5: bab5489f4bd38494ffaa83d6ab924c1f + sha256: 9fa71cec30425c9cc8eda6af3574af1faf4fefa5e239c9e037b1f778ef3ce8ac category: main optional: false - name: libzlib @@ -4481,29 +4476,29 @@ package: category: main optional: false - name: llvm-openmp - version: 23.1.0 + version: 23.1.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-23.1.0-h7148c6a_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-23.1.1-h7148c6a_0.conda hash: - md5: 58b4529023435973ab911c3c51892671 - sha256: b6fa85a30cceca3ad7a811ab34f842b9c2ae9d9d4c520e084b62b2abe50e9a70 + md5: d976d1fcca0f3c861f02aff9fb95508f + sha256: 4d6dab4691baec13109bc251506a74da448340b6a5de92de30563871105f8e7c category: main optional: false - name: llvm-openmp - version: 23.1.0 + version: 23.1.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-23.1.0-h49e36cd_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-23.1.1-h49e36cd_0.conda hash: - md5: 79055ec79e1b43749763122cead30976 - sha256: f9658ec83a6744f38e2b8188c76e1c2dea2614f5aa0e14d9d274b19f60646b8c + md5: f895db3df946e742c3ce07cfce271bdd + sha256: 49b0967e84eae82cc2acaf4400629c7b9c08a491b9c8d3343f3f5f2feee7138d category: main optional: false - name: locket @@ -5177,14 +5172,14 @@ package: category: dev optional: true - name: nodejs - version: 26.8.0 + version: 26.8.1 manager: conda platform: win-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/win-64/nodejs-26.8.0-h80d1838_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/nodejs-26.8.1-h80d1838_1.conda hash: - md5: 786fbc873be1ca0d9e5f1a66c5de1f18 - sha256: dde0723015f908149905e353f69ee2d380e7810fa2d0d46203ea3fa1bfd85901 + md5: dbac9bb103c17d1318589036f1862dfe + sha256: 6c3d7797fe9855375e160ce6acf4ef076f41cb02b4b92c8b768326da303b5348 category: dev optional: true - name: notebook @@ -5725,27 +5720,27 @@ package: category: main optional: false - name: platformdirs - version: 4.11.6 + version: 4.11.8 manager: conda platform: linux-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.8-pyh5ded981_0.conda hash: - md5: fb0f75910f804de1d8c6e91f73673d11 - sha256: 8fe66c78f015fecfe096e4ff78a2626c4d926cde9b6951cf3b8e1ff0aaeb0a6c + md5: 48e9ecf08b0578a4313f13b2e2b0fd72 + sha256: 8cbae1fed8437e63c9bcc691927402edb3809fccb26b15eb095df7dd2eb73e5f category: dev optional: true - name: platformdirs - version: 4.11.6 + version: 4.11.8 manager: conda platform: win-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.8-pyh5ded981_0.conda hash: - md5: fb0f75910f804de1d8c6e91f73673d11 - sha256: 8fe66c78f015fecfe096e4ff78a2626c4d926cde9b6951cf3b8e1ff0aaeb0a6c + md5: 48e9ecf08b0578a4313f13b2e2b0fd72 + sha256: 8cbae1fed8437e63c9bcc691927402edb3809fccb26b15eb095df7dd2eb73e5f category: dev optional: true - name: pluggy @@ -7403,22 +7398,22 @@ package: category: dev optional: true - name: tbb - version: 2023.0.0 + version: 2023.1.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - libgcc: '>=14' + libgcc: '>=15' libhwloc: '>=2.13.0,<2.13.1.0a0' - libstdcxx: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + libstdcxx: '>=15' + url: https://repo.prefix.dev/conda-forge/linux-64/tbb-2023.1.0-hfd44327_0.conda hash: - md5: 7073b15f9364ebc118998601ac6ca6a6 - sha256: 30cb9355c2fefc20ff1a3d6566b9714d5614086a2524c07721fc344eb20515ae + md5: b17ef6c181922df16e9b1330fd00fe85 + sha256: ea35780ec77e2431bcfc193e75ddcc3ec1ae79a34464469b0b2186d93035c9e7 category: main optional: false - name: tbb - version: 2023.0.0 + version: 2023.1.0 manager: conda platform: win-64 dependencies: @@ -7426,10 +7421,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/tbb-2023.1.0-hdcfe883_0.conda hash: - md5: 8ee01a693aecff5432069eaaf1183c45 - sha256: 8a4053839b8e997a5965e2dff7d6cf3c77be62d82c0e48c8a04a5ed2d2e73035 + md5: 8b1275f06705cdc2ab67f3bfdf4df843 + sha256: 7a65accbe954d0304b9056005f59fbee8b3928ceced38b1e3e8272aa1af0b750 category: main optional: false - name: tblib @@ -8208,11 +8203,11 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_2.conda + libgcc: '>=15' + url: https://repo.prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda hash: - md5: f06ef439c280a5f90b8bf62355008dbc - sha256: cbf891f6cc1a859347680af1c8562bc6b033bf182a2a3bb536016932be3206de + md5: da33efee1a93603d92e06d4a2b68def6 + sha256: 3ec065b94554dc48a4ca582a960a5484bc166b26e83ce0954653e08d17e8bd53 category: main optional: false - name: xorg-libxau @@ -8220,13 +8215,13 @@ package: manager: conda platform: win-64 dependencies: - libgcc: '>=14' + libgcc: '>=15' libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' ucrt: '>=10.0.20348.0' - url: https://repo.prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-hfa92662_2.conda hash: - md5: 87aee04978ab77bf4c0f42b983c216cc - sha256: 892ad69b1a9ecc3903ed5a1b18fa097013eaf462eeed3c6ff31bf5c12e71e84b + md5: 68403004c805ce03b71a5889a4c47fa1 + sha256: b9f063792e4d50ef2669c30dfc4ba14aefb4fdc37e384241a71093bee0493ad1 category: main optional: false - name: xorg-libxdmcp @@ -8257,27 +8252,27 @@ package: category: main optional: false - name: xyzservices - version: 2026.3.0 + version: 2026.9.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.9.1-pyhd8ed1ab_0.conda hash: - md5: 4487b9c371d0161d54b5c7bbd890c0fc - sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 + md5: 5d7c149ba9c728d4951f3fe6d3ce0f84 + sha256: b9439f1716ff580ce56e9b4a4df7ea92e5ed2bdc9567d25cdff223d62c3183a8 category: main optional: false - name: xyzservices - version: 2026.3.0 + version: 2026.9.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.9.1-pyhd8ed1ab_0.conda hash: - md5: 4487b9c371d0161d54b5c7bbd890c0fc - sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 + md5: 5d7c149ba9c728d4951f3fe6d3ce0f84 + sha256: b9439f1716ff580ce56e9b4a4df7ea92e5ed2bdc9567d25cdff223d62c3183a8 category: main optional: false - name: yaml @@ -8504,75 +8499,75 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.1.dev103+14c4c81 + version: 0.8.0a3.dev11+fd9e5b6 manager: pip platform: linux-64 dependencies: - geoh5py: 0.14.0a1.dev275+ca917b6f + geoh5py: 0.14.0a1 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 hash: - sha256: 14c4c814e956277c10e64263b27717c720021b88 + sha256: fd9e5b69283159d7626c501918a246fd2f5202b9 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 category: main optional: false - name: geoapps-utils - version: 0.7.1.dev103+14c4c81 + version: 0.8.0a3.dev11+fd9e5b6 manager: pip platform: win-64 dependencies: - geoh5py: 0.14.0a1.dev275+ca917b6f + geoh5py: 0.14.0a1 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 hash: - sha256: 14c4c814e956277c10e64263b27717c720021b88 + sha256: fd9e5b69283159d7626c501918a246fd2f5202b9 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 category: main optional: false - name: geoh5py - version: 0.14.0a1.dev275+ca917b6f + version: 0.14.0a1 manager: pip platform: linux-64 dependencies: h5py: '>=3.15.0,<3.16.0' numpy: '>=2.4.0,<2.5.0' - pillow: '>=12.2.0,<12.3.0' + pillow: '>=12.2.0,<13.0.0' psutil: '>=7.2.2,<7.3.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 hash: - sha256: ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + sha256: d45f41aa5af7958ced737f136ec27cca28068b54 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 category: main optional: false - name: geoh5py - version: 0.14.0a1.dev275+ca917b6f + version: 0.14.0a1 manager: pip platform: win-64 dependencies: h5py: '>=3.15.0,<3.16.0' numpy: '>=2.4.0,<2.5.0' - pillow: '>=12.2.0,<12.3.0' + pillow: '>=12.2.0,<13.0.0' psutil: '>=7.2.2,<7.3.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 hash: - sha256: ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + sha256: d45f41aa5af7958ced737f136ec27cca28068b54 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 category: main optional: false - name: grid-apps @@ -8581,8 +8576,8 @@ package: platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.1.dev103+14c4c81 - geoh5py: 0.14.0a1.dev275+ca917b6f + geoapps-utils: 0.8.0a3.dev11+fd9e5b6 + geoh5py: 0.14.0a1 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8600,8 +8595,8 @@ package: platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.1.dev103+14c4c81 - geoh5py: 0.14.0a1.dev275+ca917b6f + geoapps-utils: 0.8.0a3.dev11+fd9e5b6 + geoh5py: 0.14.0a1 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' diff --git a/py-3.13.conda-lock.yml b/py-3.13.conda-lock.yml index 4558dc17d..a802a3274 100644 --- a/py-3.13.conda-lock.yml +++ b/py-3.13.conda-lock.yml @@ -131,33 +131,31 @@ package: category: main optional: false - name: anyio - version: 4.15.0 + version: 4.15.1 manager: conda platform: linux-64 dependencies: - exceptiongroup: '>=1.0.2' idna: '>=2.8' python: '' - typing_extensions: '>=4.5' - url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.0-pyh5ded981_0.conda + typing_extensions: '>=4.16.0' + url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda hash: - md5: 28190db0e223089024a41b06c11af36e - sha256: 35fefb7c4bc39bca28d8764b4f59bd7b739c47e3af8e5e20ee22621db0c594b3 + md5: 33cdc5ba7c481b371f08f88e6c048c55 + sha256: fc25a84c9c1ad4b48c136ad2363100e8b0faa3b0ab8985e61c9c8fa0b3431945 category: dev optional: true - name: anyio - version: 4.15.0 + version: 4.15.1 manager: conda platform: win-64 dependencies: - exceptiongroup: '>=1.0.2' idna: '>=2.8' python: '' - typing_extensions: '>=4.5' - url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.0-pyh5ded981_0.conda + typing_extensions: '>=4.16.0' + url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.15.1-pyh5ded981_1.conda hash: - md5: 28190db0e223089024a41b06c11af36e - sha256: 35fefb7c4bc39bca28d8764b4f59bd7b739c47e3af8e5e20ee22621db0c594b3 + md5: 33cdc5ba7c481b371f08f88e6c048c55 + sha256: fc25a84c9c1ad4b48c136ad2363100e8b0faa3b0ab8985e61c9c8fa0b3431945 category: dev optional: true - name: argon2-cffi @@ -1131,30 +1129,27 @@ package: category: dev optional: true - name: click - version: 8.4.2 + version: 8.5.0 manager: conda platform: linux-64 dependencies: - __unix: '' - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda hash: - md5: 2c4bd6aeb90bb157456841c3270a0d92 - sha256: ccc4787f511964f9a1f2d2d2859c91c5d571fb60f7f09d4c4e092c9b7a94e671 + md5: dea5b13a211bbf99876deb980b408a66 + sha256: 9afb0c2c089330321a219c7ee5a25313bd574d4024be606cbb33e7a5735df662 category: main optional: false - name: click - version: 8.4.2 + version: 8.5.0 manager: conda platform: win-64 dependencies: - __win: '' - colorama: '' python: '' - url: https://repo.prefix.dev/conda-forge/noarch/click-8.4.2-pyh6dadd2b_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/click-8.5.0-pyh5ded981_0.conda hash: - md5: 8a0d65027e25e367f9f1754f0604e8de - sha256: 5b5c96afdd801dd9c3b78ebc2cd9a9f3ce34186257415d394dde1aa8468aa3c0 + md5: dea5b13a211bbf99876deb980b408a66 + sha256: 9afb0c2c089330321a219c7ee5a25313bd574d4024be606cbb33e7a5735df662 category: main optional: false - name: cloudpickle @@ -2767,7 +2762,7 @@ package: category: dev optional: true - name: jupyter-builder - version: 1.2.2 + version: 1.2.3 manager: conda platform: linux-64 dependencies: @@ -2775,14 +2770,14 @@ package: python: '' tomli: '' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.3-pyh5ded981_0.conda hash: - md5: 9672806e67ea8b09a61408597a418e20 - sha256: 46777dd25ae623f960ec9ed9eae44cc7f96f371f3bc96f85d3ebf95737bd4e88 + md5: bac0e43cada154f38a627bde5e7e6016 + sha256: 3eba9c6b859a217ad8de382d1af76983611c221364a059bfd379f2f09dd663ef category: dev optional: true - name: jupyter-builder - version: 1.2.2 + version: 1.2.3 manager: conda platform: win-64 dependencies: @@ -2790,10 +2785,10 @@ package: python: '' tomli: '' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.2-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyter-builder-1.2.3-pyh5ded981_0.conda hash: - md5: 9672806e67ea8b09a61408597a418e20 - sha256: 46777dd25ae623f960ec9ed9eae44cc7f96f371f3bc96f85d3ebf95737bd4e88 + md5: bac0e43cada154f38a627bde5e7e6016 + sha256: 3eba9c6b859a217ad8de382d1af76983611c221364a059bfd379f2f09dd663ef category: dev optional: true - name: jupyter-lsp @@ -4400,22 +4395,22 @@ package: category: main optional: false - name: libxml2 - version: 2.15.3 + version: 2.15.4 manager: conda platform: win-64 dependencies: icu: '>=78.3,<79.0a0' libiconv: '>=1.18,<2.0a0' liblzma: '>=5.8.3,<6.0a0' - libxml2-16: 2.15.3 + libxml2-16: 2.15.4 libzlib: '>=1.3.2,<2.0a0' ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/libxml2-2.15.4-he095d88_0.conda hash: - md5: 45a5a1c709a69f14cf176220788d18a9 - sha256: a83e9adcf7c50f20289dc6890707c8e4e84151b4204b0f7344998138807458d1 + md5: 3ce54d0f8f24dfab99d82414411640aa + sha256: a19bb3821830f6b1281e782844d5dd265f796dfed2e4812b16c9995a8c778c88 category: main optional: false - name: libxml2-16 @@ -4436,7 +4431,7 @@ package: category: main optional: false - name: libxml2-16 - version: 2.15.3 + version: 2.15.4 manager: conda platform: win-64 dependencies: @@ -4447,10 +4442,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/libxml2-16-2.15.4-h3cfd58e_0.conda hash: - md5: 6e7dadff3f3bde2d29d29a3ec34f2d58 - sha256: 8163de24a7ddb4ebf9587c3a45ba950caf3690b9646b76f007ca15e6e52b5881 + md5: bab5489f4bd38494ffaa83d6ab924c1f + sha256: 9fa71cec30425c9cc8eda6af3574af1faf4fefa5e239c9e037b1f778ef3ce8ac category: main optional: false - name: libzlib @@ -4480,29 +4475,29 @@ package: category: main optional: false - name: llvm-openmp - version: 23.1.0 + version: 23.1.1 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-23.1.0-h7148c6a_0.conda + url: https://repo.prefix.dev/conda-forge/linux-64/llvm-openmp-23.1.1-h7148c6a_0.conda hash: - md5: 58b4529023435973ab911c3c51892671 - sha256: b6fa85a30cceca3ad7a811ab34f842b9c2ae9d9d4c520e084b62b2abe50e9a70 + md5: d976d1fcca0f3c861f02aff9fb95508f + sha256: 4d6dab4691baec13109bc251506a74da448340b6a5de92de30563871105f8e7c category: main optional: false - name: llvm-openmp - version: 23.1.0 + version: 23.1.1 manager: conda platform: win-64 dependencies: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-23.1.0-h49e36cd_0.conda + url: https://repo.prefix.dev/conda-forge/win-64/llvm-openmp-23.1.1-h49e36cd_0.conda hash: - md5: 79055ec79e1b43749763122cead30976 - sha256: f9658ec83a6744f38e2b8188c76e1c2dea2614f5aa0e14d9d274b19f60646b8c + md5: f895db3df946e742c3ce07cfce271bdd + sha256: 49b0967e84eae82cc2acaf4400629c7b9c08a491b9c8d3343f3f5f2feee7138d category: main optional: false - name: locket @@ -5176,14 +5171,14 @@ package: category: dev optional: true - name: nodejs - version: 26.8.0 + version: 26.8.1 manager: conda platform: win-64 dependencies: {} - url: https://repo.prefix.dev/conda-forge/win-64/nodejs-26.8.0-h80d1838_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/nodejs-26.8.1-h80d1838_1.conda hash: - md5: 786fbc873be1ca0d9e5f1a66c5de1f18 - sha256: dde0723015f908149905e353f69ee2d380e7810fa2d0d46203ea3fa1bfd85901 + md5: dbac9bb103c17d1318589036f1862dfe + sha256: 6c3d7797fe9855375e160ce6acf4ef076f41cb02b4b92c8b768326da303b5348 category: dev optional: true - name: notebook @@ -5720,27 +5715,27 @@ package: category: main optional: false - name: platformdirs - version: 4.11.6 + version: 4.11.8 manager: conda platform: linux-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.8-pyh5ded981_0.conda hash: - md5: fb0f75910f804de1d8c6e91f73673d11 - sha256: 8fe66c78f015fecfe096e4ff78a2626c4d926cde9b6951cf3b8e1ff0aaeb0a6c + md5: 48e9ecf08b0578a4313f13b2e2b0fd72 + sha256: 8cbae1fed8437e63c9bcc691927402edb3809fccb26b15eb095df7dd2eb73e5f category: dev optional: true - name: platformdirs - version: 4.11.6 + version: 4.11.8 manager: conda platform: win-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.11.8-pyh5ded981_0.conda hash: - md5: fb0f75910f804de1d8c6e91f73673d11 - sha256: 8fe66c78f015fecfe096e4ff78a2626c4d926cde9b6951cf3b8e1ff0aaeb0a6c + md5: 48e9ecf08b0578a4313f13b2e2b0fd72 + sha256: 8cbae1fed8437e63c9bcc691927402edb3809fccb26b15eb095df7dd2eb73e5f category: dev optional: true - name: pluggy @@ -7376,22 +7371,22 @@ package: category: dev optional: true - name: tbb - version: 2023.0.0 + version: 2023.1.0 manager: conda platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - libgcc: '>=14' + libgcc: '>=15' libhwloc: '>=2.13.0,<2.13.1.0a0' - libstdcxx: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + libstdcxx: '>=15' + url: https://repo.prefix.dev/conda-forge/linux-64/tbb-2023.1.0-hfd44327_0.conda hash: - md5: 7073b15f9364ebc118998601ac6ca6a6 - sha256: 30cb9355c2fefc20ff1a3d6566b9714d5614086a2524c07721fc344eb20515ae + md5: b17ef6c181922df16e9b1330fd00fe85 + sha256: ea35780ec77e2431bcfc193e75ddcc3ec1ae79a34464469b0b2186d93035c9e7 category: main optional: false - name: tbb - version: 2023.0.0 + version: 2023.1.0 manager: conda platform: win-64 dependencies: @@ -7399,10 +7394,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/tbb-2023.1.0-hdcfe883_0.conda hash: - md5: 8ee01a693aecff5432069eaaf1183c45 - sha256: 8a4053839b8e997a5965e2dff7d6cf3c77be62d82c0e48c8a04a5ed2d2e73035 + md5: 8b1275f06705cdc2ab67f3bfdf4df843 + sha256: 7a65accbe954d0304b9056005f59fbee8b3928ceced38b1e3e8272aa1af0b750 category: main optional: false - name: tblib @@ -8124,11 +8119,11 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - libgcc: '>=14' - url: https://repo.prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_2.conda + libgcc: '>=15' + url: https://repo.prefix.dev/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda hash: - md5: f06ef439c280a5f90b8bf62355008dbc - sha256: cbf891f6cc1a859347680af1c8562bc6b033bf182a2a3bb536016932be3206de + md5: da33efee1a93603d92e06d4a2b68def6 + sha256: 3ec065b94554dc48a4ca582a960a5484bc166b26e83ce0954653e08d17e8bd53 category: main optional: false - name: xorg-libxau @@ -8136,13 +8131,13 @@ package: manager: conda platform: win-64 dependencies: - libgcc: '>=14' + libgcc: '>=15' libwinpthread: '>=12.0.0.r4.gg4f2fc60ca' ucrt: '>=10.0.20348.0' - url: https://repo.prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_2.conda + url: https://repo.prefix.dev/conda-forge/win-64/xorg-libxau-1.0.12-hfa92662_2.conda hash: - md5: 87aee04978ab77bf4c0f42b983c216cc - sha256: 892ad69b1a9ecc3903ed5a1b18fa097013eaf462eeed3c6ff31bf5c12e71e84b + md5: 68403004c805ce03b71a5889a4c47fa1 + sha256: b9f063792e4d50ef2669c30dfc4ba14aefb4fdc37e384241a71093bee0493ad1 category: main optional: false - name: xorg-libxdmcp @@ -8173,27 +8168,27 @@ package: category: main optional: false - name: xyzservices - version: 2026.3.0 + version: 2026.9.1 manager: conda platform: linux-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.9.1-pyhd8ed1ab_0.conda hash: - md5: 4487b9c371d0161d54b5c7bbd890c0fc - sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 + md5: 5d7c149ba9c728d4951f3fe6d3ce0f84 + sha256: b9439f1716ff580ce56e9b4a4df7ea92e5ed2bdc9567d25cdff223d62c3183a8 category: main optional: false - name: xyzservices - version: 2026.3.0 + version: 2026.9.1 manager: conda platform: win-64 dependencies: python: '>=3.9' - url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.3.0-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/xyzservices-2026.9.1-pyhd8ed1ab_0.conda hash: - md5: 4487b9c371d0161d54b5c7bbd890c0fc - sha256: 663ea9b00d68c2da309114923924686ab6d3f59ef1b196c5029ba16799e7bb07 + md5: 5d7c149ba9c728d4951f3fe6d3ce0f84 + sha256: b9439f1716ff580ce56e9b4a4df7ea92e5ed2bdc9567d25cdff223d62c3183a8 category: main optional: false - name: yaml @@ -8420,75 +8415,75 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.1.dev103+14c4c81 + version: 0.8.0a3.dev11+fd9e5b6 manager: pip platform: linux-64 dependencies: - geoh5py: 0.14.0a1.dev275+ca917b6f + geoh5py: 0.14.0a1 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 hash: - sha256: 14c4c814e956277c10e64263b27717c720021b88 + sha256: fd9e5b69283159d7626c501918a246fd2f5202b9 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 category: main optional: false - name: geoapps-utils - version: 0.7.1.dev103+14c4c81 + version: 0.8.0a3.dev11+fd9e5b6 manager: pip platform: win-64 dependencies: - geoh5py: 0.14.0a1.dev275+ca917b6f + geoh5py: 0.14.0a1 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 hash: - sha256: 14c4c814e956277c10e64263b27717c720021b88 + sha256: fd9e5b69283159d7626c501918a246fd2f5202b9 source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@14c4c814e956277c10e64263b27717c720021b88 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@fd9e5b69283159d7626c501918a246fd2f5202b9 category: main optional: false - name: geoh5py - version: 0.14.0a1.dev275+ca917b6f + version: 0.14.0a1 manager: pip platform: linux-64 dependencies: h5py: '>=3.15.0,<3.16.0' numpy: '>=2.4.0,<2.5.0' - pillow: '>=12.2.0,<12.3.0' + pillow: '>=12.2.0,<13.0.0' psutil: '>=7.2.2,<7.3.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 hash: - sha256: ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + sha256: d45f41aa5af7958ced737f136ec27cca28068b54 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 category: main optional: false - name: geoh5py - version: 0.14.0a1.dev275+ca917b6f + version: 0.14.0a1 manager: pip platform: win-64 dependencies: h5py: '>=3.15.0,<3.16.0' numpy: '>=2.4.0,<2.5.0' - pillow: '>=12.2.0,<12.3.0' + pillow: '>=12.2.0,<13.0.0' psutil: '>=7.2.2,<7.3.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 hash: - sha256: ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + sha256: d45f41aa5af7958ced737f136ec27cca28068b54 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@ca917b6f4e88bb687ed18f68630c5ac993cd7e76 + url: git+https://github.com/MiraGeoscience/geoh5py.git@d45f41aa5af7958ced737f136ec27cca28068b54 category: main optional: false - name: grid-apps @@ -8497,8 +8492,8 @@ package: platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.1.dev103+14c4c81 - geoh5py: 0.14.0a1.dev275+ca917b6f + geoapps-utils: 0.8.0a3.dev11+fd9e5b6 + geoh5py: 0.14.0a1 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8516,8 +8511,8 @@ package: platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.1.dev103+14c4c81 - geoh5py: 0.14.0a1.dev275+ca917b6f + geoapps-utils: 0.8.0a3.dev11+fd9e5b6 + geoh5py: 0.14.0a1 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' diff --git a/simpeg_drivers-assets/uijson/borehole_tdem_forward.ui.json b/simpeg_drivers-assets/uijson/borehole_tdem_forward.ui.json new file mode 100644 index 000000000..6a6af4142 --- /dev/null +++ b/simpeg_drivers-assets/uijson/borehole_tdem_forward.ui.json @@ -0,0 +1,230 @@ +{ + "version": "0.0.0", + "title": "Borehole TDEM Forward", + "icon": "surveyairborneem", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg-drivers", + "run_command": "simpeg_drivers.electromagnetics.borehole_time_domain.forward", + "geoh5": "", + "monitoring_directory": "", + "data_object": { + "main": true, + "group": "Survey", + "label": "Object", + "meshType": [ + "{19730589-fd28-4649-9de0-ad47249d9aba}", + "{deebe11a-b57b-4a03-99d6-8f27b25eb2a8}" + ], + "value": "" + }, + "receivers_orientation": { + "group": "Survey", + "main": true, + "association": "Vertex", + "dataType": "Float", + "dataGroupType": [ + "Dip direction & dip", + "3D vector" + ], + "label": "Receivers orientation", + "tooltip": [ + "Receiver orientation provided as a 'Dip direction & dip' or '3D vector' data group. If not provided, it is derived from the borehole trace:
", + "
Axial (A)
Parallel to and positive upward along the hole trace
", + "
Perpendicular (U)
Positive upward in the hole dip direction
", + "
Perpendicular (V)
Horizontal, to the left of the hole dip direction
", + "
" + ], + "optional": true, + "enabled": false, + "parent": "data_object", + "value": "" + }, + "data_units": { + "choiceList": [ + "Airborne dB/dt (V/Am^4)", + "Airborne B (T/Am^2)", + "Ground dB/dt (V/Am^2)", + "Ground B (T/A)" + ], + "group": "Survey", + "main": true, + "label": "Data type", + "tooltip": [ + "Set the units of the data.

", + "Data are expected to be normalized by the source strength, dependent on the type:

", + "
Dipole
Current * area * number of turns (NIA)
", + "
Wire
Current * number of turns (NI)
", + "
" + ], + "value": "Airborne dB/dt (V/Am^4)" + }, + "a_channel_bool": { + "group": "Survey", + "main": true, + "label": "A-component", + "tooltip": "Axial (A) component parallel to the hole trace.\nPositive upward along the hole trace", + "value": true + }, + "u_channel_bool": { + "group": "Survey", + "main": true, + "label": "U-component", + "tooltip": "Perpendicular (U) component of the magnetic data.\nPositive upward in the hole dip direction", + "value": true + }, + "v_channel_bool": { + "group": "Survey", + "main": true, + "label": "V-component", + "tooltip": "Perpendicular (V) component of the magnetic data.\nHorizontal, to left of hole dip direction", + "value": true + }, + "mesh": { + "group": "Mesh and models", + "main": true, + "label": "Mesh", + "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", + "value": "", + "optional": true, + "enabled": false, + "tooltip": "Select a mesh for the forward modelling" + }, + "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", + "group": "Mesh and models", + "main": true, + "isValue": true, + "parent": "mesh", + "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 forward modelling" + }, + "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": "" + }, + "n_cpu": { + "min": 1, + "group": "Compute", + "optional": true, + "enabled": false, + "label": "Number of CPUs", + "value": 1, + "visible": false + }, + "solver_type": { + "choiceList": [ + "Pardiso", + "Mumps" + ], + "group": "Compute", + "label": "Direct solver", + "tooltip": "Direct solver to use for the forward calculations", + "value": "Pardiso" + }, + "tile_spatial": { + "group": "Compute", + "label": "Number of tiles", + "value": 1, + "min": 1, + "max": 1000, + "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 (MB)", + "value": 128, + "verbose": 3, + "visible": false, + "tooltip": "Limit the chunk size used by Dask for distributed computation" + }, + "out_group": { + "label": "SimPEG group", + "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, + "visible": false, + "tooltip": "Generates a file for sweeping parameters instead of running the application" + }, + "n_workers": null, + "n_threads": null, + "max_ram": "", + "performance_report": false, + "distributed_workers": "" +} diff --git a/simpeg_drivers-assets/uijson/borehole_tdem_inversion.ui.json b/simpeg_drivers-assets/uijson/borehole_tdem_inversion.ui.json new file mode 100644 index 000000000..40d3f48a5 --- /dev/null +++ b/simpeg_drivers-assets/uijson/borehole_tdem_inversion.ui.json @@ -0,0 +1,659 @@ +{ + "version": "0.0.0", + "title": "Borehole TDEM Inversion", + "icon": "surveyairborneem", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg-drivers", + "run_command": "simpeg_drivers.electromagnetics.borehole_time_domain.inversion", + "geoh5": "", + "monitoring_directory": "", + "data_object": { + "main": true, + "group": "Data", + "label": "Object", + "meshType": [ + "{19730589-fd28-4649-9de0-ad47249d9aba}", + "{deebe11a-b57b-4a03-99d6-8f27b25eb2a8}" + ], + "value": "" + }, + "receivers_orientation": { + "group": "Survey", + "main": true, + "association": "Vertex", + "dataType": "Float", + "dataGroupType": [ + "Dip direction & dip", + "3D vector" + ], + "label": "Receivers orientation", + "tooltip": [ + "Receiver orientation provided as a 'Dip direction & dip' or '3D vector' data group. If not provided, it is derived from the borehole trace:
", + "
Axial (A)
Parallel to and positive upward along the hole trace
", + "
Perpendicular (U)
Positive upward in the hole dip direction
", + "
Perpendicular (V)
Horizontal, to the left of the hole dip direction
", + "
" + ], + "optional": true, + "enabled": false, + "parent": "data_object", + "value": "" + }, + "data_units": { + "choiceList": [ + "Airborne dB/dt (V/Am^4)", + "Airborne B (T/Am^2)", + "Ground dB/dt (V/Am^2)", + "Ground B (T/A)" + ], + "group": "Survey", + "main": true, + "label": "Data type", + "tooltip": [ + "Set the units of the data.

", + "Data are expected to be normalized by the source strength, dependent on the type:

", + "
Dipole
Current * area * number of turns (NIA)
", + "
Wire
Current * number of turns (NI)
", + "
" + ], + "value": "Airborne dB/dt (V/Am^4)" + }, + "a_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "dataGroupType": "Multi-element", + "main": true, + "label": "A-component", + "parent": "data_object", + "tooltip": "Axial (A) component parallel to the hole trace.\nPositive upward along the hole trace", + "optional": true, + "enabled": true, + "value": "" + }, + "a_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "dataGroupType": "Multi-element", + "main": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "a_channel", + "dependencyType": "enabled", + "value": "" + }, + "u_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "dataGroupType": "Multi-element", + "main": true, + "label": "U-component", + "parent": "data_object", + "tooltip": "Perpendicular (U) component of the magnetic data.\nPositive upward in the hole dip direction", + "optional": true, + "enabled": false, + "value": "" + }, + "u_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "dataGroupType": "Multi-element", + "main": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "u_channel", + "dependencyType": "enabled", + "value": "" + }, + "v_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "dataGroupType": "Multi-element", + "main": true, + "label": "V-component", + "tooltip": "Perpendicular (V) component of the magnetic data.\nHorizontal, to left of hole dip direction", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "v_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "dataGroupType": "Multi-element", + "main": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "v_channel", + "dependencyType": "enabled", + "value": "" + }, + "mesh": { + "group": "Mesh and models", + "main": true, + "label": "Mesh", + "meshType": "{4ea87376-3ece-438b-bf12-3479733ded46}", + "value": "", + "optional": true, + "enabled": false, + "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": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "parent": "mesh", + "label": "Initial", + "property": "", + "value": 0.001 + }, + "reference_model": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "main": true, + "group": "Mesh and models", + "isValue": true, + "parent": "mesh", + "label": "Reference", + "property": "", + "optional": true, + "enabled": false, + "value": 0.001 + }, + "lower_bound": { + "association": "Cell", + "main": true, + "dataType": "Float", + "group": "Mesh and models", + "isValue": true, + "parent": "mesh", + "label": "Lower bound", + "property": "", + "optional": true, + "value": 1e-08, + "enabled": false + }, + "upper_bound": { + "association": "Cell", + "main": true, + "dataType": "Float", + "group": "Mesh and models", + "isValue": true, + "parent": "mesh", + "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": "" + }, + "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": { + "min": 0.0, + "group": "Regularization", + "label": "Y-smoothness weight", + "tooltip": "Larger values relative to other smoothness weights will result in y biased smoothness", + "value": 1.0, + "isValue": true, + "parent": "mesh", + "association": "Cell", + "dataType": "Float", + "property": "", + "enabled": true + }, + "length_scale_z": { + "min": 0.0, + "group": "Regularization", + "label": "Z-smoothness weight", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", + "value": 1.0, + "isValue": true, + "parent": "mesh", + "association": "Cell", + "dataType": "Float", + "property": "", + "enabled": true + }, + "gradient_rotation": { + "group": "Regularization", + "association": "Cell", + "dataType": "Float", + "dataGroupType": [ + "Strike & dip", + "Dip direction & dip", + "3D vector" + ], + "label": "Gradient rotation", + "parent": "mesh", + "value": "", + "optional": true, + "tooltip": "Rotate the gradient of the regularization to align with a provided structural orientation.\nThe data should be provided as a data group in the form of either strike & dip, dip direction & dip, or x/y/z components.", + "enabled": false + }, + "s_norm": { + "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": true, + "enabled": true, + "dependency": "reference_model", + "dependencyType": "enabled", + "tooltip": "Lp-norm used in the smallness term of the objective function" + }, + "x_norm": { + "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": { + "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": { + "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, + "tooltip": "Lp-norm used in the z-smoothness term of the objective function" + }, + "max_irls_iterations": { + "min": 0, + "group": "Sparse/blocky model", + "label": "Maximum IRLS iterations", + "tooltip": "Iterative Re-Weighted Least-squares (IRLS) 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 + }, + "percentile": { + "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": "Cooling schedule/target", + "label": "Chi factor", + "value": 1.0, + "enabled": true, + "tooltip": "The global target data misfit value" + }, + "auto_scale_tiles": { + "group": "Cooling schedule/target", + "label": "Auto-scale tiles", + "value": false, + "verbose": 3, + "visible": true, + "tooltip": "Whether to auto-scale the misfit function of tiles 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": 100.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" + }, + "cooling_factor": { + "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 + }, + "cooling_rate": { + "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" + }, + "epsilon_cooling_factor": 1.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, + "tooltip": "Perform an Armijo backtracking line search for the provided number of iterations" + }, + "max_cg_iterations": { + "min": 0, + "group": "Optimization", + "label": "Maximum CG iterations", + "value": 30, + "enabled": true, + "tooltip": "Maximum number of iterations for the conjugate gradient solver used in the optimization", + "verbose": 2 + }, + "tol_cg": { + "min": 0, + "group": "Optimization", + "label": "Conjugate gradient tolerance", + "value": 0.0001, + "enabled": true, + "tooltip": "Tolerance for the conjugate gradient solver used in the optimization", + "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": "Threshold below which sensitivity weights become constant. Measured as a percentage of the maximum sensitivity weight.", + "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 + }, + "save_sensitivities": { + "group": "Update sensitivity weights directive", + "label": "Save sensitivities", + "tooltip": "Save the summed square row sensitivities to geoh5", + "value": false + }, + "n_cpu": { + "min": 1, + "group": "Compute", + "optional": true, + "enabled": false, + "label": "Number of CPUs", + "value": 1, + "visible": false + }, + "solver_type": { + "choiceList": [ + "Pardiso", + "Mumps" + ], + "group": "Compute", + "label": "Direct solver", + "tooltip": "Direct solver to use for the forward calculations", + "value": "Pardiso" + }, + "tile_spatial": { + "group": "Compute", + "label": "Number of tiles", + "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": [ + "ram" + ], + "group": "Compute", + "label": "Storage device", + "tooltip": "Only RAM storage available for now", + "value": "ram" + }, + "max_chunk_size": { + "min": 0, + "group": "Compute", + "optional": true, + "enabled": true, + "label": "Maximum chunk size (MB)", + "value": 128, + "verbose": 3, + "visible": false, + "tooltip": "Limit the chunk size used by Dask for distributed computation" + }, + "out_group": { + "label": "SimPEG group", + "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, + "visible": false, + "tooltip": "Generates a file for sweeping parameters instead of running the application" + }, + "n_workers": null, + "n_threads": null, + "max_ram": "", + "performance_report": false, + "distributed_workers": "" +} diff --git a/simpeg_drivers/__init__.py b/simpeg_drivers/__init__.py index 10d2b354d..c8ef0ff1d 100644 --- a/simpeg_drivers/__init__.py +++ b/simpeg_drivers/__init__.py @@ -54,6 +54,13 @@ def assets_path() -> Path: "simpeg_drivers.natural_sources.apparent_conductivity", {"forward": "AppConForwardDriver", "inversion": "AppConInversionDriver"}, ), + "borehole tdem": ( + "simpeg_drivers.electromagnetics.borehole_time_domain", + { + "forward": "BoreholeTDEMForwardDriver", + "inversion": "BoreholeTDEMInversionDriver", + }, + ), "direct current 3d": ( "simpeg_drivers.electricals.direct_current.three_dimensions", { diff --git a/simpeg_drivers/components/data.py b/simpeg_drivers/components/data.py index f24cea4cb..73b9c6f05 100644 --- a/simpeg_drivers/components/data.py +++ b/simpeg_drivers/components/data.py @@ -33,7 +33,6 @@ if TYPE_CHECKING: from geoh5py.workspace import Workspace - from simpeg_drivers.components.meshes import InversionMesh from simpeg_drivers.options import InversionBaseOptions @@ -188,6 +187,7 @@ def save_data(self): """Write out the data to geoh5""" has_channels = self.params.inversion_type in [ "apparent conductivity", + "borehole tdem", "magnetotellurics", "tipper", "tdem", diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 262d6ecf2..30574ef94 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -267,6 +267,7 @@ def save_iteration_residual_directive(self): not in [ "apparent conductivity", "tdem", + "borehole tdem", "tdem 1d", "fdem", "fdem 1d", @@ -444,6 +445,7 @@ def assemble_keyword_arguments( "magnetotellurics", "tipper", "tdem", + "borehole tdem", "tdem 1d", "fdem", "fdem 1d", diff --git a/simpeg_drivers/components/factories/entity_factory.py b/simpeg_drivers/components/factories/entity_factory.py index fa3e0620f..8a980bd02 100644 --- a/simpeg_drivers/components/factories/entity_factory.py +++ b/simpeg_drivers/components/factories/entity_factory.py @@ -18,6 +18,9 @@ import numpy as np from geoapps_utils.utils.importing import GeoAppsError +from geoapps_utils.utils.locations import azimuth_dip_from_segments +from geoapps_utils.utils.transformations import x_rotation_matrix, z_rotation_matrix +from geoh5py.groups import PropertyGroup from geoh5py.objects import ( CurrentElectrode, Curve, @@ -96,8 +99,45 @@ def _build(self, inversion_data: InversionData): if tx_freq: tx_freq[0].copy(parent=entity.transmitters) + if ( + "borehole" in self.params.inversion_type + and self.params.receivers_orientation is None + ): + self._add_auv_data_groups(entity) + return entity + @staticmethod + def _add_auv_data_groups(entity: Curve): + """ + Compute the segments orientation and add A, U and V vector data + to the entity. + + :param entity: Curve entity + """ + azi_dip = azimuth_dip_from_segments(entity, reverse=True) + + for ind, comp in enumerate("vau"): + vector = np.zeros((azi_dip.shape[0], 3)) + vector[:, ind] = 1 + vector = ( + z_rotation_matrix(-azi_dip[:, 0]) + * (x_rotation_matrix(-azi_dip[:, 1]) * vector.flatten()) + ).reshape((-1, 3)) + vec_data = entity.add_data( + { + f"{comp}_x": {"values": vector[:, 0]}, + f"{comp}_y": {"values": vector[:, 1]}, + f"{comp}_z": {"values": vector[:, 2]}, + } + ) + PropertyGroup( + entity, + property_group_type="3D vector", + name=f"{comp}_ori".capitalize(), + properties=vec_data, + ) + @staticmethod def _prune_from_indices(curve: Curve, cell_indices: np.ndarray): cells = curve.cells[cell_indices] diff --git a/simpeg_drivers/components/factories/receiver_factory.py b/simpeg_drivers/components/factories/receiver_factory.py index aac55f10e..90ee1098b 100644 --- a/simpeg_drivers/components/factories/receiver_factory.py +++ b/simpeg_drivers/components/factories/receiver_factory.py @@ -14,23 +14,22 @@ from __future__ import annotations -from typing import TYPE_CHECKING - - -if TYPE_CHECKING: - from geoapps_utils.driver.params import BaseParams - - from simpeg_drivers.options import BaseOptions - import numpy as np -from geoapps_utils.utils.transformations import x_rotation_matrix, z_rotation_matrix +from geoapps_utils.utils.locations import azimuth_dip_from_segments +from geoapps_utils.utils.transformations import ( + cartesian_to_azimuth_dip, + x_rotation_matrix, + z_rotation_matrix, +) +from geoh5py.groups.property_group_type import GroupTypeEnum from geoh5py.objects.surveys.electromagnetics.base import ( AirborneEMSurvey, LargeLoopGroundEMSurvey, ) from simpeg_drivers.components.factories.simpeg_factory import SimPEGFactory -from simpeg_drivers.utils.regularization import direction_and_dip, get_cell_normals +from simpeg_drivers.options import CoreOptions +from simpeg_drivers.utils.regularization import get_cell_normals ORIENTATION_MAP = { @@ -39,13 +38,16 @@ "vertical": "z", "inline": "y", "crossline": "x", + "a": "y", + "u": "z", + "v": "x", } class ReceiversFactory(SimPEGFactory): """Build SimPEG receivers objects based on factory type.""" - def __init__(self, params: BaseParams | BaseOptions): + def __init__(self, params: CoreOptions): """ :param params: Options object containing SimPEG object parameters. @@ -259,9 +261,26 @@ def validate_orientations(self): for comp in "xyz" } - if getattr(self.params, "receivers_orientation", None): - azm, dip = direction_and_dip(self.params.receivers_orientation) - azi_dip = np.deg2rad(np.c_[azm.values, dip.values]) + azi_dip = None + + if property_group := getattr(self.params, "receivers_orientation", None): + group_type = property_group.property_group_type + azi_dip = np.vstack( + [ + property_group.parent.get_data(k)[0].values + for k in property_group.properties + ] + ).T + + if group_type == GroupTypeEnum.VECTOR: + azi_dip = cartesian_to_azimuth_dip(azi_dip) + else: + azi_dip = np.deg2rad(azi_dip) + + elif "borehole" in self.params.inversion_type: + azi_dip = azimuth_dip_from_segments(self.params.data_object, reverse=True) + + if azi_dip is not None: orientations = {} for axis in "xyz": orientations[axis] = ( diff --git a/simpeg_drivers/components/factories/simpeg_factory.py b/simpeg_drivers/components/factories/simpeg_factory.py index 853aa76cc..c145ce916 100644 --- a/simpeg_drivers/components/factories/simpeg_factory.py +++ b/simpeg_drivers/components/factories/simpeg_factory.py @@ -46,6 +46,7 @@ class SimPEGFactory(ABC): valid_factory_types = [ "apparent conductivity", + "borehole tdem", "direct current pseudo 3d", "direct current 3d", "direct current 2d", diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py index fcc59606e..ad9b20a30 100644 --- a/simpeg_drivers/components/factories/simulation_factory.py +++ b/simpeg_drivers/components/factories/simulation_factory.py @@ -41,6 +41,7 @@ def __init__(self, params: BaseParams | BaseOptions): self.solver = None if self.factory_type in [ "apparent conductivity", + "borehole tdem", "direct current pseudo 3d", "direct current 3d", "direct current 2d", @@ -110,7 +111,7 @@ def concrete_object(self): return simulation_1d.Simulation1DLayered - if self.factory_type in ["tdem"]: + if self.factory_type in ["tdem", "borehole tdem"]: from simpeg.electromagnetics.time_domain import simulation return simulation.Simulation3DMagneticFluxDensity @@ -185,6 +186,7 @@ def assemble_keyword_arguments(self, survey=None, mesh=None, models=None, **kwar if self.factory_type in [ "apparent conductivity", + "borehole tdem", "direct current 3d", "direct current 2d", "magnetotellurics", diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index c9498c146..a67124cfc 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -28,15 +28,13 @@ if TYPE_CHECKING: - from geoapps_utils.driver.params import BaseParams - - from simpeg_drivers.options import BaseOptions + from simpeg_drivers.options import CoreOptions class SourcesFactory(SimPEGFactory): """Build SimPEG sources objects based on factory type.""" - def __init__(self, params: BaseParams | BaseOptions): + def __init__(self, params: CoreOptions): """ :param params: Options object containing SimPEG object parameters. diff --git a/simpeg_drivers/electromagnetics/borehole_time_domain/__init__.py b/simpeg_drivers/electromagnetics/borehole_time_domain/__init__.py new file mode 100644 index 000000000..df32b2043 --- /dev/null +++ b/simpeg_drivers/electromagnetics/borehole_time_domain/__init__.py @@ -0,0 +1,9 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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/borehole_time_domain/forward.py b/simpeg_drivers/electromagnetics/borehole_time_domain/forward.py new file mode 100644 index 000000000..d9c7e0eb7 --- /dev/null +++ b/simpeg_drivers/electromagnetics/borehole_time_domain/forward.py @@ -0,0 +1,29 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 ForwardDriver +from simpeg_drivers.electromagnetics.borehole_time_domain.options import ( + BoreholeTDEMForwardOptions, +) +from simpeg_drivers.utils.utils import argument_parser + + +class BoreholeTDEMForwardDriver(ForwardDriver): + """Time Domain Electromagnetic forward driver.""" + + _params_class = BoreholeTDEMForwardOptions + + +if __name__ == "__main__": + file, args = argument_parser() + BoreholeTDEMForwardDriver.start_dask_run(file, **args) diff --git a/simpeg_drivers/electromagnetics/borehole_time_domain/inversion.py b/simpeg_drivers/electromagnetics/borehole_time_domain/inversion.py new file mode 100644 index 000000000..031c471c2 --- /dev/null +++ b/simpeg_drivers/electromagnetics/borehole_time_domain/inversion.py @@ -0,0 +1,29 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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.electromagnetics.borehole_time_domain.options import ( + BoreholeTDEMInversionOptions, +) +from simpeg_drivers.utils.utils import argument_parser + + +class BoreholeTDEMInversionDriver(InversionDriver): + """Time Domain Electromagnetic inversion driver.""" + + _params_class = BoreholeTDEMInversionOptions + + +if __name__ == "__main__": + file, args = argument_parser() + BoreholeTDEMInversionDriver.start_dask_run(file, **args) diff --git a/simpeg_drivers/electromagnetics/borehole_time_domain/options.py b/simpeg_drivers/electromagnetics/borehole_time_domain/options.py new file mode 100644 index 000000000..9f72cc640 --- /dev/null +++ b/simpeg_drivers/electromagnetics/borehole_time_domain/options.py @@ -0,0 +1,101 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 +from typing import ClassVar + +from geoh5py.groups import PropertyGroup +from geoh5py.objects import ( + AirborneTEMReceivers, + LargeLoopGroundTEMReceivers, + MovingLoopGroundTEMReceivers, +) + +from simpeg_drivers import assets_path +from simpeg_drivers.electromagnetics.time_domain.options import BaseTDEMOptions +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + ConductivityModelOptions, +) + + +class BoreholeTDEMForwardOptions(BaseTDEMOptions, BaseForwardOptions): + """ + Time Domain Electromagnetic forward options for borehole surveys. + + :param a_channel_bool: In-line (A) data channel boolean. + :param u_channel_bool: Vertical (U) data channel boolean. + :param v_channel_bool: Cross-line (V) data channel boolean. + """ + + name: ClassVar[str] = "Borehole TDEM Forward" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/borehole_tdem_forward.ui.json" + ) + run_command: str = "simpeg_drivers.electromagnetics.borehole_time_domain.forward" + + title: str = "Borehole TDEM Forward" + icon: str = "surveyairborneem" + inversion_type: str = "borehole tdem" + physical_property: str = "conductivity" + + data_object: ( + MovingLoopGroundTEMReceivers + | LargeLoopGroundTEMReceivers + | AirborneTEMReceivers + ) + receivers_orientation: PropertyGroup | None = None + a_channel_bool: bool = False + u_channel_bool: bool = False + v_channel_bool: bool = False + + models: ConductivityModelOptions + + +class BoreholeTDEMInversionOptions(BaseTDEMOptions, BaseInversionOptions): + """ + Time Domain Electromagnetic Inversion options for borehole surveys. + + :param a_channel: In-line (A) data channel. + :param a_uncertainty: In-line (A) data channel uncertainty. + :param u_channel: Vertical (U) component data channel. + :param u_uncertainty: Vertical (U) component data channel uncertainty. + :param v_channel: Cross-line (V) data channel. + :param v_uncertainty: Cross-line(V) data channel uncertainty. + """ + + name: ClassVar[str] = "Borehole TDEM Inversion" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/borehole_tdem_inversion.ui.json" + ) + run_command: str = "simpeg_drivers.electromagnetics.borehole_time_domain.inversion" + title: str = "Borehole TDEM Inversion" + icon: str = "surveyairborneem" + physical_property: str = "conductivity" + inversion_type: str = "borehole tdem" + + data_object: ( + MovingLoopGroundTEMReceivers + | LargeLoopGroundTEMReceivers + | AirborneTEMReceivers + ) + receivers_orientation: PropertyGroup | None = None + a_channel: PropertyGroup | None = None + a_uncertainty: PropertyGroup | None = None + u_channel: PropertyGroup | None = None + u_uncertainty: PropertyGroup | None = None + v_channel: PropertyGroup | None = None + v_uncertainty: PropertyGroup | None = None + + models: ConductivityModelOptions diff --git a/simpeg_drivers/utils/surveys.py b/simpeg_drivers/utils/surveys.py index 8e7e6b4bd..a9056f668 100644 --- a/simpeg_drivers/utils/surveys.py +++ b/simpeg_drivers/utils/surveys.py @@ -156,7 +156,7 @@ def compute_em_projections(locations, simulation): projection = 0.0 orientations = receiver.orientation.reshape((-1, 3)) for orientation, comp in zip(orientations.T, "xyz", strict=True): - if len(orientation) == 1 and orientation == 0: + if len(orientation) == 1 and orientation.item() == 0: continue orientation = diags(orientation) diff --git a/simpeg_drivers/utils/synthetics/options.py b/simpeg_drivers/utils/synthetics/options.py index 6b2565ef2..cb5b37af8 100644 --- a/simpeg_drivers/utils/synthetics/options.py +++ b/simpeg_drivers/utils/synthetics/options.py @@ -85,11 +85,6 @@ def octree_params( survey = Points.create(geoh5, vertices=locs) refinements = [ - { - "refinement_object": survey, - "levels": self.survey_refinement, - "horizon": False, - }, { "refinement_object": survey, "levels": self.survey_refinement, diff --git a/simpeg_drivers/utils/synthetics/surveys/factory.py b/simpeg_drivers/utils/synthetics/surveys/factory.py index ef86c809a..a3af9f860 100644 --- a/simpeg_drivers/utils/synthetics/surveys/factory.py +++ b/simpeg_drivers/utils/synthetics/surveys/factory.py @@ -22,8 +22,9 @@ from .natural_sources.apparent_conductivity import generate_apparent_conductivity_survey from .natural_sources.magnetotellurics import generate_magnetotellurics_survey from .natural_sources.tipper import generate_tipper_survey -from .time_domain.airborne_tdem import generate_airborne_tdem_survey -from .time_domain.ground_tdem import generate_tdem_survey +from .time_domain.airborne import generate_airborne_tdem_survey +from .time_domain.borehole import generate_borehole_tdem_survey +from .time_domain.ground import generate_tdem_survey def grid_layout( @@ -102,11 +103,13 @@ def get_survey( return generate_airborne_tdem_survey( geoh5, grid_x, grid_y, grid_z, name=options.name ) - else: - return generate_tdem_survey( + elif "borehole" in method: + return generate_borehole_tdem_survey( geoh5, grid_x, grid_y, grid_z, name=options.name ) + return generate_tdem_survey(geoh5, grid_x, grid_y, grid_z, name=options.name) + return Points.create( geoh5, vertices=np.column_stack( diff --git a/simpeg_drivers/utils/synthetics/surveys/time_domain/airborne_tdem.py b/simpeg_drivers/utils/synthetics/surveys/time_domain/airborne.py similarity index 100% rename from simpeg_drivers/utils/synthetics/surveys/time_domain/airborne_tdem.py rename to simpeg_drivers/utils/synthetics/surveys/time_domain/airborne.py diff --git a/simpeg_drivers/utils/synthetics/surveys/time_domain/borehole.py b/simpeg_drivers/utils/synthetics/surveys/time_domain/borehole.py new file mode 100644 index 000000000..5f97486f1 --- /dev/null +++ b/simpeg_drivers/utils/synthetics/surveys/time_domain/borehole.py @@ -0,0 +1,44 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 numpy as np +from geoapps_utils.utils.transformations import y_rotation_matrix +from geoh5py import Workspace +from geoh5py.objects import ( + LargeLoopGroundTEMReceivers, +) + +from simpeg_drivers.utils.synthetics.surveys.time_domain import CHANNELS, WAVEFORM +from simpeg_drivers.utils.synthetics.surveys.time_domain.ground import ( + generate_tdem_survey, +) + + +def generate_borehole_tdem_survey( + geoh5: Workspace, + X: np.ndarray, + Y: np.ndarray, + Z: np.ndarray, + channels: np.ndarray = CHANNELS, + waveform: np.ndarray = WAVEFORM, + name: str = "survey", +) -> LargeLoopGroundTEMReceivers: + """Create a large loop TDEM survey object from survey grid locations.""" + + survey = generate_tdem_survey( + geoh5, X, Y, Z, channels=channels, waveform=waveform, name=name, n_loops=1 + ) + + center = survey.vertices[0, :] + survey.vertices = ( + y_rotation_matrix(np.pi / 4) @ (survey.vertices - center).T + ).T + center + + return survey diff --git a/simpeg_drivers/utils/synthetics/surveys/time_domain/ground_tdem.py b/simpeg_drivers/utils/synthetics/surveys/time_domain/ground.py similarity index 82% rename from simpeg_drivers/utils/synthetics/surveys/time_domain/ground_tdem.py rename to simpeg_drivers/utils/synthetics/surveys/time_domain/ground.py index 5421e9d2c..5472b7697 100644 --- a/simpeg_drivers/utils/synthetics/surveys/time_domain/ground_tdem.py +++ b/simpeg_drivers/utils/synthetics/surveys/time_domain/ground.py @@ -10,6 +10,7 @@ import numpy as np from geoapps_utils.utils.locations import gaussian +from geoapps_utils.utils.transformations import y_rotation_matrix from geoh5py import Workspace from geoh5py.objects import ( LargeLoopGroundTEMReceivers, @@ -27,6 +28,7 @@ def generate_tdem_survey( channels: np.ndarray = CHANNELS, waveform: np.ndarray = WAVEFORM, name: str = "survey", + n_loops: int = 2, ) -> LargeLoopGroundTEMReceivers: """Create a large loop TDEM survey object from survey grid locations.""" @@ -35,19 +37,15 @@ def generate_tdem_survey( center = np.mean(vertices, axis=0) if flatten: center[2] -= np.mean(Z) - n_lines = X.shape[0] + + x_blocks = np.array_split(X, n_loops, axis=0) + y_blocks = np.array_split(Y, n_loops, axis=0) + z_blocks = np.array_split(Z, n_loops, axis=0) arrays = [ - np.c_[ - X[: int(n_lines / 2), :].flatten(), - Y[: int(n_lines / 2), :].flatten(), - Z[: int(n_lines / 2), :].flatten(), - ], - np.c_[ - X[int(n_lines / 2) :, :].flatten(), - Y[int(n_lines / 2) :, :].flatten(), - Z[int(n_lines / 2) :, :].flatten(), - ], + np.c_[x.flatten(), y.flatten(), z.flatten()] + for x, y, z in zip(x_blocks, y_blocks, z_blocks, strict=True) ] + loops = [] loop_cells = [] loop_id = [] @@ -82,8 +80,7 @@ def generate_tdem_survey( if flatten else gaussian(loop[:, 0], loop[:, 1], amplitude=50.0, width=100.0) ) - loop = np.c_[loop, elevation] - loops += [loop + np.asarray(center)] + loops += [np.c_[loop, elevation]] loop_cells += [np.c_[np.arange(15) + count, np.arange(15) + count + 1]] loop_cells += [np.c_[count + 15, count]] count += 16 @@ -95,7 +92,17 @@ def generate_tdem_survey( name=f"{name}_tx", ) transmitters.tx_id_property = transmitters.parts + 1 - survey = LargeLoopGroundTEMReceivers.create(geoh5, name=name, vertices=vertices) + + cells = [] + count = 0 + for _ in range(X.shape[0]): + inds = np.arange(count, count + X.shape[1] - 1) + cells.append(np.c_[inds, inds + 1]) + count += X.shape[1] + + survey = LargeLoopGroundTEMReceivers.create( + geoh5, name=name, vertices=vertices, cells=np.vstack(cells) + ) survey.transmitters = transmitters survey.tx_id_property = np.hstack(loop_id) diff --git a/tests/plate_simulation/leroi_air/__init__.py b/tests/plate_simulation/leroi_air/__init__.py index 94728ad80..b8f4cca56 100644 --- a/tests/plate_simulation/leroi_air/__init__.py +++ b/tests/plate_simulation/leroi_air/__init__.py @@ -17,7 +17,7 @@ LeroiAirOptions, SurveyOptions, ) -from simpeg_drivers.utils.synthetics.surveys.time_domain.airborne_tdem import ( +from simpeg_drivers.utils.synthetics.surveys.time_domain.airborne import ( generate_airborne_tdem_survey, ) diff --git a/tests/run_tests/driver_borehole_tem_test.py b/tests/run_tests/driver_borehole_tem_test.py new file mode 100644 index 000000000..2977afa08 --- /dev/null +++ b/tests/run_tests/driver_borehole_tem_test.py @@ -0,0 +1,227 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# Copyright (c) 2023-2026 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 +from geoapps_utils.modelling.plates import PlateModel +from geoh5py.workspace import Workspace +from pymatsolver.direct import Mumps + +from simpeg_drivers.electromagnetics.borehole_time_domain.forward import ( + BoreholeTDEMForwardDriver, + BoreholeTDEMForwardOptions, +) +from simpeg_drivers.electromagnetics.borehole_time_domain.inversion import ( + BoreholeTDEMInversionDriver, + BoreholeTDEMInversionOptions, +) +from simpeg_drivers.utils.synthetics.driver import ( + SyntheticsComponents, +) +from simpeg_drivers.utils.synthetics.options import ( + MeshOptions, + ModelOptions, + SurveyOptions, + SyntheticsComponentsOptions, +) +from tests.utils.targets import check_target, get_inversion_output, get_workspace + + +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": 4.6386e-11, "phi_d": 1.4840e03, "phi_m": 2.8200e04} + + +def test_borehole_tem_fwr_run( + tmp_path: Path, + caplog, + n_grid_points=4, + refinement=(2,), + cell_size=(20.0, 20.0, 20.0), + pytest=True, +): + if pytest and caplog: + caplog.set_level(INFO) + # Run the forward + opts = SyntheticsComponentsOptions( + method="borehole tdem", + refine_plate=True, + survey=SurveyOptions( + n_stations=n_grid_points * 2, + n_lines=n_grid_points, + drape=5.0, + topography=lambda x, y: np.zeros(x.shape), + ), + mesh=MeshOptions( + u_cell_size=cell_size[0], + v_cell_size=cell_size[1], + w_cell_size=cell_size[2], + survey_refinement=list(refinement), + topography_refinement=[0, 0, 1], + plate_refinement=[1], + padding_distance=1000.0, + ), + model=ModelOptions( + background=0.001, + anomaly=1, + plate=PlateModel( + strike_length=40.0, + dip_length=40.0, + width=40.0, + easting=0.0, + northing=-40.0, + elevation=-40.0, + ), + ), + ) + with get_workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + components = SyntheticsComponents(geoh5, options=opts) + components.mesh.origin = ( + np.r_[ + components.mesh.origin["x"], + components.mesh.origin["y"], + components.mesh.origin["z"], + ] + + np.r_[-2.5, -2.5, 0.0] + ) + # components.survey.complement.vertices = components.survey.complement.vertices + np.r_[-100.0, -100.0, 0.0] + params = BoreholeTDEMForwardOptions.build( + geoh5=geoh5, + mesh=components.mesh, + topography_object=components.topography, + data_object=components.survey, + starting_model=components.model, + a_channel_bool=True, + u_channel_bool=True, + v_channel_bool=True, + data_units="Ground B (T/A)", + ) + + fwr_driver = BoreholeTDEMForwardDriver(params) + fwr_driver.run() + + +def test_borehole_tem_run(tmp_path: Path, max_iterations=1, pytest=True): + workpath = tmp_path / "inversion_test.ui.geoh5" + if pytest: + workpath = ( + tmp_path.parent / "test_borehole_tem_fwr_run0" / "inversion_test.ui.geoh5" + ) + + with Workspace(workpath) as geoh5: + components = SyntheticsComponents(geoh5) + data = {} + uncertainties = {} + channels = { + "a": "a", + "u": "u", + "v": "v", + } + + for chan in channels: + data[chan] = [] + uncertainties[f"{chan} uncertainties"] = [] + for ii, _ in enumerate(components.survey.channels): + data_entity = geoh5.get_entity(f"Iteration_0_{chan}_[{ii}]")[0].copy( + parent=components.survey + ) + data[chan].append(data_entity) + + uncert = components.survey.add_data( + { + f"uncertainty_{chan}_[{ii}]": { + "values": np.abs(data_entity.values) * 0.0 + 1e-12 + } + } + ) + uncertainties[f"{chan} uncertainties"].append(uncert) + + components.survey.add_components_data(data) + components.survey.add_components_data(uncertainties) + + data_kwargs = {} + for chan in channels: + data_kwargs[f"{chan}_channel"] = components.survey.fetch_property_group( + name=f"{chan}" + ) + data_kwargs[f"{chan}_uncertainty"] = components.survey.fetch_property_group( + name=f"{chan} uncertainties" + ) + + orig_dBzdt = geoh5.get_entity("Iteration_0_a_[0]")[0].values + + # Run the inverse + params = BoreholeTDEMInversionOptions.build( + geoh5=geoh5, + mesh=components.mesh, + topography_object=components.topography, + data_object=components.survey, + starting_model=1e-3, + reference_model=1e-3, + chi_factor=0.1, + s_norm=0.0, + x_norm=2.0, + y_norm=2.0, + z_norm=2.0, + alpha_s=0e-0, + lower_bound=2e-6, + upper_bound=1e2, + max_global_iterations=max_iterations, + initial_beta_ratio=1e1, + starting_chi_factor=0.1, + cooling_rate=1, + max_cg_iterations=200, + percentile=100, + sens_wts_threshold=0.1, + data_units="Ground B (T/A)", + save_sensitivities=True, + **data_kwargs, + ) + params.write_ui_json(path=tmp_path / "Inv_run.ui.json") + + driver = BoreholeTDEMInversionDriver(params) + driver.run() + + with geoh5.open() as run_ws: + output = get_inversion_output( + driver.params.geoh5.h5file, driver.params.out_group.uid + ) + assert driver.inversion_data.entity.tx_id_property.name == "Transmitter ID" + output["data"] = orig_dBzdt + if pytest: + check_target(output, target_run) + nan_ind = np.isnan(run_ws.get_entity("Iteration_0_model")[0].values) + inactive_ind = run_ws.get_entity("active_cells")[0].values == 0 + assert np.all(nan_ind == inactive_ind) + + +if __name__ == "__main__": + # Full run + test_borehole_tem_fwr_run( + Path("./"), + None, + n_grid_points=5, + refinement=(2, 2, 2), + cell_size=(5.0, 5.0, 5.0), + pytest=False, + ) + test_borehole_tem_run( + Path("./"), + max_iterations=15, + pytest=False, + )