ertkit 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ertkit/__init__.py +24 -0
- ertkit/_linalg.py +32 -0
- ertkit/_show_versions.py +49 -0
- ertkit/_version.py +24 -0
- ertkit/_warnings.py +18 -0
- ertkit/arrays.py +71 -0
- ertkit/noise.py +134 -0
- ertkit/plot/__init__.py +19 -0
- ertkit/plot/_ves.py +234 -0
- ertkit/py.typed +0 -0
- ertkit/results.py +82 -0
- ertkit/ves/__init__.py +28 -0
- ertkit/ves/data.py +167 -0
- ertkit/ves/forward.py +232 -0
- ertkit/ves/invert.py +632 -0
- ertkit/ves/io.py +179 -0
- ertkit/ves/model.py +86 -0
- ertkit/ves/smooth.py +508 -0
- ertkit/ves/survey.py +119 -0
- ertkit-0.1.0.dist-info/METADATA +156 -0
- ertkit-0.1.0.dist-info/RECORD +23 -0
- ertkit-0.1.0.dist-info/WHEEL +4 -0
- ertkit-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: ertkit
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Resistivity inversion for groundwater exploration (VES now, 2.5-D ERT planned), with uncertainty and depth of investigation.
|
|
5
|
+
Project-URL: Documentation, https://abdgafartunde.github.io/ertkit/
|
|
6
|
+
Project-URL: Source, https://github.com/abdgafartunde/ertkit
|
|
7
|
+
Project-URL: Issues, https://github.com/abdgafartunde/ertkit/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/abdgafartunde/ertkit/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Abd'gafar Tunde Tiamiyu
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: electrical resistivity tomography,geophysics,groundwater,inverse problems,uncertainty quantification,vertical electrical sounding
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Education
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Hydrology
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.12
|
|
27
|
+
Requires-Dist: libdlf>=0.3
|
|
28
|
+
Requires-Dist: numpy>=2.0
|
|
29
|
+
Requires-Dist: scipy>=1.16
|
|
30
|
+
Provides-Extra: plot
|
|
31
|
+
Requires-Dist: matplotlib>=3.10; extra == 'plot'
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# ertkit
|
|
35
|
+
|
|
36
|
+
[](https://pypi.org/project/ertkit/)
|
|
37
|
+
[](https://github.com/abdgafartunde/ertkit/actions/workflows/ci.yml)
|
|
38
|
+
[](https://abdgafartunde.github.io/ertkit/)
|
|
39
|
+
[](https://github.com/abdgafartunde/ertkit/blob/main/LICENSE)
|
|
40
|
+
|
|
41
|
+
**Resistivity imaging for groundwater exploration, with an honest account of
|
|
42
|
+
what the data can resolve.**
|
|
43
|
+
|
|
44
|
+
ertkit is a Python package for inverting vertical electrical sounding (VES)
|
|
45
|
+
data, with 2.5-D electrical resistivity tomography (ERT) to follow. Each
|
|
46
|
+
result comes with what is needed to judge it:
|
|
47
|
+
|
|
48
|
+
- a data error model, and a fit to the noise level rather than to every digit
|
|
49
|
+
of the data;
|
|
50
|
+
- sensitivity and depth of investigation, so that unresolved parts of a model
|
|
51
|
+
are marked as such;
|
|
52
|
+
- parameter uncertainty, with the range of equivalent models that fit the data
|
|
53
|
+
equally well planned for release 0.2.
|
|
54
|
+
|
|
55
|
+
## Why another resistivity code?
|
|
56
|
+
|
|
57
|
+
Boreholes are often sited from resistivity models whose reliability was never
|
|
58
|
+
quantified. Open tools such as [pyGIMLi](https://www.pygimli.org),
|
|
59
|
+
[SimPEG](https://simpeg.xyz) and [ResIPy](https://gitlab.com/hkex/resipy)
|
|
60
|
+
already provide excellent modeling and inversion. ertkit focuses on three
|
|
61
|
+
things: making reliability the default output, publishing a verification
|
|
62
|
+
report with every release, and keeping the code small enough to teach from.
|
|
63
|
+
The [design document](https://abdgafartunde.github.io/ertkit/dev/design.html)
|
|
64
|
+
gives the full statement of need, the mathematics and the verification plan.
|
|
65
|
+
|
|
66
|
+
## Installation
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pip install ertkit # Python 3.12 or later
|
|
70
|
+
pip install "ertkit[plot]" # with plotting (matplotlib)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Quick start
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
import numpy as np
|
|
77
|
+
import ertkit
|
|
78
|
+
from ertkit import ves
|
|
79
|
+
|
|
80
|
+
truth = ves.LayeredModel(resistivity=[150.0, 30.0, 800.0], thickness=[2.0, 15.0])
|
|
81
|
+
survey = ves.Survey.schlumberger(ab2=np.geomspace(2.5, 200.0, 22), mn2=0.5)
|
|
82
|
+
data = ves.Sounding.synthetic(truth, survey, ertkit.ErrorModel(relative=0.03), rng=5)
|
|
83
|
+
# Field data: data = ves.read_csv("sounding.csv")
|
|
84
|
+
|
|
85
|
+
fit = ves.invert_few_layer(data, n_layers=3, rng=0)
|
|
86
|
+
print(fit.summary()) # layers with uncertainty factors (x/), depths +- sd, fit
|
|
87
|
+
|
|
88
|
+
smooth = ves.invert_smooth(data)
|
|
89
|
+
print(f"depth of investigation: {smooth.doi:.0f} m")
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The first `print` shows:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
LayerFit: chi2 = 16.1 for 22 data (target 17, ratio 0.947)
|
|
96
|
+
converged: True (`ftol` termination condition is satisfied.)
|
|
97
|
+
|
|
98
|
+
layer resistivity (ohm m) thickness (m) depth (m)
|
|
99
|
+
1 144.6 x/ 1.04 2.04 x/ 1.04 2.04 +- 0.075
|
|
100
|
+
2 30.18 x/ 1.03 15.2 x/ 1.05 17.3 +- 0.69
|
|
101
|
+
3 787.9 x/ 1.12 half-space
|
|
102
|
+
p-value: 0.517
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Here `x/ 1.04` means "multiplied or divided by 1.04" (one standard
|
|
106
|
+
deviation).
|
|
107
|
+
|
|
108
|
+
## Status
|
|
109
|
+
|
|
110
|
+
Release 0.1 covers vertical electrical sounding: a layered-earth forward
|
|
111
|
+
model, few-layer inversion with linearized uncertainty, smooth inversion with
|
|
112
|
+
sensitivity and a depth of investigation, CSV input and plotting. Planned
|
|
113
|
+
releases:
|
|
114
|
+
|
|
115
|
+
| Release | Content |
|
|
116
|
+
|---|---|
|
|
117
|
+
| 0.1 | VES: layered-earth forward model, few-layer and smooth inversion, linearized uncertainty, sensitivity and depth of investigation |
|
|
118
|
+
| 0.2 | VES equivalence analysis |
|
|
119
|
+
| 0.3 | 2.5-D ERT forward modeling |
|
|
120
|
+
| 0.4 | ERT inversion with an error model and cumulative sensitivity |
|
|
121
|
+
| 0.5 | ERT depth of investigation and uncertainty maps |
|
|
122
|
+
| 0.6 | Field data formats and an end-to-end field example |
|
|
123
|
+
| 1.0 | Stable public API |
|
|
124
|
+
|
|
125
|
+
## Documentation
|
|
126
|
+
|
|
127
|
+
The documentation at <https://abdgafartunde.github.io/ertkit/> has the user
|
|
128
|
+
guide, worked examples, the API reference and the
|
|
129
|
+
[verification report](https://abdgafartunde.github.io/ertkit/verification.html),
|
|
130
|
+
generated by the test suite for each release.
|
|
131
|
+
|
|
132
|
+
## Contributing
|
|
133
|
+
|
|
134
|
+
Bug reports, questions and suggestions are welcome on the
|
|
135
|
+
[issue tracker](https://github.com/abdgafartunde/ertkit/issues). To work on
|
|
136
|
+
the code, install [uv](https://docs.astral.sh/uv/) and run:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
git clone https://github.com/abdgafartunde/ertkit.git
|
|
140
|
+
cd ertkit
|
|
141
|
+
uv sync
|
|
142
|
+
uv run pytest
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
See the [contributing guide](https://github.com/abdgafartunde/ertkit/blob/main/CONTRIBUTING.md)
|
|
146
|
+
and the [Code of Conduct](https://github.com/abdgafartunde/ertkit/blob/main/CODE_OF_CONDUCT.md).
|
|
147
|
+
|
|
148
|
+
## Citing
|
|
149
|
+
|
|
150
|
+
Each release is archived on Zenodo with a DOI. Citation metadata are in
|
|
151
|
+
[CITATION.cff](https://github.com/abdgafartunde/ertkit/blob/main/CITATION.cff);
|
|
152
|
+
please also cite the methods ertkit implements.
|
|
153
|
+
|
|
154
|
+
## License
|
|
155
|
+
|
|
156
|
+
MIT; see [LICENSE](https://github.com/abdgafartunde/ertkit/blob/main/LICENSE).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
ertkit/__init__.py,sha256=24BcAFlSBQe5PReYXRTCjxvKzk7JkfwevWuEJ_9pGDo,605
|
|
2
|
+
ertkit/_linalg.py,sha256=imXe78-oY0zTIVb60WvK_tvWOCaeVhoXhcUkgciakWo,1061
|
|
3
|
+
ertkit/_show_versions.py,sha256=k-JASR6uL4bMqCUkacKLzS1WtMwiDsbZuc5qiSmImqM,1318
|
|
4
|
+
ertkit/_version.py,sha256=n_5vdJsPNu7wZ57LGuRL585uvll-hiuvZUBWzdG0RQU,520
|
|
5
|
+
ertkit/_warnings.py,sha256=0M-SA1CIzqoUl0DV4VeXpw6x41fd71pZVV_f2RPGZPA,545
|
|
6
|
+
ertkit/arrays.py,sha256=oEA1I3TKItrMTkjS6p8krJCIFlMUMq-vUzj6Cazyhi0,2357
|
|
7
|
+
ertkit/noise.py,sha256=on8ucclEUmlxo59wCl3OjnhzLENu9zQjzC-jcqgrhQY,4441
|
|
8
|
+
ertkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
ertkit/results.py,sha256=3tIhCTmZX4gup8Z7c2_zRBXWY4bUG1L40bBuGOoQYx4,2711
|
|
10
|
+
ertkit/plot/__init__.py,sha256=_w6Qwc1DrxCi2k3RF-hFe0CIVcx-1ntM9VtbLM3VYi4,508
|
|
11
|
+
ertkit/plot/_ves.py,sha256=aTGys998ayRQrCHBGxam1n8sek-4fsjEMFi7P3pDlcs,8527
|
|
12
|
+
ertkit/ves/__init__.py,sha256=Ax9v7iYmvZ0VEQUCXq1zofK0C6L2ov3pfyUiTlZ59wY,765
|
|
13
|
+
ertkit/ves/data.py,sha256=TjJPslyg1twukNNSkai650khSZt7GAux-GCIhfnnXdQ,5876
|
|
14
|
+
ertkit/ves/forward.py,sha256=OiNhEoQJ171Gkn6PWMxsFQFoRNEuIKkycLQ-JpzwB0w,7850
|
|
15
|
+
ertkit/ves/invert.py,sha256=kzTOWH3CLdkmPqkuAB_pmQIKoAV0KtXKHWcrwvZJS_A,25227
|
|
16
|
+
ertkit/ves/io.py,sha256=koQbW8AXGp77exm6P8JHm8jPm-6bAc5vj1-V5rsUq78,6363
|
|
17
|
+
ertkit/ves/model.py,sha256=R0x16Jes7K_qTpGtxxNKkOH6AM_N0XXC39pHO-Mye80,2849
|
|
18
|
+
ertkit/ves/smooth.py,sha256=uDXiEffajpRrn_YTMrsN_mI8k4NYa26rjhhUlgaU46I,20956
|
|
19
|
+
ertkit/ves/survey.py,sha256=nirRh4ZSjDfCl7zR1n5DhCJON7T-ZoZxyI1_VNDqpPw,3665
|
|
20
|
+
ertkit-0.1.0.dist-info/METADATA,sha256=9RgibzfCLBW6PpM9dTHtSLubGV4-XdK5cn6uzT9OSvw,6319
|
|
21
|
+
ertkit-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
|
|
22
|
+
ertkit-0.1.0.dist-info/licenses/LICENSE,sha256=ZFbYpQSovfdOWPflAmSg5UBBcTsBd-egkyYf0lUr7-Q,1080
|
|
23
|
+
ertkit-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Abd'gafar Tunde Tiamiyu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|