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 ea352934..0048b67b 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -296,15 +296,15 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h41580af_10 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib=1.3.2=h25fd6f3_2 - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index 60baaa86..c95fa5b9 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -165,14 +165,14 @@ dependencies: - yaml=0.2.5=h280c20c_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 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 b910a5f6..31d6a5d3 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -282,14 +282,14 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h507cc87_10 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index 00e9fc46..c9833c04 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -152,14 +152,14 @@ dependencies: - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 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 7ad64685..8a0130ff 100644 --- a/environments/py-3.13-linux-64-dev.conda.lock.yml +++ b/environments/py-3.13-linux-64-dev.conda.lock.yml @@ -293,15 +293,15 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h41580af_10 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib=1.3.2=h25fd6f3_2 - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-linux-64.conda.lock.yml b/environments/py-3.13-linux-64.conda.lock.yml index b27e15a0..c9b5b8dd 100644 --- a/environments/py-3.13-linux-64.conda.lock.yml +++ b/environments/py-3.13-linux-64.conda.lock.yml @@ -162,14 +162,14 @@ dependencies: - yaml=0.2.5=h280c20c_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 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 54d2ce0c..1c18d266 100644 --- a/environments/py-3.13-win-64-dev.conda.lock.yml +++ b/environments/py-3.13-win-64-dev.conda.lock.yml @@ -281,14 +281,14 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h507cc87_10 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-win-64.conda.lock.yml b/environments/py-3.13-win-64.conda.lock.yml index 15360226..501dd483 100644 --- a/environments/py-3.13-win-64.conda.lock.yml +++ b/environments/py-3.13-win-64.conda.lock.yml @@ -151,14 +151,14 @@ dependencies: - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-linux-64-dev.conda.lock.yml b/environments/py-3.14-linux-64-dev.conda.lock.yml index b24a4ca4..6d90f6b9 100644 --- a/environments/py-3.14-linux-64-dev.conda.lock.yml +++ b/environments/py-3.14-linux-64-dev.conda.lock.yml @@ -294,15 +294,15 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h41580af_10 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib=1.3.2=h25fd6f3_2 - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-linux-64.conda.lock.yml b/environments/py-3.14-linux-64.conda.lock.yml index ae3c6674..5bd7b6f1 100644 --- a/environments/py-3.14-linux-64.conda.lock.yml +++ b/environments/py-3.14-linux-64.conda.lock.yml @@ -163,14 +163,14 @@ dependencies: - yaml=0.2.5=h280c20c_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=hceb46e0_1 - zstd=1.5.7=hb78ec9c_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-win-64-dev.conda.lock.yml b/environments/py-3.14-win-64-dev.conda.lock.yml index cc7cab56..eb63068a 100644 --- a/environments/py-3.14-win-64-dev.conda.lock.yml +++ b/environments/py-3.14-win-64-dev.conda.lock.yml @@ -282,14 +282,14 @@ dependencies: - zarr=2.14.2=pyhd8ed1ab_0 - zeromq=4.3.5=h507cc87_10 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-win-64.conda.lock.yml b/environments/py-3.14-win-64.conda.lock.yml index 7fbe4ac1..96f3b8c8 100644 --- a/environments/py-3.14-win-64.conda.lock.yml +++ b/environments/py-3.14-win-64.conda.lock.yml @@ -152,14 +152,14 @@ dependencies: - yaml=0.2.5=h6a83c73_3 - zarr=2.14.2=pyhd8ed1ab_0 - zict=3.0.0=pyhd8ed1ab_1 - - zipp=3.23.0=pyhcf101f3_1 + - zipp=3.23.1=pyhcf101f3_0 - zlib-ng=2.3.3=h0261ad2_1 - zstd=1.5.7=h534d264_6 - pip: - - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@57806e78469cb881a8d5dceae645336e77310bf4 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de variables: KMP_WARNINGS: 0 diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index d9eaf37a..f5c7489d 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -678,7 +678,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -764,7 +764,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -1150,7 +1150,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyh6dadd2b_0.conda hash: md5: 290d6b8ba791f99e068327e5d17e8462 @@ -1174,7 +1174,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1222,7 +1222,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1339,7 +1339,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1542,7 +1542,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1934,7 +1934,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1963,7 +1963,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -2107,7 +2107,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2251,7 +2251,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2349,7 +2349,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2394,7 +2394,7 @@ package: matplotlib-inline: '>=0.1.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda @@ -2586,7 +2586,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2660,7 +2660,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2690,7 +2690,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2717,7 +2717,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2794,7 +2794,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2822,7 +2822,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2852,7 +2852,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2885,7 +2885,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '>=3.10' + python: '' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2921,7 +2921,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2981,7 +2981,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -3012,7 +3012,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3128,7 +3128,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -4729,7 +4729,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4979,7 +4979,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -5140,7 +5140,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5390,7 +5390,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5497,7 +5497,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5641,7 +5641,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 @@ -5665,7 +5665,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5833,7 +5833,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5864,7 +5864,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5999,7 +5999,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -6057,7 +6057,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6121,7 +6121,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: @@ -6152,7 +6152,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6230,7 +6230,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6255,7 +6255,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6590,7 +6590,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6623,7 +6623,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6700,7 +6700,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6880,7 +6880,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6929,7 +6929,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -7321,7 +7321,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7349,7 +7349,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7453,7 +7453,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7559,7 +7559,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7683,7 +7683,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -8268,27 +8268,27 @@ package: category: main optional: false - name: zipp - version: 3.23.0 + version: 3.23.1 manager: conda platform: linux-64 dependencies: python: '' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda hash: - md5: 30cd29cb87d819caead4d55184c1d115 - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: e1c36c6121a7c9c76f2f148f1e83b983 + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca category: main optional: false - name: zipp - version: 3.23.0 + version: 3.23.1 manager: conda platform: win-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda hash: - md5: 30cd29cb87d819caead4d55184c1d115 - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: e1c36c6121a7c9c76f2f148f1e83b983 + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca category: main optional: false - name: zlib @@ -8361,43 +8361,43 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev25+50ea38e + version: 0.7.0a4.dev14+6b26f39 manager: pip platform: linux-64 dependencies: - geoh5py: 0.12.3.dev301+0128671d + geoh5py: 0.13.0a4.dev5+5304d94b 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@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb hash: - sha256: 50ea38e98956affec5d7468f63c3ce5f80520522 + sha256: 6b26f39967277d6384c6fc28d8868c1104dfddeb source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev25+50ea38e + version: 0.7.0a4.dev14+6b26f39 manager: pip platform: win-64 dependencies: - geoh5py: 0.12.3.dev301+0128671d + geoh5py: 0.13.0a4.dev5+5304d94b 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@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb hash: - sha256: 50ea38e98956affec5d7468f63c3ce5f80520522 + sha256: 6b26f39967277d6384c6fc28d8868c1104dfddeb source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb category: main optional: false - name: geoh5py - version: 0.12.3.dev301+0128671d + version: 0.13.0a4.dev5+5304d94b manager: pip platform: linux-64 dependencies: @@ -8405,16 +8405,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 hash: - sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + sha256: 5304d94ba76f57f82e7519cdcca18b6f6b89a557 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 category: main optional: false - name: geoh5py - version: 0.12.3.dev301+0128671d + version: 0.13.0a4.dev5+5304d94b manager: pip platform: win-64 dependencies: @@ -8422,22 +8422,22 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 hash: - sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + sha256: 5304d94ba76f57f82e7519cdcca18b6f6b89a557 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev7+57806e7 + version: 0.2.0a3 manager: pip platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev25+50ea38e - geoh5py: 0.12.3.dev301+0128671d + geoapps-utils: 0.7.0a4.dev14+6b26f39 + geoh5py: 0.13.0a4.dev5+5304d94b numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8450,13 +8450,13 @@ package: category: main optional: false - name: grid-apps - version: 0.2.0a3.dev7+57806e7 + version: 0.2.0a3 manager: pip platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev25+50ea38e - geoh5py: 0.12.3.dev301+0128671d + geoapps-utils: 0.7.0a4.dev14+6b26f39 + geoh5py: 0.13.0a4.dev5+5304d94b numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8469,7 +8469,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a3.dev9+g3430f930a manager: pip platform: linux-64 dependencies: @@ -8482,16 +8482,16 @@ package: pymatsolver: '>=0.3' scipy: '>=1.8' typing-extensions: '*' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 3430f930a84f83a577e200677a77824e14f198de source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a3.dev9+g3430f930a manager: pip platform: win-64 dependencies: @@ -8504,11 +8504,11 @@ package: pymatsolver: '>=0.3' scipy: '>=1.8' typing-extensions: '*' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 3430f930a84f83a577e200677a77824e14f198de source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de category: main optional: false diff --git a/py-3.13.conda-lock.yml b/py-3.13.conda-lock.yml index 91bcd53a..708169d1 100644 --- a/py-3.13.conda-lock.yml +++ b/py-3.13.conda-lock.yml @@ -137,7 +137,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -226,7 +226,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -328,7 +328,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -354,7 +354,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -666,7 +666,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -678,7 +678,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -751,7 +751,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -764,7 +764,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -1150,7 +1150,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyh6dadd2b_0.conda hash: md5: 290d6b8ba791f99e068327e5d17e8462 @@ -1162,7 +1162,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1174,7 +1174,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1210,7 +1210,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1222,7 +1222,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1327,7 +1327,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1339,7 +1339,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1530,7 +1530,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1542,7 +1542,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1557,7 +1557,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1572,7 +1572,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1885,7 +1885,7 @@ package: libdlf: '' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1901,7 +1901,7 @@ package: platform: win-64 dependencies: libdlf: '' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1919,7 +1919,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1932,7 +1932,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1947,7 +1947,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1961,7 +1961,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -2088,7 +2088,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2105,7 +2105,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2236,7 +2236,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2249,7 +2249,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2322,7 +2322,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2347,7 +2347,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2370,7 +2370,7 @@ package: pexpect: '>4.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda @@ -2392,7 +2392,7 @@ package: matplotlib-inline: '>=0.1.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda @@ -2571,7 +2571,7 @@ package: platform: linux-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2584,7 +2584,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2646,7 +2646,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2658,7 +2658,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2672,7 +2672,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2688,7 +2688,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2702,7 +2702,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2715,7 +2715,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2775,7 +2775,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2792,7 +2792,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2806,7 +2806,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2820,7 +2820,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2833,7 +2833,7 @@ package: platform: linux-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2850,7 +2850,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2883,7 +2883,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '>=3.10' + python: '' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2899,7 +2899,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2919,7 +2919,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2949,7 +2949,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2979,7 +2979,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2997,7 +2997,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3010,7 +3010,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3107,7 +3107,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3126,7 +3126,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -4553,7 +4553,7 @@ package: libfreetype6: '>=2.14.1' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4580,7 +4580,7 @@ package: kiwisolver: '>=1.3.1' libfreetype: '>=2.14.1' libfreetype6: '>=2.14.1' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4716,7 +4716,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4729,7 +4729,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4743,7 +4743,7 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - _openmp_mutex: '*' + _openmp_mutex: '>=4.5' libgcc: '>=14' libstdcxx: '>=14' llvm-openmp: '>=22.1.1' @@ -4952,7 +4952,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4979,7 +4979,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -5122,7 +5122,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5140,7 +5140,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5378,7 +5378,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5390,7 +5390,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5405,7 +5405,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python_abi: 3.13.* @@ -5420,7 +5420,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python-tzdata: '' @@ -5485,7 +5485,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5497,7 +5497,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5625,7 +5625,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 @@ -5637,7 +5637,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 @@ -5649,7 +5649,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5661,7 +5661,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5817,7 +5817,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5829,7 +5829,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5843,7 +5843,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5860,7 +5860,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5911,7 +5911,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -5927,7 +5927,7 @@ package: platform: win-64 dependencies: mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -5975,7 +5975,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5995,7 +5995,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -6041,7 +6041,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6053,7 +6053,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6098,7 +6098,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: @@ -6117,7 +6117,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: @@ -6133,7 +6133,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6148,7 +6148,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6215,7 +6215,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6228,7 +6228,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6241,7 +6241,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6253,7 +6253,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6573,7 +6573,7 @@ package: platform: linux-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6588,7 +6588,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6605,7 +6605,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6621,7 +6621,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6685,7 +6685,7 @@ package: platform: linux-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6698,7 +6698,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6786,7 +6786,7 @@ package: joblib: '>=1.3.0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.10.0' @@ -6803,7 +6803,7 @@ package: platform: win-64 dependencies: joblib: '>=1.3.0' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.13.* scipy: '>=1.10.0' @@ -6830,7 +6830,7 @@ package: libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' libstdcxx: '>=14' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.13,<3.14.0a0' python_abi: 3.13.* url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py313h4b8bb8b_0.conda @@ -6847,7 +6847,7 @@ package: libblas: '>=3.9.0,<4.0a0' libcblas: '>=3.9.0,<4.0a0' liblapack: '>=3.9.0,<4.0a0' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.13,<3.14.0a0' python_abi: 3.13.* ucrt: '>=10.0.20348.0' @@ -6865,7 +6865,7 @@ package: platform: linux-64 dependencies: __linux: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda hash: md5: 28eb91468df04f655a57bcfbb35fc5c5 @@ -6878,7 +6878,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6915,7 +6915,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6927,7 +6927,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -7307,7 +7307,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7319,7 +7319,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7333,7 +7333,7 @@ package: dependencies: __unix: '' ptyprocess: '' - python: '>=3.10' + python: '' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda hash: @@ -7347,7 +7347,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7439,7 +7439,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7451,7 +7451,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7543,7 +7543,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda hash: md5: e5ce43272193b38c2e9037446c1d9206 @@ -7557,7 +7557,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7669,7 +7669,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7681,7 +7681,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -8209,27 +8209,27 @@ package: category: main optional: false - name: zipp - version: 3.23.0 + version: 3.23.1 manager: conda platform: linux-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda hash: - md5: 30cd29cb87d819caead4d55184c1d115 - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: e1c36c6121a7c9c76f2f148f1e83b983 + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca category: main optional: false - name: zipp - version: 3.23.0 + version: 3.23.1 manager: conda platform: win-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda hash: - md5: 30cd29cb87d819caead4d55184c1d115 - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: e1c36c6121a7c9c76f2f148f1e83b983 + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca category: main optional: false - name: zlib @@ -8302,43 +8302,43 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev25+50ea38e + version: 0.7.0a4.dev14+6b26f39 manager: pip platform: linux-64 dependencies: - geoh5py: 0.12.3.dev301+0128671d + geoh5py: 0.13.0a4.dev5+5304d94b 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@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb hash: - sha256: 50ea38e98956affec5d7468f63c3ce5f80520522 + sha256: 6b26f39967277d6384c6fc28d8868c1104dfddeb source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev25+50ea38e + version: 0.7.0a4.dev14+6b26f39 manager: pip platform: win-64 dependencies: - geoh5py: 0.12.3.dev301+0128671d + geoh5py: 0.13.0a4.dev5+5304d94b 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@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb hash: - sha256: 50ea38e98956affec5d7468f63c3ce5f80520522 + sha256: 6b26f39967277d6384c6fc28d8868c1104dfddeb source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb category: main optional: false - name: geoh5py - version: 0.12.3.dev301+0128671d + version: 0.13.0a4.dev5+5304d94b manager: pip platform: linux-64 dependencies: @@ -8346,16 +8346,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 hash: - sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + sha256: 5304d94ba76f57f82e7519cdcca18b6f6b89a557 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 category: main optional: false - name: geoh5py - version: 0.12.3.dev301+0128671d + version: 0.13.0a4.dev5+5304d94b manager: pip platform: win-64 dependencies: @@ -8363,22 +8363,22 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 hash: - sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + sha256: 5304d94ba76f57f82e7519cdcca18b6f6b89a557 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev7+57806e7 + version: 0.2.0a3 manager: pip platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev25+50ea38e - geoh5py: 0.12.3.dev301+0128671d + geoapps-utils: 0.7.0a4.dev14+6b26f39 + geoh5py: 0.13.0a4.dev5+5304d94b numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8391,13 +8391,13 @@ package: category: main optional: false - name: grid-apps - version: 0.2.0a3.dev7+57806e7 + version: 0.2.0a3 manager: pip platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev25+50ea38e - geoh5py: 0.12.3.dev301+0128671d + geoapps-utils: 0.7.0a4.dev14+6b26f39 + geoh5py: 0.13.0a4.dev5+5304d94b numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8410,7 +8410,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a3.dev9+g3430f930a manager: pip platform: linux-64 dependencies: @@ -8422,16 +8422,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 3430f930a84f83a577e200677a77824e14f198de source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a3.dev9+g3430f930a manager: pip platform: win-64 dependencies: @@ -8443,11 +8443,11 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 3430f930a84f83a577e200677a77824e14f198de source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de category: main optional: false diff --git a/py-3.14.conda-lock.yml b/py-3.14.conda-lock.yml index ec0cc0c9..cee284d7 100644 --- a/py-3.14.conda-lock.yml +++ b/py-3.14.conda-lock.yml @@ -137,7 +137,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '>=3.10' + python: '' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda hash: @@ -226,7 +226,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -328,7 +328,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.3.0-pyhcf101f3_0.conda hash: @@ -354,7 +354,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda hash: md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -666,7 +666,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -678,7 +678,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda hash: md5: f1976ce927373500cc19d3c0b2c85177 @@ -742,7 +742,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -755,7 +755,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -1141,7 +1141,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.2-pyh6dadd2b_0.conda hash: md5: 290d6b8ba791f99e068327e5d17e8462 @@ -1153,7 +1153,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1165,7 +1165,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -1201,7 +1201,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1213,7 +1213,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1318,7 +1318,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1330,7 +1330,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1521,7 +1521,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1533,7 +1533,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1548,7 +1548,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1563,7 +1563,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1871,7 +1871,7 @@ package: libdlf: '' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1887,7 +1887,7 @@ package: platform: win-64 dependencies: libdlf: '' - numpy: '>=1.22' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1905,7 +1905,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1918,7 +1918,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1933,7 +1933,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1947,7 +1947,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -2074,7 +2074,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2091,7 +2091,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '>=3.9' + python: '' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -2222,7 +2222,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2235,7 +2235,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda hash: @@ -2308,7 +2308,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2333,7 +2333,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '>=3.10' + python: '' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2356,7 +2356,7 @@ package: pexpect: '>4.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda @@ -2378,7 +2378,7 @@ package: matplotlib-inline: '>=0.1.6' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.14.0' - python: '>=3.12' + python: '' stack_data: '>=0.6.0' traitlets: '>=5.13.0' url: https://repo.prefix.dev/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda @@ -2557,7 +2557,7 @@ package: platform: linux-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2570,7 +2570,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2632,7 +2632,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2644,7 +2644,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.1.1-pyhcf101f3_0.conda hash: md5: 89bf346df77603055d3c8fe5811691e6 @@ -2658,7 +2658,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2674,7 +2674,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '>=3.10' + python: '' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2688,7 +2688,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2701,7 +2701,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2761,7 +2761,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2778,7 +2778,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.4-pyhcf101f3_0.conda hash: md5: 6466d205c69ad4f33ac9100a93af55b5 @@ -2792,7 +2792,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2806,7 +2806,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.1-pyhcf101f3_0.conda hash: md5: 0c3b465ceee138b9c39279cc02e5c4a0 @@ -2819,7 +2819,7 @@ package: platform: linux-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2836,7 +2836,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '>=3.10' + python: '' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2869,7 +2869,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '>=3.10' + python: '' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2885,7 +2885,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2905,7 +2905,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '>=3.9' + python: '' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2935,7 +2935,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2965,7 +2965,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '>=3.10' + python: '' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2983,7 +2983,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2996,7 +2996,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -3093,7 +3093,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -3112,7 +3112,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '>=3.10' + python: '' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -4539,7 +4539,7 @@ package: libfreetype6: '>=2.14.1' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4566,7 +4566,7 @@ package: kiwisolver: '>=1.3.1' libfreetype: '>=2.14.1' libfreetype6: '>=2.14.1' - numpy: '>=1.23' + numpy: '>=1.23,<3' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4702,7 +4702,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4715,7 +4715,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4729,7 +4729,7 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - _openmp_mutex: '*' + _openmp_mutex: '>=4.5' libgcc: '>=14' libstdcxx: '>=14' llvm-openmp: '>=22.1.1' @@ -4938,7 +4938,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4965,7 +4965,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '>=3.10' + python: '' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -5108,7 +5108,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5126,7 +5126,7 @@ package: jupyterlab: '>=4.5.6,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '>=3.10' + python: '' tornado: '>=6.2.0' url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.5-pyhcf101f3_0.conda hash: @@ -5364,7 +5364,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5376,7 +5376,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.8' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5391,7 +5391,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python_abi: 3.14.* @@ -5406,7 +5406,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.26.0' + numpy: '>=1.23,<3' python: '' python-dateutil: '>=2.8.2' python-tzdata: '' @@ -5471,7 +5471,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5483,7 +5483,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5611,7 +5611,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 @@ -5623,7 +5623,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.6-pyhcf101f3_0.conda hash: md5: 89c0b6d1793601a2a3a3f7d2d3d8b937 @@ -5635,7 +5635,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5647,7 +5647,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5803,7 +5803,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5815,7 +5815,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5829,7 +5829,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5846,7 +5846,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '>=3.10' + python: '' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5897,7 +5897,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -5913,7 +5913,7 @@ package: platform: win-64 dependencies: mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.22.4' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -5961,7 +5961,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5981,7 +5981,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '>=3.10' + python: '' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -6027,7 +6027,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6039,7 +6039,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -6084,7 +6084,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: @@ -6103,7 +6103,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '>=3.10' + python: '' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.3-pyhc364b38_1.conda hash: @@ -6119,7 +6119,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6134,7 +6134,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.1.0-pyhcf101f3_0.conda hash: md5: 67d1790eefa81ed305b89d8e314c7923 @@ -6203,7 +6203,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6216,7 +6216,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -6229,7 +6229,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6241,7 +6241,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6561,7 +6561,7 @@ package: platform: linux-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6576,7 +6576,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '>=3.10' + python: '' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6593,7 +6593,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6609,7 +6609,7 @@ package: certifi: '>=2023.5.7' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '>=3.10' + python: '' urllib3: '>=1.26,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda hash: @@ -6673,7 +6673,7 @@ package: platform: linux-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6686,7 +6686,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6774,7 +6774,7 @@ package: joblib: '>=1.3.0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.10.0' @@ -6791,7 +6791,7 @@ package: platform: win-64 dependencies: joblib: '>=1.3.0' - numpy: '>=1.24.1' + numpy: '>=1.23,<3' python: '' python_abi: 3.14.* scipy: '>=1.10.0' @@ -6818,7 +6818,7 @@ package: libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' libstdcxx: '>=14' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.14,<3.15.0a0' python_abi: 3.14.* url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda @@ -6835,7 +6835,7 @@ package: libblas: '>=3.9.0,<4.0a0' libcblas: '>=3.9.0,<4.0a0' liblapack: '>=3.9.0,<4.0a0' - numpy: <2.7 + numpy: '>=1.25.2' python: '>=3.14,<3.15.0a0' python_abi: 3.14.* ucrt: '>=10.0.20348.0' @@ -6853,7 +6853,7 @@ package: platform: linux-64 dependencies: __linux: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda hash: md5: 28eb91468df04f655a57bcfbb35fc5c5 @@ -6866,7 +6866,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6903,7 +6903,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6915,7 +6915,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.9' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -7295,7 +7295,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7307,7 +7307,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7321,7 +7321,7 @@ package: dependencies: __unix: '' ptyprocess: '' - python: '>=3.10' + python: '' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda hash: @@ -7335,7 +7335,7 @@ package: platform: win-64 dependencies: __win: '' - python: '>=3.10' + python: '' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7427,7 +7427,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7439,7 +7439,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda hash: md5: b5325cf06a000c5b14970462ff5e4d58 @@ -7531,7 +7531,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda hash: md5: e5ce43272193b38c2e9037446c1d9206 @@ -7545,7 +7545,7 @@ package: dependencies: __win: '' colorama: '' - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7657,7 +7657,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7669,7 +7669,7 @@ package: manager: conda platform: win-64 dependencies: - python: '>=3.10' + python: '' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -8228,27 +8228,27 @@ package: category: main optional: false - name: zipp - version: 3.23.0 + version: 3.23.1 manager: conda platform: linux-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda hash: - md5: 30cd29cb87d819caead4d55184c1d115 - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: e1c36c6121a7c9c76f2f148f1e83b983 + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca category: main optional: false - name: zipp - version: 3.23.0 + version: 3.23.1 manager: conda platform: win-64 dependencies: - python: '>=3.10' - url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + python: '' + url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.1-pyhcf101f3_0.conda hash: - md5: 30cd29cb87d819caead4d55184c1d115 - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: e1c36c6121a7c9c76f2f148f1e83b983 + sha256: 523616c0530d305d2216c2b4a8dfd3872628b60083255b89c5e0d8c42e738cca category: main optional: false - name: zlib @@ -8321,43 +8321,43 @@ package: category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev25+50ea38e + version: 0.7.0a4.dev14+6b26f39 manager: pip platform: linux-64 dependencies: - geoh5py: 0.12.3.dev301+0128671d + geoh5py: 0.13.0a4.dev5+5304d94b 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@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb hash: - sha256: 50ea38e98956affec5d7468f63c3ce5f80520522 + sha256: 6b26f39967277d6384c6fc28d8868c1104dfddeb source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb category: main optional: false - name: geoapps-utils - version: 0.7.0a3.dev25+50ea38e + version: 0.7.0a4.dev14+6b26f39 manager: pip platform: win-64 dependencies: - geoh5py: 0.12.3.dev301+0128671d + geoh5py: 0.13.0a4.dev5+5304d94b 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@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb hash: - sha256: 50ea38e98956affec5d7468f63c3ce5f80520522 + sha256: 6b26f39967277d6384c6fc28d8868c1104dfddeb source: type: url - url: git+https://github.com/MiraGeoscience/geoapps-utils.git@50ea38e98956affec5d7468f63c3ce5f80520522 + url: git+https://github.com/MiraGeoscience/geoapps-utils.git@6b26f39967277d6384c6fc28d8868c1104dfddeb category: main optional: false - name: geoh5py - version: 0.12.3.dev301+0128671d + version: 0.13.0a4.dev5+5304d94b manager: pip platform: linux-64 dependencies: @@ -8365,16 +8365,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 hash: - sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + sha256: 5304d94ba76f57f82e7519cdcca18b6f6b89a557 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 category: main optional: false - name: geoh5py - version: 0.12.3.dev301+0128671d + version: 0.13.0a4.dev5+5304d94b manager: pip platform: win-64 dependencies: @@ -8382,22 +8382,22 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 hash: - sha256: 0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + sha256: 5304d94ba76f57f82e7519cdcca18b6f6b89a557 source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@0128671df31abe3fbf12e1a2dcc4f9c1ba7818a5 + url: git+https://github.com/MiraGeoscience/geoh5py.git@5304d94ba76f57f82e7519cdcca18b6f6b89a557 category: main optional: false - name: grid-apps - version: 0.2.0a3.dev7+57806e7 + version: 0.2.0a3 manager: pip platform: linux-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev25+50ea38e - geoh5py: 0.12.3.dev301+0128671d + geoapps-utils: 0.7.0a4.dev14+6b26f39 + geoh5py: 0.13.0a4.dev5+5304d94b numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8410,13 +8410,13 @@ package: category: main optional: false - name: grid-apps - version: 0.2.0a3.dev7+57806e7 + version: 0.2.0a3 manager: pip platform: win-64 dependencies: discretize: '>=0.12.0,<0.13.0' - geoapps-utils: 0.7.0a3.dev25+50ea38e - geoh5py: 0.12.3.dev301+0128671d + geoapps-utils: 0.7.0a4.dev14+6b26f39 + geoh5py: 0.13.0a4.dev5+5304d94b numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8429,7 +8429,7 @@ package: category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a3.dev9+g3430f930a manager: pip platform: linux-64 dependencies: @@ -8441,16 +8441,16 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 3430f930a84f83a577e200677a77824e14f198de source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de category: main optional: false - name: mira-simpeg - version: 0.25.0.1a2.dev12+gf7dd0d37a + version: 0.25.0.1a3.dev9+g3430f930a manager: pip platform: win-64 dependencies: @@ -8462,11 +8462,11 @@ package: numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de hash: - sha256: f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + sha256: 3430f930a84f83a577e200677a77824e14f198de source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@f7dd0d37aac285dd9ece26396ee39ae72bd6d18d + url: git+https://github.com/MiraGeoscience/simpeg.git@3430f930a84f83a577e200677a77824e14f198de category: main optional: false diff --git a/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json b/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json index 145a3cd4..9bb5f5fe 100644 --- a/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/apparent_conductivity_inversion.ui.json @@ -226,7 +226,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json index 83f9d62f..045f4502 100644 --- a/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_2d_inversion.ui.json @@ -264,7 +264,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json index a87752ae..b6c83cfd 100644 --- a/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/direct_current_3d_inversion.ui.json @@ -219,7 +219,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json index 632e65b8..88f68149 100644 --- a/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem1d_inversion.ui.json @@ -287,7 +287,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json index ece2e082..ca2cdc3f 100644 --- a/simpeg_drivers-assets/uijson/fdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/fdem_inversion.ui.json @@ -409,7 +409,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json index 37e94675..8993ad5a 100644 --- a/simpeg_drivers-assets/uijson/gravity_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/gravity_inversion.ui.json @@ -488,7 +488,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json index 051734a3..e8624d25 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_2d_inversion.ui.json @@ -275,7 +275,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json index 9ef7b3f8..1b337393 100644 --- a/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/induced_polarization_3d_inversion.ui.json @@ -235,7 +235,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json index 8712350a..5bf0fc78 100644 --- a/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_cross_gradient_inversion.ui.json @@ -191,7 +191,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json index b9377ddf..55723cc7 100644 --- a/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_petrophysics_inversion.ui.json @@ -167,7 +167,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "enabled": false }, diff --git a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json index 2a11c104..bfa35fe3 100644 --- a/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/joint_surveys_inversion.ui.json @@ -226,7 +226,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json index f025304d..d3013771 100644 --- a/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_scalar_inversion.ui.json @@ -521,7 +521,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json index 0060ded7..891be062 100644 --- a/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetic_vector_inversion.ui.json @@ -569,7 +569,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json new file mode 100644 index 00000000..1405802b --- /dev/null +++ b/simpeg_drivers-assets/uijson/magnetic_vector_pde_forward.ui.json @@ -0,0 +1,242 @@ +{ + "version": "0.4.0", + "title": "Magnetic Vector (MVI) PDE Forward", + "icon": "surveyairbornemagnetics", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg_drivers", + "run_command": "simpeg_drivers.potential_fields.magnetic_vector_pde.forward", + "geoh5": "", + "monitoring_directory": "", + "inducing_field_declination": { + "min": -180.0, + "max": 180.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Declination (deg)", + "value": 0.0 + }, + "inducing_field_inclination": { + "min": -90.0, + "max": 90.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Inclination (deg)", + "value": 90.0 + }, + "inducing_field_strength": { + "min": 0.0, + "max": 100000.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Strength (nT)", + "value": 50000.0 + }, + "topography_object": { + "main": true, + "group": "Topography", + "label": "Topography", + "meshType": [ + "{202c5db1-a56d-4004-9cad-baafd8899406}", + "{6a057fdc-b355-11e3-95be-fd84a7ffcb88}", + "{f26feba3-aded-494b-b9e9-b2bbcbe298e1}", + "{48f5054a-1c5c-4ca4-9048-80f36dc60a06}", + "{b020a277-90e2-4cd7-84d6-612ee3f25051}" + ], + "value": "", + "optional": true, + "enabled": true, + "tooltip": "Select a topography object to define the active cells for inversion" + }, + "topography": { + "association": [ + "Vertex", + "Cell" + ], + "dataType": "Float", + "group": "Topography", + "main": true, + "optional": true, + "enabled": false, + "label": "Elevation channel", + "tooltip": "Set elevation from channel. If not set the topography will be set from the geometry of the selected 'topography' object", + "parent": "topography_object", + "dependency": "topography_object", + "dependencyType": "enabled", + "value": "", + "verbose": 2 + }, + "active_model": { + "association": "Cell", + "dataType": [ + "Referenced", + "Boolean", + "Integer" + ], + "group": "Topography", + "main": true, + "enabled": false, + "dependency": "topography_object", + "dependencyType": "disabled", + "label": "Active model", + "tooltip": "Provide the active cell Boolean model directly if topography not set", + "parent": "mesh", + "value": "" + }, + "data_object": { + "main": true, + "group": "Survey", + "label": "Object", + "meshType": [ + "{202c5db1-a56d-4004-9cad-baafd8899406}", + "{6a057fdc-b355-11e3-95be-fd84a7ffcb88}", + "{f26feba3-aded-494b-b9e9-b2bbcbe298e1}", + "{48f5054a-1c5c-4ca4-9048-80f36dc60a06}", + "{b020a277-90e2-4cd7-84d6-612ee3f25051}", + "{4b99204c-d133-4579-a916-a9c8b98cfccb}", + "{028e4905-cc97-4dab-b1bf-d76f58b501b5}" + ], + "value": "" + }, + "tmi_channel_bool": { + "group": "Survey", + "main": true, + "label": "TMI (nT)", + "value": true + }, + "bx_channel_bool": { + "group": "Survey", + "main": true, + "label": "Bx (nT)", + "value": false + }, + "by_channel_bool": { + "group": "Survey", + "main": true, + "label": "By (nT)", + "value": false + }, + "bz_channel_bool": { + "group": "Survey", + "main": true, + "label": "Bz (nT)", + "value": false + }, + "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" + }, + "starting_model": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "parent": "mesh", + "label": "Susceptibility (SI)", + "property": "", + "value": 0.0001 + }, + "starting_inclination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Inclination (deg)", + "property": "", + "value": 0.0 + }, + "starting_declination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Declination (deg)", + "property": "", + "value": 0.0 + }, + "n_cpu": { + "min": 1, + "group": "Compute", + "optional": true, + "enabled": false, + "label": "Number of CPUs", + "value": 1, + "visible": false + }, + "solver_type": "Pardiso", + "tile_spatial": { + "group": "Compute", + "label": "Number of tiles", + "parent": "data_object", + "isValue": true, + "property": "", + "value": 1, + "min": 1, + "max": 1000, + "verbose": 2, + "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library" + }, + "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/magnetic_vector_pde_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json new file mode 100644 index 00000000..8ef6fbb8 --- /dev/null +++ b/simpeg_drivers-assets/uijson/magnetic_vector_pde_inversion.ui.json @@ -0,0 +1,654 @@ +{ + "version": "0.4.0", + "title": "Magnetic Vector (MVI) PDE Inversion", + "icon": "surveyairbornemagnetics", + "documentation": "https://mirageoscience-simpeg-drivers.readthedocs-hosted.com/en/latest/", + "conda_environment": "simpeg_drivers", + "run_command": "simpeg_drivers.potential_fields.magnetic_vector_pde.inversion", + "geoh5": "", + "monitoring_directory": "", + "inducing_field_declination": { + "min": -180.0, + "max": 180.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Declination (deg)", + "value": 0.0 + }, + "inducing_field_inclination": { + "min": -90.0, + "max": 90.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Inclination (deg)", + "value": 90.0 + }, + "inducing_field_strength": { + "min": 0.0, + "max": 100000.0, + "precision": 2, + "lineEdit": false, + "main": true, + "group": "Inducing field", + "label": "Strength (nT)", + "value": 50000.0 + }, + "data_object": { + "main": true, + "group": "Data", + "label": "Object", + "meshType": [ + "{202c5db1-a56d-4004-9cad-baafd8899406}", + "{6a057fdc-b355-11e3-95be-fd84a7ffcb88}", + "{f26feba3-aded-494b-b9e9-b2bbcbe298e1}", + "{48f5054a-1c5c-4ca4-9048-80f36dc60a06}", + "{b020a277-90e2-4cd7-84d6-612ee3f25051}", + "{4b99204c-d133-4579-a916-a9c8b98cfccb}", + "{028e4905-cc97-4dab-b1bf-d76f58b501b5}" + ], + "value": "" + }, + "tmi_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "TMI (nT)", + "toolTip": "IGRF-corrected anomalous magnetic data", + "parent": "data_object", + "optional": true, + "enabled": true, + "value": "" + }, + "tmi_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "tmi_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "bx_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "Bx (nT)", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "bx_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "bx_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "by_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "By (nT)", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "by_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "by_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "bz_channel": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "label": "Bz (nT)", + "parent": "data_object", + "optional": true, + "enabled": false, + "value": "" + }, + "bz_uncertainty": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Data", + "main": true, + "isValue": true, + "label": "Uncertainty", + "parent": "data_object", + "dependency": "bz_channel", + "dependencyType": "enabled", + "property": "", + "value": 1.0 + }, + "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" + }, + "starting_model": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "parent": "mesh", + "label": "Initial magnetization (SI)", + "property": "", + "value": 0.0001 + }, + "starting_inclination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Initial inclination (deg)", + "property": "", + "value": 0.0 + }, + "starting_declination": { + "association": [ + "Cell", + "Vertex" + ], + "dataType": "Float", + "group": "Mesh and models", + "main": true, + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Initial declination (deg)", + "property": "", + "value": 0.0 + }, + "reference_model": { + "association": [ + "Cell", + "Vertex" + ], + "main": true, + "dataType": "Float", + "group": "Mesh and models", + "isValue": true, + "optional": true, + "enabled": false, + "parent": "mesh", + "label": "Reference magnetization(SI)", + "property": "", + "value": 0.0 + }, + "upper_bound": { + "association": [ + "Cell", + "Vertex" + ], + "main": true, + "dataType": "Float", + "group": "Mesh and models", + "isValue": true, + "parent": "mesh", + "label": "Upper bound (SI)", + "property": "", + "optional": true, + "value": 1.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", + "optional": true, + "enabled": false, + "parent": "mesh", + "value": "" + }, + "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": 1, + "min": 1, + "LineEdit": false, + "max": 10, + "precision": 1, + "verbose": 2, + "enabled": true + }, + "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, + "verbose": 2 + }, + "tol_cg": { + "min": 0, + "group": "Optimization", + "label": "Conjugate gradient tolerance", + "value": 0.0001, + "enabled": true, + "verbose": 3 + }, + "f_min_change": { + "group": "Optimization", + "label": "Minimum change in objective function", + "value": 0.01, + "min": 1e-06, + "verbose": 3, + "enabled": true, + "tooltip": "Minimum decrease in regularization beyond which the IRLS procedure is deemed to have completed" + }, + "sens_wts_threshold": { + "group": "Update sensitivity weights directive", + "tooltip": "Update sensitivity weight threshold", + "label": "Threshold (%)", + "value": 0.001, + "max": 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": false, + "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": "Pardiso", + "tile_spatial": { + "group": "Compute", + "label": "Number of tiles", + "parent": "data_object", + "isValue": true, + "property": "", + "value": 1, + "min": 1, + "max": 1000, + "verbose": 2, + "tooltip": "Splits the objective function into spatial tiles for distributed computation using the Dask library" + }, + "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" + }, + "n_workers": null, + "n_threads": null, + "max_ram": "", + "performance_report": false, + "distributed_workers": "" +} diff --git a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json index e782cb52..72a4df81 100644 --- a/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/magnetotellurics_inversion.ui.json @@ -440,7 +440,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json index 2bffd167..53ade0fd 100644 --- a/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem1d_inversion.ui.json @@ -269,7 +269,7 @@ "min": 0.0, "group": "Regularization", "label": "Vertical-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json index 4cf11ccc..10d4fc85 100644 --- a/simpeg_drivers-assets/uijson/tdem_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tdem_inversion.ui.json @@ -324,7 +324,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json index 9c85c829..7e9c8be4 100644 --- a/simpeg_drivers-assets/uijson/tipper_inversion.ui.json +++ b/simpeg_drivers-assets/uijson/tipper_inversion.ui.json @@ -320,7 +320,7 @@ "min": 0.0, "group": "Regularization", "label": "Z-smoothness weight", - "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothess", + "tooltip": "Larger values relative to other smoothness weights will result in z biased smoothness", "value": 1.0, "isValue": true, "parent": "mesh", diff --git a/simpeg_drivers/__init__.py b/simpeg_drivers/__init__.py index aeb8c67d..10d2b354 100644 --- a/simpeg_drivers/__init__.py +++ b/simpeg_drivers/__init__.py @@ -147,6 +147,13 @@ def assets_path() -> Path: "inversion": "MagneticVectorInversionDriver", }, ), + "magnetic vector pde": ( + "simpeg_drivers.potential_fields.magnetic_vector_pde", + { + "forward": "MagneticVectorPDEForwardDriver", + "inversion": "MagneticVectorPDEInversionDriver", + }, + ), "magnetotellurics": ( "simpeg_drivers.natural_sources.magnetotellurics", { diff --git a/simpeg_drivers/components/factories/directives_factory.py b/simpeg_drivers/components/factories/directives_factory.py index 94834769..6cfa0390 100644 --- a/simpeg_drivers/components/factories/directives_factory.py +++ b/simpeg_drivers/components/factories/directives_factory.py @@ -189,7 +189,7 @@ def save_iteration_apparent_resistivity_directive(self): def save_property_group(self): if ( self._save_property_group is None - and self.params.inversion_type == "magnetic vector" + and "magnetic vector" in self.params.inversion_type ): self._save_property_group = directives.SavePropertyGroup( self.driver.inversion_mesh.entity, @@ -347,7 +347,10 @@ def update_sensitivity_weights_directive(self): @property def vector_inversion_directive(self): """Directive to update vector model.""" - if self._vector_inversion_directive is None and "vector" in self.factory_type: + if ( + self._vector_inversion_directive is None + and self.factory_type == "magnetic vector" + ): reference_angles = ( getattr(self.driver.params.models, "reference_model", None) is not None, getattr(self.driver.params.models, "reference_inclination", None) @@ -359,6 +362,7 @@ def vector_inversion_directive(self): self._vector_inversion_directive = directives.VectorInversion( self.driver.data_misfit.objfcts, self.driver.regularization, + inversion_type=self.factory_type, chifact_target=self.driver.params.cooling_schedule.chi_factor * 2, reference_angles=reference_angles, ) @@ -410,7 +414,7 @@ def assemble_keyword_arguments( "transforms": [active_cells_map, inversion_object.permutation.T], } - if self.factory_type == "magnetic vector": + if "magnetic vector" in self.factory_type: kwargs["channels"] = ["amplitude", "inclination", "declination"] kwargs["transforms"] = [ cartesian2amplitude_dip_azimuth, @@ -483,7 +487,7 @@ def volume_normalization(val): ], } - if self.factory_type == "magnetic vector": + if "magnetic vector" in self.factory_type: kwargs["channels"] = [None] kwargs["transforms"] = [ lambda x: x.reshape((-1, 3), order="F"), @@ -555,7 +559,12 @@ def reshape(values): inversion_object=inversion_object, name=name, **kwargs ) - elif self.factory_type in ["gravity", "magnetic scalar", "magnetic vector"]: + elif self.factory_type in [ + "gravity", + "magnetic scalar", + "magnetic vector", + "magnetic vector pde", + ]: kwargs = self.assemble_data_keywords_potential_fields( inversion_object=inversion_object, name=name, diff --git a/simpeg_drivers/components/factories/receiver_factory.py b/simpeg_drivers/components/factories/receiver_factory.py index 6b8409d8..325b4090 100644 --- a/simpeg_drivers/components/factories/receiver_factory.py +++ b/simpeg_drivers/components/factories/receiver_factory.py @@ -50,7 +50,11 @@ def __init__(self, params: BaseParams | BaseOptions): self.orientations = self.validate_orientations() def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: + if self.factory_type in [ + "magnetic vector", + "magnetic scalar", + "magnetic vector pde", + ]: from simpeg.potential_fields.magnetics import receivers return receivers.Point @@ -150,7 +154,12 @@ def assemble_keyword_arguments( ): """Provides implementations to assemble keyword arguments for receivers object.""" kwargs = {} - if self.factory_type in ["gravity", "magnetic scalar", "magnetic vector"]: + if self.factory_type in [ + "gravity", + "magnetic scalar", + "magnetic vector", + "magnetic vector pde", + ]: kwargs["components"] = list(data) else: kwargs["storeProjections"] = True diff --git a/simpeg_drivers/components/factories/simpeg_factory.py b/simpeg_drivers/components/factories/simpeg_factory.py index b033aa13..9f6d0896 100644 --- a/simpeg_drivers/components/factories/simpeg_factory.py +++ b/simpeg_drivers/components/factories/simpeg_factory.py @@ -61,6 +61,7 @@ class SimPEGFactory(ABC): "gravity", "magnetic scalar", "magnetic vector", + "magnetic vector pde", "magnetotellurics", "tdem", "tdem 1d", diff --git a/simpeg_drivers/components/factories/simulation_factory.py b/simpeg_drivers/components/factories/simulation_factory.py index 8c47269f..fcc59606 100644 --- a/simpeg_drivers/components/factories/simulation_factory.py +++ b/simpeg_drivers/components/factories/simulation_factory.py @@ -51,6 +51,7 @@ def __init__(self, params: BaseParams | BaseOptions): "tipper", "fdem", "tdem", + "magnetic vector pde", ]: import pymatsolver.direct as solver_module @@ -62,6 +63,11 @@ def concrete_object(self): return simulation.Simulation3DIntegral + if self.factory_type == "magnetic vector pde": + from simpeg.potential_fields.magnetics import simulation + + return simulation.Simulation3DDifferential + if self.factory_type == "gravity": from simpeg.potential_fields.gravity import simulation @@ -148,6 +154,19 @@ def assemble_keyword_arguments(self, survey=None, mesh=None, models=None, **kwar kwargs["active_cells"] = active_cells kwargs["chiMap"] = maps.IdentityMap(nP=int(active_cells.sum())) + if self.factory_type == "magnetic vector pde": + inject = maps.InjectActiveCells( + mesh, + active_cells=np.tile(active_cells, 3), + value_inactive=0, + nC=mesh.n_cells * 3, + ) + kwargs["remMap"] = inject * maps.EffectiveSusceptibilityMap( + nP=active_cells.sum() * 3, + ambient_field_magnitude=survey.source_field.amplitude, + ) + kwargs["solver_dtype"] = np.float32 + if self.factory_type == "gravity": kwargs["active_cells"] = active_cells kwargs["rhoMap"] = maps.IdentityMap(nP=int(active_cells.sum())) diff --git a/simpeg_drivers/components/factories/source_factory.py b/simpeg_drivers/components/factories/source_factory.py index 4b96d43d..0145d57e 100644 --- a/simpeg_drivers/components/factories/source_factory.py +++ b/simpeg_drivers/components/factories/source_factory.py @@ -45,19 +45,23 @@ def __init__(self, params: BaseParams | BaseOptions): self.simpeg_object = self.concrete_object() def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: + if self.factory_type in [ + "magnetic vector", + "magnetic scalar", + "magnetic vector pde", + ]: return mag_sources.UniformBackgroundField - elif self.factory_type == "gravity": + if self.factory_type == "gravity": return grav_sources.SourceField - elif "direct current" in self.factory_type: + if "direct current" in self.factory_type: return dc_sources.Dipole - elif "induced polarization" in self.factory_type: + if "induced polarization" in self.factory_type: return dc_sources.Dipole - elif "fdem" in self.factory_type: + if "fdem" in self.factory_type: if "fdem 1d" == self.factory_type and np.all( np.linalg.norm( np.kron( @@ -73,7 +77,7 @@ def concrete_object(self): return fem_sources.MagDipole - elif "tdem" in self.factory_type: + if "tdem" in self.factory_type: if isinstance(self.params.data_object, LargeLoopGroundTEMReceivers): return tem_sources.LineCurrent @@ -85,13 +89,15 @@ def concrete_object(self): return tem_sources.MagDipole - elif self.factory_type in [ + if self.factory_type in [ "apparent conductivity", "magnetotellurics", "tipper", ]: return ns_sources.PlanewaveXYPrimary + return None + def assemble_arguments( self, receivers=None, @@ -140,7 +146,11 @@ def assemble_keyword_arguments( # pylint: disable=arguments-differ """Provides implementations to assemble keyword arguments for receivers object.""" _ = (receivers, frequency) kwargs = {} - if self.factory_type in ["magnetic scalar", "magnetic vector"]: + if self.factory_type in [ + "magnetic scalar", + "magnetic vector", + "magnetic vector pde", + ]: kwargs = { "amplitude": self.params.inducing_field_strength, "inclination": self.params.inducing_field_inclination, diff --git a/simpeg_drivers/components/factories/survey_factory.py b/simpeg_drivers/components/factories/survey_factory.py index 4496ceb2..89605ea2 100644 --- a/simpeg_drivers/components/factories/survey_factory.py +++ b/simpeg_drivers/components/factories/survey_factory.py @@ -49,7 +49,11 @@ def __init__(self, params: BaseParams | BaseOptions): self.sorting = None def concrete_object(self): - if self.factory_type in ["magnetic vector", "magnetic scalar"]: + if self.factory_type in [ + "magnetic vector", + "magnetic scalar", + "magnetic vector pde", + ]: from simpeg.potential_fields.magnetics import survey elif self.factory_type == "gravity": diff --git a/simpeg_drivers/components/models.py b/simpeg_drivers/components/models.py index 30b33a76..330b6b54 100644 --- a/simpeg_drivers/components/models.py +++ b/simpeg_drivers/components/models.py @@ -74,7 +74,10 @@ def __init__(self, driver: InversionDriver): self._active_cells: np.ndarray | None = None self._driver = driver self.is_sigma = self.driver.params.physical_property == "conductivity" - self.is_vector = self.driver.params.inversion_type == "magnetic vector" + self.is_vector = self.driver.params.inversion_type in [ + "magnetic vector", + "magnetic vector pde", + ] self._starting_model = InversionModel( driver, "starting_model", is_sigma=self.is_sigma @@ -272,7 +275,10 @@ def lower_bound(self) -> np.ndarray | None: else: bound_model = self._lower_bound.model - if self.driver.params.inversion_type == "magnetic vector": + if self.driver.params.inversion_type in [ + "magnetic vector", + "magnetic vector pde", + ]: bound_model = None if self._upper_bound.model is not None: @@ -458,14 +464,14 @@ def gradient_dip(self) -> np.ndarray | None: if self._gradient_dip.model is None: return None - return np.deg2rad(self._gradient_dip.model) + return self._gradient_dip.model.copy() @property def gradient_direction(self) -> np.ndarray | None: if self._gradient_direction.model is None: return None - return np.deg2rad(self._gradient_direction.model) + return self._gradient_direction.model.copy() def remove_air(self, active_cells: np.ndarray): """Use active cells vector to remove air cells from model""" @@ -512,8 +518,8 @@ def __init__( """ :param driver: InversionDriver object. :param model_type: Type of inversion model, can be any of MODEL_TYPES. - :param is_vector: If True, model is a vector. :param trim_active_cells: If True, remove air cells from model. + :param is_sigma: If True, model values must be strictly positive. """ self.driver = driver self.model_type = model_type @@ -596,6 +602,7 @@ def edit_ndv_model(self, model): if ( getattr(self.driver.params.models, "model_type", None) == ModelTypeEnum.resistivity + and model_type == "conductivity_model" ): model_type = "resistivity_model" diff --git a/simpeg_drivers/driver.py b/simpeg_drivers/driver.py index 138a51dc..7268e426 100644 --- a/simpeg_drivers/driver.py +++ b/simpeg_drivers/driver.py @@ -288,6 +288,22 @@ def mapping(self) -> list[maps.Projection] | None: return self._mapping + @mapping.setter + def mapping(self, value: maps.IdentityMap | list[maps.IdentityMap]): + if not isinstance(value, list): + value = [value] + + if not all( + isinstance(val, maps.IdentityMap) and val.shape[0] == self.n_values + for val in value + ): + raise TypeError( + "'mapping' must be an instance of maps.IdentityMap with shape (n_values, *). " + f"Provided {value}" + ) + + self._mapping = value + @property def models(self): """Inversion models""" @@ -302,7 +318,7 @@ def n_blocks(self): """ Number of model components in the inversion. """ - return 3 if self.params.inversion_type == "magnetic vector" else 1 + return 3 if "magnetic vector" in self.params.inversion_type else 1 @property def n_values(self): @@ -312,22 +328,6 @@ def n_values(self): return self._n_values - @mapping.setter - def mapping(self, value: maps.IdentityMap | list[maps.IdentityMap]): - if not isinstance(value, list): - value = [value] - - if not all( - isinstance(val, maps.IdentityMap) and val.shape[0] == self.n_values - for val in value - ): - raise TypeError( - "'mapping' must be an instance of maps.IdentityMap with shape (n_values, *). " - f"Provided {value}" - ) - - self._mapping = value - def split_list(self, tiles: list[np.ndarray]) -> list[list[np.ndarray]]: """ Number of splits for the data misfit to be distributed evenly among workers. @@ -570,13 +570,103 @@ def count_data(self): return finite_data_count, total_data_count + def get_modified_regularization( + self, + reg_func, + mapping, + is_rotated: bool, + forward_mesh: RegularizationMesh | None, + backward_mesh: RegularizationMesh | None, + ): + """ + Modify the regularization function with rotated operators. + + :param reg_func: Regularization function. + :param mapping: Mapping. + :param is_rotated: Whether the regularization function is rotated or not. + :param forward_mesh: Forward mesh object. + :param backward_mesh: Backward mesh object. + """ + neighbors = None + if is_rotated and not (backward_mesh or forward_mesh): + backward_mesh = RegularizationMesh( + self.inversion_mesh.mesh, active_cells=self.models.active_cells + ) + neighbors = cell_neighbors(reg_func.regularization_mesh.mesh) + + # Adjustment for 2D versus 3D problems + components = ( + "sxz" + if ( + "2d" in self.params.inversion_type or "1d" in self.params.inversion_type + ) + else "sxyz" + ) + weight_names = ["alpha_s"] + [f"length_scale_{k}" for k in components[1:]] + functions = [] + for comp, weight_name, fun in zip(components, weight_names, reg_func.objfcts): + if getattr(self.models, weight_name) is None: + setattr(reg_func, weight_name, 0.0) + functions.append(fun) + continue + + weight = mapping * getattr(self.models, weight_name) + norm = mapping * getattr(self.models, f"{comp}_norm") + + if not isinstance(fun, SparseSmoothness): + fun.set_weights(**{comp: weight}) + fun.norm = norm + functions.append(fun) + continue + + if is_rotated and not forward_mesh: + fun = set_rotated_operators( + fun, + neighbors, + comp, + self.models.gradient_dip, + self.models.gradient_direction, + ) + + average_op = getattr( + reg_func.regularization_mesh, + f"aveCC2F{fun.orientation}", + ) + fun.set_weights(**{comp: average_op @ weight}) + fun.norm = np.round(average_op @ norm, decimals=3) + functions.append(fun) + + if is_rotated: + fun.gradient_type = "components" + backward_fun = deepcopy(fun) + setattr(backward_fun, "_regularization_mesh", backward_mesh) + + # Only do it once for MVI + if not forward_mesh: + backward_fun = set_rotated_operators( + backward_fun, + neighbors, + comp, + self.models.gradient_dip, + self.models.gradient_direction, + forward=False, + ) + average_op = getattr( + backward_fun.regularization_mesh, + f"aveCC2F{fun.orientation}", + ) + backward_fun.set_weights(**{comp: average_op @ weight}) + backward_fun.norm = np.round(average_op @ norm, decimals=3) + functions.append(backward_fun) + + return functions + def get_regularization(self): if self.params.forward_only: return BaseRegularization(mesh=self.inversion_mesh.mesh) reg_funcs = [] is_rotated = self.params.models.gradient_rotation is not None - neighbors = None backward_mesh = None forward_mesh = None for mapping in self.mapping: @@ -587,83 +677,13 @@ def get_regularization(self): reference_model=self.models.reference_model, ) - if is_rotated and neighbors is None: - backward_mesh = RegularizationMesh( - self.inversion_mesh.mesh, active_cells=self.models.active_cells - ) - neighbors = cell_neighbors(reg_func.regularization_mesh.mesh) - - # Adjustment for 2D versus 3D problems - components = ( - "sxz" - if ( - "2d" in self.params.inversion_type - or "1d" in self.params.inversion_type - ) - else "sxyz" + functions = self.get_modified_regularization( + reg_func, mapping, is_rotated, forward_mesh, backward_mesh ) - weight_names = ["alpha_s"] + [f"length_scale_{k}" for k in components[1:]] - functions = [] - for comp, weight_name, fun in zip( - components, weight_names, reg_func.objfcts - ): - if getattr(self.models, weight_name) is None: - setattr(reg_func, weight_name, 0.0) - functions.append(fun) - continue - - weight = mapping * getattr(self.models, weight_name) - norm = mapping * getattr(self.models, f"{comp}_norm") - - if not isinstance(fun, SparseSmoothness): - fun.set_weights(**{comp: weight}) - fun.norm = norm - functions.append(fun) - continue - - if is_rotated: - if forward_mesh is None: - fun = set_rotated_operators( - fun, - neighbors, - comp, - self.models.gradient_dip, - self.models.gradient_direction, - ) - - average_op = getattr( - reg_func.regularization_mesh, - f"aveCC2F{fun.orientation}", - ) - fun.set_weights(**{comp: average_op @ weight}) - fun.norm = np.round(average_op @ norm, decimals=3) - functions.append(fun) - - if is_rotated: - fun.gradient_type = "components" - backward_fun = deepcopy(fun) - setattr(backward_fun, "_regularization_mesh", backward_mesh) - - # Only do it once for MVI - if not forward_mesh: - backward_fun = set_rotated_operators( - backward_fun, - neighbors, - comp, - self.models.gradient_dip, - self.models.gradient_direction, - forward=False, - ) - average_op = getattr( - backward_fun.regularization_mesh, - f"aveCC2F{fun.orientation}", - ) - backward_fun.set_weights(**{comp: average_op @ weight}) - backward_fun.norm = np.round(average_op @ norm, decimals=3) - functions.append(backward_fun) # Will avoid recomputing operators if the regularization mesh is the same - forward_mesh = reg_func.regularization_mesh + forward_mesh = functions[0].regularization_mesh + backward_mesh = functions[-1].regularization_mesh reg_func.objfcts = functions reg_func.norms = [fun.norm for fun in functions] reg_funcs.append(reg_func) diff --git a/simpeg_drivers/joint/driver.py b/simpeg_drivers/joint/driver.py index 6d02ecd4..cb62cb10 100644 --- a/simpeg_drivers/joint/driver.py +++ b/simpeg_drivers/joint/driver.py @@ -14,6 +14,7 @@ from __future__ import annotations from logging import getLogger +from typing import Any import numpy as np import simpeg.dask.objective_function as dask_objective_function @@ -31,7 +32,6 @@ from simpeg_drivers.components.factories import ( DirectivesFactory, - SaveDataGeoh5Factory, SaveModelGeoh5Factory, ) from simpeg_drivers.driver import InversionDriver @@ -144,6 +144,19 @@ def initialize(self): global_actives |= local_actives self.models.active_cells = global_actives + + # Set the model as input to the sub-drivers to force interpolation + # onto their respective mesh + for name, val in self.params.models.model_dump().items(): + if not val: + continue + + if not hasattr(self.drivers[0].params.models, name): + continue + + for child_driver in self.drivers: + setattr(child_driver.params.models, name, val) + for driver, wire in zip(self.drivers, self.wires, strict=True): logger.info("Initializing driver %s", driver.params.name) # Create a projection from global mesh to driver specific mesh @@ -169,6 +182,7 @@ def initialize(self): multipliers.append(mult * (mapping[0].shape[0] / projection.shape[1])) driver.data_misfit.multipliers = multipliers + self.validate_create_models() @property @@ -251,8 +265,6 @@ def validate_create_models(self): for model_type in self.models.model_types: if model_type in [ "petrophysical_model", - "gradient_dip", - "gradient_direction", "starting_inclination", "starting_declination", "reference_inclination", @@ -260,11 +272,14 @@ def validate_create_models(self): ]: continue - model = getattr(self.models, f"_{model_type}").model + model_collection = getattr(self.models, f"_{model_type}") # If set on joint driver, repeat for all drivers - if model is not None: - model = np.kron(np.ones(len(self.mapping)), model) + if ( + model_collection.model is not None + and model_collection.trim_active_cells + ): + model = np.tile(model_collection.model, len(self.mapping)) # Concatenate models from individual drivers projected onto the global mesh else: @@ -277,34 +292,49 @@ def validate_create_models(self): model.append(None) continue - projection = child_driver.data_misfit.model_map.deriv(vec).T + if model_collection.trim_active_cells: + projection = child_driver.data_misfit.model_map.deriv(vec).T - if isinstance(model_local_values, float): - model_local_values = ( - np.ones(projection.shape[1]) * model_local_values - ) + if isinstance(model_local_values, float): + model_local_values = ( + np.ones(projection.shape[1]) * model_local_values + ) - norm = np.array(np.sum(projection, axis=1)).flatten() - model.append((projection * model_local_values) / (norm + 1e-8)) - - # Mostly for rotated gradient mode - is_none = [val is None for val in model] - if any(is_none): - if not all(is_none): - logger.warning( - "Some drivers do not have a model of type " - "'%s' set. Please assign a value to individual drivers" - " or use the joint driver options to set it globally.\n" - "Parameter ignored for the inversion.", - model_type, + norm = np.array(np.sum(projection, axis=1)).flatten() + model.append((projection * model_local_values) / (norm + 1e-8)) + else: + ind = child_driver.inversion_mesh.mesh.get_containing_cells( + self.inversion_mesh.mesh.cell_centers ) - model = None - else: + model.append(model_local_values[ind] / len(self.drivers)) + + model = self._validate_model_consistency(model, model_type) + if model: model = np.sum(model, axis=0) if model is not None: getattr(self.models, f"_{model_type}").model = model + @staticmethod + def _validate_model_consistency(model: list[None | Any], model_type: str): + """ + Check consistency of model values across drivers for a given model type. + If some drivers have None and others have values, log a warning and ignore the model for the inversion. + """ + is_none = [val is None for val in model] + if any(is_none): + if not all(is_none): + logger.warning( + "Some drivers do not have a model of type " + "'%s' set. Please assign a value to individual drivers" + " or use the joint driver options to set it globally.\n" + "Parameter ignored for the inversion.", + model_type, + ) + model = None + + return model + @property def wires(self): """ @@ -349,7 +379,7 @@ def _get_drivers_directives(self) -> list[directives.Directive]: misfits = self.data_misfit.objfcts for driver in self.drivers: - driver_directives = DirectivesFactory(driver) + driver_directives = driver.directives if hasattr(driver.params.models, "model_type") and hasattr( self.params.models, "model_type" @@ -365,7 +395,7 @@ def _get_drivers_directives(self) -> list[directives.Directive]: directives_list.append(save_model) directives_list.append( SaveLPModelGroup( - driver.inversion_mesh.entity, + self.workspace.get_entity(save_model.h5_object)[0], self._directives.update_irls_directive, ) ) diff --git a/simpeg_drivers/joint/joint_cross_gradient/driver.py b/simpeg_drivers/joint/joint_cross_gradient/driver.py index 98188040..d002b270 100644 --- a/simpeg_drivers/joint/joint_cross_gradient/driver.py +++ b/simpeg_drivers/joint/joint_cross_gradient/driver.py @@ -44,15 +44,34 @@ def get_regularization(self): Create a flat ComboObjectiveFunction from all drivers provided and add cross-gradient regularization for all combinations of model parameters. """ - regularizations = super().get_regularization() - reg_list, multipliers = self._overload_regularization(regularizations) + # Trick the drivers by swapping the inversion_mesh and models + # such that the regularization uses the global mesh + multipliers, reg_list = [], [] + for driver in self.drivers: + # Pre-store the saving directives before the swap + _ = driver.directives.save_directives + + driver._models = self.models # pylint: disable=protected-access + driver._inversion_mesh = self.inversion_mesh # pylint: disable=protected-access + driver._n_values = self.models.n_active # pylint: disable=protected-access + driver.mapping = [ + self._mapping[driver, mapping] for mapping in driver.mapping + ] + + # Swap in stored map + for mapping in driver.mapping: + self._mapping[driver, mapping] = mapping + + for multiplier, objfct in driver.regularization: + multipliers.append(multiplier) + reg_list.append(objfct) for label, driver_pairs in zip( ["a_b", "c_a", "c_b"], combinations(self.drivers, 2), strict=False ): # Deal with MVI components - for mapping_a in driver_pairs[0].mapping: - for mapping_b in driver_pairs[1].mapping: + for count_a, mapping_a in enumerate(driver_pairs[0].mapping): + for count_b, mapping_b in enumerate(driver_pairs[1].mapping): wires = maps.Wires( ("a", self._mapping[driver_pairs[0], mapping_a]), ("b", self._mapping[driver_pairs[1], mapping_b]), @@ -62,6 +81,10 @@ def get_regularization(self): self.inversion_mesh.mesh, wires, active_cells=self.models.active_cells, + units=[ + "metric" if not count_a else "component", + "metric" if not count_b else "component", + ], ) ) base_multipier = ( diff --git a/simpeg_drivers/joint/joint_surveys/driver.py b/simpeg_drivers/joint/joint_surveys/driver.py index d1a077f8..25a2a8d7 100644 --- a/simpeg_drivers/joint/joint_surveys/driver.py +++ b/simpeg_drivers/joint/joint_surveys/driver.py @@ -40,6 +40,20 @@ def __init__(self, params: JointSurveysOptions): with fetch_active_workspace(self.workspace, mode="r+"): self.initialize() + def get_regularization(self): + """ + Overload the regularization using the method of the first driver. + """ + driver = self.drivers[0] + # Pre-store the saving directives before the swap + _ = driver.directives.save_directives + + driver._models = self.models # pylint: disable=protected-access + driver._inversion_mesh = self.inversion_mesh # pylint: disable=protected-access + driver._n_values = self.models.n_active # pylint: disable=protected-access + driver.mapping = self.mapping + return driver.get_regularization() + def validate_create_models(self): """Check if all models were provided, otherwise use the first driver models.""" # Create projection for first driver to global mesh diff --git a/simpeg_drivers/joint/joint_surveys/options.py b/simpeg_drivers/joint/joint_surveys/options.py index 55c10af9..5acc7b21 100644 --- a/simpeg_drivers/joint/joint_surveys/options.py +++ b/simpeg_drivers/joint/joint_surveys/options.py @@ -31,7 +31,7 @@ class JointSurveysModelOptions(JointModelOptions): :param reference_model: The reference model for the inversion. """ - model_type: ModelTypeEnum | None = ModelTypeEnum.conductivity + model_type: ModelTypeEnum | None = None starting_model: float | FloatData | None = None reference_model: float | FloatData | None = None diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py new file mode 100644 index 00000000..e742cbb3 --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/__init__.py @@ -0,0 +1,17 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# 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 .forward import MagneticVectorPDEForwardDriver +from .inversion import MagneticVectorPDEInversionDriver +from .options import ( + MagneticVectorPDEForwardOptions, + MagneticVectorPDEInversionOptions, +) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py new file mode 100644 index 00000000..2b0afeb0 --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/forward.py @@ -0,0 +1,30 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# 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 + +import sys +from pathlib import Path + +from simpeg_drivers.driver import ForwardDriver + +from .options import MagneticVectorPDEForwardOptions + + +class MagneticVectorPDEForwardDriver(ForwardDriver): + """Magnetic Vector forward driver.""" + + _params_class = MagneticVectorPDEForwardOptions + + +if __name__ == "__main__": + file = Path(sys.argv[1]).resolve() + MagneticVectorPDEForwardDriver.start_dask_run(file) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py new file mode 100644 index 00000000..96917069 --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/inversion.py @@ -0,0 +1,59 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# 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 + +import sys +from pathlib import Path + +import numpy as np +from simpeg.maps import Projection +from simpeg.objective_function import ComboObjectiveFunction +from simpeg.regularization import BaseRegularization, VectorAmplitude + +from simpeg_drivers.driver import InversionDriver + +from .options import MagneticVectorPDEInversionOptions + + +class MagneticVectorPDEInversionDriver(InversionDriver): + """Magnetic Vector inversion driver.""" + + _params_class = MagneticVectorPDEInversionOptions + + def get_regularization(self): + if self.params.forward_only: + return BaseRegularization(mesh=self.inversion_mesh.mesh) + + reg_funcs = [] + is_rotated = self.params.models.gradient_rotation is not None + indices = np.hstack([mapping.P.indices for mapping in self.mapping]) + mapping = Projection(self.mapping[0].shape[1], indices) + reg_func = VectorAmplitude( + self.inversion_mesh.mesh, + active_cells=self.models.active_cells, + mapping=mapping, + reference_model=self.models.reference_model, + ) + + functions = self.get_modified_regularization( + reg_func, self.mapping[0], is_rotated, None, None + ) + reg_func.objfcts = functions + reg_func.norms = [fun.norm for fun in functions] + reg_funcs.append(reg_func) + + return ComboObjectiveFunction(objfcts=reg_funcs) + + +if __name__ == "__main__": + file = Path(sys.argv[1]).resolve() + MagneticVectorPDEInversionDriver.start_dask_run(file) diff --git a/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py new file mode 100644 index 00000000..52d05099 --- /dev/null +++ b/simpeg_drivers/potential_fields/magnetic_vector_pde/options.py @@ -0,0 +1,110 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# 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.data import FloatData + +from simpeg_drivers import assets_path +from simpeg_drivers.options import ( + BaseForwardOptions, + BaseInversionOptions, + Deprecated, + DirectiveOptions, + ModelOptions, +) + + +class VectorModelPDEOptions(ModelOptions): + """ + Magnetic Vector Model options. + """ + + lower_bound: Deprecated + starting_inclination: float | FloatData | None = None + starting_declination: float | FloatData | None = None + + +class MagneticVectorPDEForwardOptions(BaseForwardOptions): + """ + Magnetic Vector forward options. + + :param tmi_channel_bool: Total magnetic intensity channel boolean. + :param bx_channel_bool: Bx channel boolean. + :param by_channel_bool: By channel boolean. + :param bz_channel_bool: Bz channel boolean. + """ + + name: ClassVar[str] = "Magnetic Vector Forward" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/magnetic_vector_pde_forward.ui.json" + ) + run_command: str = "simpeg_drivers.potential_fields.magnetic_vector_pde.forward" + title: str = "Magnetic Vector Forward" + physical_property: str = "susceptibility" + inversion_type: str = "magnetic vector pde" + + tmi_channel_bool: bool = True + bx_channel_bool: bool = False + by_channel_bool: bool = False + bz_channel_bool: bool = False + + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData + models: VectorModelPDEOptions + + +class MagneticVectorPDEInversionOptions(BaseInversionOptions): + """ + Magnetic Vector Inversion options. + + :param tmi_channel: Total magnetic intensity channel. + :param bx_channel: Bx channel. + :param by_channel: By channel. + :param bz_channel: Bz channel. + :param tmi_uncertainty: Total magnetic intensity uncertainty. + :param bx_uncertainty: Bx uncertainty. + :param by_uncertainty: By uncertainty. + :param bz_uncertainty: Bz uncertainty. + :param inducing_field_strength: Inducing field strength. + :param inducing_field_inclination: Inducing field inclination. + :param inducing_field_declination: Inducing field declination. + """ + + name: ClassVar[str] = "Magnetic Vector Inversion" + default_ui_json: ClassVar[Path] = ( + assets_path() / "uijson/magnetic_vector_pde_inversion.ui.json" + ) + run_command: str = "simpeg_drivers.potential_fields.magnetic_vector_pde.inversion" + title: str = "Magnetic Vector Inversion" + physical_property: str = "susceptibility" + inversion_type: str = "magnetic vector pde" + + tmi_channel: FloatData | None = None + bx_channel: FloatData | None = None + by_channel: FloatData | None = None + bz_channel: FloatData | None = None + + tmi_uncertainty: float | FloatData | None = None + bx_uncertainty: float | FloatData | None = None + by_uncertainty: float | FloatData | None = None + bz_uncertainty: float | FloatData | None = None + + inducing_field_strength: float | FloatData + inducing_field_inclination: float | FloatData + inducing_field_declination: float | FloatData + models: VectorModelPDEOptions + + directives: DirectiveOptions = DirectiveOptions(sens_wts_threshold=1e-3) diff --git a/simpeg_drivers/utils/meshes.py b/simpeg_drivers/utils/meshes.py index afd152bd..fe104a60 100644 --- a/simpeg_drivers/utils/meshes.py +++ b/simpeg_drivers/utils/meshes.py @@ -42,11 +42,11 @@ def auto_pad(survey, factor=2) -> tuple[list[float], list[float]]: def use_vertical_padding(inversion_type): - """Return true for all electrical and potential field methods.""" + """Return False for all electrical and potential field methods.""" out = True if any( k in inversion_type - for k in ["direct current", "induced polarization", "gravity", "magnetic"] + for k in ["direct current", "induced polarization", "gravity", "magnetic "] ): out = False return out diff --git a/simpeg_drivers/utils/nested.py b/simpeg_drivers/utils/nested.py index db178965..913f4981 100644 --- a/simpeg_drivers/utils/nested.py +++ b/simpeg_drivers/utils/nested.py @@ -294,7 +294,12 @@ def create_simulation( local_mesh, enforce_active=True, components=( - 3 if getattr(simulation, "model_type", None) == "vector" else 1 + 3 + if ( + getattr(simulation, "model_type", None) == "vector" + or getattr(simulation, "remMap", None) + ) + else 1 ), ) local_actives = mapping.local_active @@ -332,6 +337,19 @@ def create_simulation( kwargs["active_cells"] = local_actives + if getattr(simulation, "_remMap", None) is not None: + inject = maps.InjectActiveCells( + local_mesh, + active_cells=np.tile(local_actives, 3), + value_inactive=0, + nC=local_mesh.n_cells * 3, + ) + kwargs["remMap"] = inject * maps.EffectiveSusceptibilityMap( + nP=local_actives.sum() * 3, + ambient_field_magnitude=simulation.survey.source_field.amplitude, + ) + kwargs["solver_dtype"] = np.float32 + if getattr(simulation, "_rhoMap", None) is not None: kwargs["rhoMap"] = maps.IdentityMap(nP=n_actives) kwargs["active_cells"] = local_actives diff --git a/simpeg_drivers/utils/regularization.py b/simpeg_drivers/utils/regularization.py index a48bd95f..a109c7f6 100644 --- a/simpeg_drivers/utils/regularization.py +++ b/simpeg_drivers/utils/regularization.py @@ -486,8 +486,8 @@ def set_rotated_operators( :param function: Smoothness regularization to change operator for. :param neighbors: Cell neighbors array. :param axis: Regularization axis. - :param dip: Angle in radians for rotation from the horizon. - :param direction: Angle in radians for rotation about the z-axis. + :param dip: Angle in degrees for rotation from the horizon. + :param direction: Angle in degrees for rotation about the z-axis. :param forward: Whether to use forward or backward difference for derivative approximations. """ @@ -496,7 +496,9 @@ def set_rotated_operators( h_cell = mesh.mesh.h_gridded[:, axes.find(axis)] - unit_grad_op = rotated_gradient(mesh.mesh, neighbors, axis, dip, direction, forward) + unit_grad_op = rotated_gradient( + mesh.mesh, neighbors, axis, np.deg2rad(dip), np.deg2rad(direction), forward + ) vol_avg_op = abs(unit_grad_op) vol_avg_op.data = ( diff --git a/simpeg_drivers/utils/synthetics/meshes.py b/simpeg_drivers/utils/synthetics/meshes.py index 8b8c4002..d40a4c7b 100644 --- a/simpeg_drivers/utils/synthetics/meshes.py +++ b/simpeg_drivers/utils/synthetics/meshes.py @@ -59,42 +59,6 @@ def get_mesh( ) -def get_base_octree( - survey: Points, - topography: Surface, - cell_size: tuple[float, float, float], - refinement: tuple, - padding: float, -) -> TreeMesh: - """ - Generate a survey centered TreeMesh object with topography refinement. - - :param survey: Survey object with vertices that define the core of the - tensor mesh. - :param topography: Surface used to refine the topography. - :param cell_size: Tuple defining the cell size in all directions. - :param refinement: Tuple containing the number of cells to refine at each - level around the topography. - :param padding: Distance to pad the mesh in all directions. - - :return mesh: The discretize TreeMesh object for computations. - """ - padding_distance = np.ones((3, 2)) * padding - mesh = mesh_builder_xyz( - survey.vertices - np.r_[cell_size] / 2.0, - cell_size, - depth_core=100.0, - padding_distance=padding_distance, - mesh_type="TREE", - tree_diagonal_balance=False, - ) - mesh = OctreeDriver.refine_tree_from_triangulation( - mesh, topography, levels=refinement, finalize=False - ) - - return mesh - - def get_octree_mesh( opts: MeshOptions, survey: Points, diff --git a/tests/run_tests/driver_joint_cross_gradient_test.py b/tests/run_tests/driver_joint_cross_gradient_test.py index 3acf48b5..4b33ab32 100644 --- a/tests/run_tests/driver_joint_cross_gradient_test.py +++ b/tests/run_tests/driver_joint_cross_gradient_test.py @@ -8,9 +8,11 @@ # ' # ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +import logging from pathlib import Path import numpy as np +from geoh5py.groups import GroupTypeEnum, PropertyGroup from geoh5py.objects import CurrentElectrode, Octree, Points from geoh5py.workspace import Workspace @@ -34,6 +36,10 @@ MagneticVectorInversionDriver, MagneticVectorInversionOptions, ) +from simpeg_drivers.potential_fields.magnetic_vector_pde import ( + MagneticVectorPDEInversionDriver, + MagneticVectorPDEInversionOptions, +) from simpeg_drivers.utils.synthetics.driver import ( SyntheticsComponents, ) @@ -290,10 +296,6 @@ def test_joint_cross_gradient_inv_run( cross_gradient_weight_a_b=1e0, cross_gradient_weight_c_a=1e0, cross_gradient_weight_c_b=1e0, - s_norm=0.0, - x_norm=0.0, - y_norm=0.0, - z_norm=0.0, percentile=100, ) @@ -306,6 +308,8 @@ def test_joint_cross_gradient_inv_run( driver.run() + if not pytest: + return # Mix of scaling on misfits and tiles. # Expecting that gravity tiles are independently scaled, but MagneticVector tiles take # the scaling from its total misfit. @@ -331,13 +335,144 @@ def test_joint_cross_gradient_inv_run( check_target(output, target_run) +def test_joint_cross_gradient_rotated_run( + tmp_path, + caplog, + max_iterations=1, + pytest=True, +): + workpath = tmp_path / "inversion_test.ui.geoh5" + if pytest: + workpath = ( + tmp_path.parent + / "test_joint_cross_gradient_fwr_0" + / "inversion_test.ui.geoh5" + ) + + with Workspace(workpath) as geoh5: + topography = geoh5.get_entity("topography")[0] + drivers = [] + orig_data = [] + origin = None + for name in [ + "Direct Current 3D Forward", + "Magnetic Vector Forward", + ]: + group = geoh5.get_entity(name)[0] + mesh = next(child for child in group.children if isinstance(child, Octree)) + survey = next( + child + for child in group.children + if isinstance(child, Points) and not isinstance(child, CurrentElectrode) + ) + + if origin is None: + origin = mesh.origin + else: + mesh.origin = origin + + dip, direction = mesh.add_data( + { + "dip": {"values": np.full(mesh.n_cells, 45.0)}, + "direction": {"values": np.full(mesh.n_cells, 90.0)}, + } + ) + gradient_rotation = PropertyGroup( + name="gradient_rotations", + property_group_type=GroupTypeEnum.DIPDIR, + properties=[direction, dip], + parent=mesh, + ) + + data = next(k for k in survey.children if "Iteration_0" in k.name) + orig_data.append(data.values) + + if name == "Direct Current 3D Forward": + uncertainties = survey.add_data( + { + "Uncertainties": { + "values": np.abs(data.values) * 0.05 + 1e-4, + } + } + ) + params = DC3DInversionOptions.build( + geoh5=geoh5, + mesh=mesh, + alpha_s=1.0, + topography_object=topography, + data_object=survey, + potential_channel=data, + model_type="Resistivity (Ohm-m)", + potential_uncertainty=uncertainties, + tile_spatial=1, + starting_model=100.0, + reference_model=100.0, + gradient_rotation=gradient_rotation, + save_sensitivities=True, + solver_type="Mumps", + ) + drivers.append(DC3DInversionDriver(params)) + else: + params = MagneticVectorPDEInversionOptions.build( + geoh5=geoh5, + mesh=mesh, + alpha_s=1.0, + topography_object=topography, + inducing_field_strength=INDUCING_FIELD[0], + inducing_field_inclination=INDUCING_FIELD[1], + inducing_field_declination=INDUCING_FIELD[2], + data_object=survey, + starting_model=1e-4, + reference_model=0.0, + tmi_channel=data, + tmi_uncertainty=1e1, + tile_spatial=2, + auto_scale_tiles=False, + ) + drivers.append(MagneticVectorPDEInversionDriver(params)) + + # Run the inverse + joint_params = JointCrossGradientOptions.build( + geoh5=geoh5, + topography_object=topography, + group_a=drivers[0].out_group, + group_a_multiplier=1.0, + group_b=drivers[1].out_group, + group_b_multiplier=1.0, + ) + + with caplog.at_level(logging.WARNING): + _ = JointCrossGradientDriver(joint_params) + + assert "Some drivers do not have a model" in caplog.text + + # Add gradient rotation to the mvi driver and check it is used + params.models.gradient_rotation = gradient_rotation + params.out_group = None + drivers[-1] = MagneticVectorPDEInversionDriver(params) + # Run the inverse + joint_params = JointCrossGradientOptions.build( + geoh5=geoh5, + topography_object=topography, + group_a=drivers[0].out_group, + group_a_multiplier=1.0, + group_b=drivers[1].out_group, + group_b_multiplier=1.0, + max_global_iterations=max_iterations, + ) + joint_driver = JointCrossGradientDriver(joint_params) + assert joint_driver.models.gradient_dip is not None + + joint_driver.run() + + if __name__ == "__main__": # Full run test_joint_cross_gradient_fwr_run( Path("./"), n_grid_points=16, n_lines=5, - cell_size=(20.0, 20.0, 20.0), + cell_size=(10.0, 10.0, 10.0), refinement=(4, 4), ) test_joint_cross_gradient_inv_run( diff --git a/tests/run_tests/driver_joint_surveys_test.py b/tests/run_tests/driver_joint_surveys_test.py index 98400e49..aad8878d 100644 --- a/tests/run_tests/driver_joint_surveys_test.py +++ b/tests/run_tests/driver_joint_surveys_test.py @@ -11,6 +11,7 @@ from pathlib import Path import numpy as np +import pytest from geoh5py.objects import Octree from geoh5py.workspace import Workspace from simpeg.directives import SaveModelGeoH5, SavePropertyGroup @@ -36,6 +37,10 @@ MagneticVectorInversionDriver, MagneticVectorInversionOptions, ) +from simpeg_drivers.potential_fields.magnetic_vector_pde import ( + MagneticVectorPDEInversionDriver, + MagneticVectorPDEInversionOptions, +) from simpeg_drivers.utils.synthetics.driver import ( SyntheticsComponents, ) @@ -228,7 +233,14 @@ def test_joint_surveys_inv_run( check_target(output, target_run) -def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): +@pytest.mark.parametrize( + "option_class, driver_class", + [ + (MagneticVectorInversionOptions, MagneticVectorInversionDriver), + (MagneticVectorPDEInversionOptions, MagneticVectorPDEInversionDriver), + ], +) +def test_joint_surveys_mvi_run(tmp_path, option_class, driver_class, anomaly=0.05): drivers = [] with Workspace.create(tmp_path / f"{__name__}.geoh5") as geoh5: @@ -274,7 +286,7 @@ def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): else: inc_mod = None - params = MagneticVectorInversionOptions.build( + params = option_class.build( geoh5=geoh5, mesh=components.mesh, topography_object=components.topography, @@ -288,7 +300,7 @@ def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): starting_inclination=inc_mod, reference_model=0.0, ) - drivers.append(MagneticVectorInversionDriver(params)) + drivers.append(driver_class(params)) # Run the inverse joint_params = JointSurveysOptions.build( @@ -319,6 +331,10 @@ def test_joint_surveys_mvi_run(tmp_path, anomaly=0.05): == 3 ) + assert isinstance( + driver.regularization.objfcts[0], type(drivers[0].regularization.objfcts[0]) + ) + def test_joint_surveys_conductivity_run( tmp_path, diff --git a/tests/run_tests/driver_mvi_pde_test.py b/tests/run_tests/driver_mvi_pde_test.py new file mode 100644 index 00000000..4befa952 --- /dev/null +++ b/tests/run_tests/driver_mvi_pde_test.py @@ -0,0 +1,167 @@ +# ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +# 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 + +import numpy as np +from dask.distributed import LocalCluster, performance_report +from geoh5py.groups import PropertyGroup +from geoh5py.groups.property_group import GroupTypeEnum +from geoh5py.objects import Curve +from geoh5py.workspace import Workspace + +from simpeg_drivers.potential_fields.magnetic_vector_pde import ( + MagneticVectorPDEForwardDriver, + MagneticVectorPDEForwardOptions, + MagneticVectorPDEInversionDriver, + MagneticVectorPDEInversionOptions, +) +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 + + +# To test the full run and validate the inversion. +# Move this file out of the test directory and run. + +target_mvi_pde_run = {"data_norm": 181.99122096291276, "phi_d": 408, "phi_m": 0.013} + + +def test_mvi_pde_fwr_run( + tmp_path: Path, + n_grid_points=3, + cell_size=(5.0, 5.0, 5.0), + refinement=(2,), +): + # Run the forward + opts = SyntheticsComponentsOptions( + method="magnetic_vector_pde", + refine_plate=True, + survey=SurveyOptions( + n_stations=n_grid_points, n_lines=n_grid_points, drape=5.0 + ), + 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], + ), + model=ModelOptions(anomaly=0.05), + ) + with get_workspace(tmp_path / "inversion_test.ui.geoh5") as geoh5: + components = SyntheticsComponents(geoh5, options=opts) + inducing_field = (50000.0, 90.0, 0.0) + params = MagneticVectorPDEForwardOptions.build( + forward_only=True, + geoh5=geoh5, + mesh=components.mesh, + topography_object=components.topography, + inducing_field_strength=inducing_field[0], + inducing_field_inclination=inducing_field[1], + inducing_field_declination=inducing_field[2], + data_object=components.survey, + starting_model=components.model, + starting_inclination=45, + starting_declination=270, + ) + fwr_driver = MagneticVectorPDEForwardDriver(params) + fwr_driver.run() + + +def test_mvi_pde_run( + tmp_path: Path, + max_iterations=5, + upper_bound=1e-2, + pytest=True, +): + workpath = tmp_path / "inversion_test.ui.geoh5" + if pytest: + workpath = tmp_path.parent / "test_mvi_pde_fwr_run0" / "inversion_test.ui.geoh5" + + with Workspace(workpath) as geoh5: + tmi = geoh5.get_entity("Iteration_0_tmi")[0] + orig_tmi = tmi.values.copy() + components = SyntheticsComponents(geoh5=geoh5) + mesh = components.mesh + topography = components.topography + inducing_field = (50000.0, 90.0, 0.0) + dip, direction = mesh.add_data( + { + "dip": {"values": np.ones(mesh.n_cells) * 45}, + "direction": {"values": np.ones(mesh.n_cells) * 90}, + } + ) + gradient_rotation = PropertyGroup( + name="gradient_rotations", + property_group_type=GroupTypeEnum.DIPDIR, + properties=[direction, dip], + parent=mesh, + ) + # Run the inverse + params = MagneticVectorPDEInversionOptions.build( + geoh5=geoh5, + mesh=mesh, + topography_object=topography, + inducing_field_strength=inducing_field[0], + inducing_field_inclination=inducing_field[1], + inducing_field_declination=inducing_field[2], + data_object=tmi.parent, + starting_model=1e-4, + reference_model=0.0, + gradient_rotation=gradient_rotation, + s_norm=0.0, + x_norm=1.0, + y_norm=1.0, + z_norm=1.0, + tmi_channel=tmi, + tmi_uncertainty=5.0, + upper_bound=upper_bound, + max_global_iterations=max_iterations, + initial_beta_ratio=1e-0, + ) + params.write_ui_json(path=tmp_path / "Inv_run.ui.json") + + driver = MagneticVectorPDEInversionDriver(params) + driver.run() + + if pytest: + with Workspace(driver.params.geoh5.h5file): + # Re-open the workspace and get iterations + output = get_inversion_output( + driver.params.geoh5.h5file, driver.params.out_group.uid + ) + output["data"] = orig_tmi + check_target(output, target_mvi_pde_run) + + +if __name__ == "__main__": + # Full run + with LocalCluster(processes=True, n_workers=2, threads_per_worker=6) as cluster: + with cluster.get_client(): + # Full run + with performance_report(filename="diagnostics.html"): + test_mvi_pde_fwr_run( + Path("./"), + n_grid_points=20, + cell_size=(5.0, 5.0, 5.0), + refinement=(4, 4), + ) + test_mvi_pde_run(Path("./"), max_iterations=30, pytest=False)