stoneforge 0.2.1__tar.gz → 0.2.2__tar.gz
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.
- stoneforge-0.2.2/CHANGELOG.txt +6 -0
- {stoneforge-0.2.1/stoneforge.egg-info → stoneforge-0.2.2}/PKG-INFO +17 -15
- {stoneforge-0.2.1 → stoneforge-0.2.2}/README.md +10 -9
- {stoneforge-0.2.1 → stoneforge-0.2.2}/pyproject.toml +9 -9
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/__init__.py +2 -1
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/Component.py +210 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/LogicalFile.py +428 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/LogicalRecord.py +783 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/LogicalRecordSegment.py +272 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/RCReader.py +702 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/StorageUnitLabel.py +87 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/VisibleRecord.py +80 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/__init__.py +11 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/common.py +139 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/core.py +177 -0
- stoneforge-0.2.2/stoneforge/_vendor/dlispy/tests/test_basic.py +546 -0
- stoneforge-0.2.2/stoneforge/data_management/__init__.py +4 -0
- stoneforge-0.2.2/stoneforge/data_management/_resampling.py +138 -0
- stoneforge-0.2.2/stoneforge/data_management/preprocessing.py +247 -0
- stoneforge-0.2.2/stoneforge/inversion/__init__.py +6 -0
- stoneforge-0.2.2/stoneforge/inversion/mineralogical/__init__.py +1 -0
- stoneforge-0.2.2/stoneforge/inversion/mineralogical/multimineral.py +128 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/inversion/viability_study/bayes.py +13 -0
- stoneforge-0.2.2/stoneforge/io/__init__.py +7 -0
- stoneforge-0.2.2/stoneforge/io/dlist.py +260 -0
- stoneforge-0.2.2/stoneforge/io/tabr.py +79 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/__init__.py +3 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/__init__.py +4 -1
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/porosity.py +34 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/water_saturation.py +1 -1
- stoneforge-0.2.2/stoneforge/pseudo_wells/__init__.py +8 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/pseudo_wells/lithology_generator.py +1 -1
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/pseudo_wells/monte_carlo_simulations.py +2 -2
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/pseudo_wells/pseudo_tools.py +12 -0
- stoneforge-0.2.2/stoneforge/pseudo_wells/referenced.py +213 -0
- stoneforge-0.2.2/stoneforge/reservoir/__init__.py +6 -0
- stoneforge-0.2.2/stoneforge/reservoir/toc_v.py +184 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/__init__.py +5 -1
- stoneforge-0.2.2/stoneforge/vis/__init__.py +5 -0
- stoneforge-0.2.2/stoneforge/vis/img.py +139 -0
- stoneforge-0.2.2/stoneforge/vis/plot_welllog.py +803 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/__init__.py +2 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2/stoneforge.egg-info}/PKG-INFO +17 -15
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/SOURCES.txt +42 -25
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/requires.txt +6 -5
- stoneforge-0.2.2/tests/tests_data_management/test_preprocessing.py +48 -0
- stoneforge-0.2.2/tests/tests_data_management/test_resampling.py +94 -0
- stoneforge-0.2.2/tests/tests_inversion/test_regularized_acoustic_reflectivity_inversion.py +423 -0
- stoneforge-0.2.2/tests/tests_io/test_csv.py +7 -0
- stoneforge-0.2.2/tests/tests_io/test_dlis.py +11 -0
- stoneforge-0.2.2/tests/tests_io/test_las2.py +9 -0
- stoneforge-0.2.2/tests/tests_io/test_las3.py +8 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_net_pay/test_net_pay_analytical.py +1 -1
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_net_pay/test_net_pay_hypothetical.py +1 -1
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_net_pay/test_net_pay_numerical.py +1 -1
- stoneforge-0.2.2/tests/tests_porosity/test_porosity_extra.py +64 -0
- stoneforge-0.2.2/tests/tests_rock_physics/test_elastic_constants.py +73 -0
- stoneforge-0.2.2/tests/tests_rock_physics/test_gem.py +220 -0
- stoneforge-0.2.2/tests/tests_rock_physics/test_inclusion.py +58 -0
- stoneforge-0.2.2/tests/tests_rock_physics/test_rock_physics_bounds.py +27 -0
- stoneforge-0.2.2/tests/tests_synthetic/test_lithology_generator.py +54 -0
- stoneforge-0.2.2/tests/tests_synthetic/test_monte_carlo_simulations.py +196 -0
- stoneforge-0.2.2/tests/tests_synthetic/test_pseudo_tools.py +119 -0
- stoneforge-0.2.2/tests/tests_synthetic/test_referenced.py +88 -0
- stoneforge-0.2.2/tests/tests_total_organic_carbon/test_toc_j.py +33 -0
- stoneforge-0.2.2/tests/tests_total_organic_carbon/test_toc_v.py +36 -0
- stoneforge-0.2.2/tests/tests_viability/test_bayes.py +58 -0
- stoneforge-0.2.2/tests/tests_vis/test_img.py +63 -0
- stoneforge-0.2.2/tests/tests_vis/test_plot_welllog.py +133 -0
- stoneforge-0.2.2/tests/tests_water_saturation/test_water_saturation_facade.py +75 -0
- stoneforge-0.2.2/tests/tests_wavelets/test_wavelets.py +130 -0
- stoneforge-0.2.1/CHANGELOG.txt +0 -6
- stoneforge-0.2.1/docs/_build/html/_sources/index.rst.txt +0 -42
- stoneforge-0.2.1/docs/_build/html/_sources/modules/machinelearning/classification.rst.txt +0 -39
- stoneforge-0.2.1/docs/_build/html/_sources/modules/machinelearning/index.rst.txt +0 -10
- stoneforge-0.2.1/docs/_build/html/_sources/modules/machinelearning/regression.rst.txt +0 -39
- stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/index.rst.txt +0 -60
- stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/permeability.rst.txt +0 -32
- stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/porosity.rst.txt +0 -36
- stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/shale_volume.rst.txt +0 -38
- stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/water_saturation.rst.txt +0 -32
- stoneforge-0.2.1/docs/_build/html/_sources/modules/pseudowells.rst.txt +0 -23
- stoneforge-0.2.1/docs/_build/html/_sources/modules/reservoir/index.rst.txt +0 -15
- stoneforge-0.2.1/docs/_build/html/_sources/modules/reservoir/net_pay.rst.txt +0 -18
- stoneforge-0.2.1/docs/_build/html/_sources/modules/rockphysics.rst.txt +0 -47
- stoneforge-0.2.1/docs/_build/html/_sources/usage/installation.rst.txt +0 -40
- stoneforge-0.2.1/docs/_build/html/_sources/usage/quickstart.rst.txt +0 -30
- stoneforge-0.2.1/stoneforge/data_management/__init__.py +0 -1
- stoneforge-0.2.1/stoneforge/data_management/preprocessing.py +0 -141
- stoneforge-0.2.1/stoneforge/inversion/__init__.py +0 -2
- stoneforge-0.2.1/stoneforge/io/__init__.py +0 -5
- stoneforge-0.2.1/stoneforge/io/csv.py +0 -134
- stoneforge-0.2.1/stoneforge/io/dlisio_r.py +0 -443
- stoneforge-0.2.1/stoneforge/io/tabr.py +0 -104
- stoneforge-0.2.1/stoneforge/preprocessing/__init__.py +0 -8
- stoneforge-0.2.1/stoneforge/preprocessing/data_management.py +0 -348
- stoneforge-0.2.1/stoneforge/preprocessing/data_processing.py +0 -180
- stoneforge-0.2.1/stoneforge/preprocessing/las2.py +0 -370
- stoneforge-0.2.1/stoneforge/preprocessing/las_pandas.py +0 -24
- stoneforge-0.2.1/stoneforge/pseudo_wells/__init__.py +0 -3
- stoneforge-0.2.1/stoneforge/reservoir/__init__.py +0 -1
- stoneforge-0.2.1/stoneforge/vis/__init__.py +0 -2
- stoneforge-0.2.1/stoneforge/vis/img.py +0 -40
- stoneforge-0.2.1/tests/tests_load/test_load.py +0 -13
- stoneforge-0.2.1/tests/tests_rock_physics/test_gem.py +0 -48
- {stoneforge-0.2.1 → stoneforge-0.2.2}/LICENSE +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/MANIFEST.in +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/docs/conf.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/setup.cfg +0 -0
- /stoneforge-0.2.1/tests/tests_rock_physics/test_elastic_constants.py → /stoneforge-0.2.2/stoneforge/_vendor/dlispy/tests/__init__.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/inversion/regularized_acoustic_reflectivy_inversion.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/inversion/viability_study/__init__.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/io/las2.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/io/las3.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/__init__.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/evaluation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/fit.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/predict.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/settings.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/validation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/__init__.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/evaluation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/fit.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/predict.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/settings.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/validation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/__init__.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/evaluation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/fit.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/predict.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/settings.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/validation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/__init__.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/evaluation.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/fit.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/mldr_project.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/predict.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/settings.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/helpers.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/permeability.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/shale_volume.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/reservoir/net_pay.py +0 -0
- {stoneforge-0.2.1/stoneforge/petrophysics → stoneforge-0.2.2/stoneforge/reservoir}/total_organic_carbon_content.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/elastic_constants.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/fluid_substitution.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/gem.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/inclusion.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/rock_physics_bounds.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/butterworth.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/ormsby.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/ricker.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/dependency_links.txt +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/top_level.txt +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_permeability/test_permeability_analytical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_permeability/test_permeability_hypothetical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_permeability/test_permeability_numerical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_porosity/test_porosity_analytical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_porosity/test_porosity_hypothetical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_porosity/test_porosity_numerical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_rock_physics/test_fluid_substitution.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_shale_volume/test_shale_volume_analytical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_shale_volume/test_shale_volume_hypothetical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_shale_volume/test_shale_volume_numerical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_water_saturation/test_water_saturation_analytical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_water_saturation/test_water_saturation_hypothetical.py +0 -0
- {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_water_saturation/test_water_saturation_numerical.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stoneforge
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Geophysics equations, algorithms and methods
|
|
5
5
|
Author: GIECAR - UFF, Wagner M. Lupinacci, Fernando Vizeu, Fábio Júnior D Fernandes, José A. V. Dias, Mario M. Ramos, Jordan S. Cuno, João Vitor A. Estrella, Ana Carolina Oliveira de Almeida, Breno D. Chrispim
|
|
6
6
|
License-Expression: MIT
|
|
@@ -12,14 +12,15 @@ Classifier: Programming Language :: Python :: 3
|
|
|
12
12
|
Requires-Python: >=3.12
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Requires-Dist:
|
|
15
|
+
Requires-Dist: click==8.1.8
|
|
16
|
+
Requires-Dist: hypothesis>=6.148.6
|
|
17
|
+
Requires-Dist: matplotlib>=3.10.0
|
|
16
18
|
Requires-Dist: numpy>=2.2.0
|
|
19
|
+
Requires-Dist: pandas>=2.2.2
|
|
17
20
|
Requires-Dist: pytest>=8.3.4
|
|
18
|
-
Requires-Dist:
|
|
21
|
+
Requires-Dist: requests>=2.34.2
|
|
19
22
|
Requires-Dist: scikit-learn>=1.6.1
|
|
20
|
-
Requires-Dist:
|
|
21
|
-
Requires-Dist: pandas>=2.2.2
|
|
22
|
-
Requires-Dist: hypothesis>=6.148.6
|
|
23
|
+
Requires-Dist: scipy>=1.14.1
|
|
23
24
|
Dynamic: license-file
|
|
24
25
|
|
|
25
26
|
<p align="center">
|
|
@@ -51,8 +52,11 @@ Part of the <strong>Appy</strong> project
|
|
|
51
52
|
|
|
52
53
|
## About
|
|
53
54
|
|
|
54
|
-
|
|
55
|
+
!!! Welcome to the Stoneforge Library !!!
|
|
56
|
+
|
|
57
|
+
The Stoneforge library is an institutional software library associated with the reservoir characterization and scientific research activities of the GIECAR laboratory at the <a href="https://www.uff.br/">Universidade Federal Fluminense (UFF)</a>, particularly within the <a href="http://geologiaegeofisica.sites.uff.br/">Department of Geology and Geophysics (GGO)</a>.
|
|
55
58
|
|
|
59
|
+
The library aims to support the teaching and development of Python routines for solving geological and geophysical problems, with a particular focus on well-log data, laboratory measurements, and the integration of well and seismic data.
|
|
56
60
|
|
|
57
61
|
## Installation and first steps
|
|
58
62
|
|
|
@@ -68,17 +72,15 @@ and them verify the installation using the following command in Python:
|
|
|
68
72
|
>>> import stoneforge
|
|
69
73
|
```
|
|
70
74
|
|
|
75
|
+
you can view and access more examples at: https://github.com/giecaruff/stoneforge/tree/main/examples
|
|
71
76
|
|
|
72
|
-
|
|
73
77
|
## Dataset
|
|
74
78
|
|
|
75
|
-
The stoneforge dataset comprises the following
|
|
79
|
+
### The stoneforge dataset comprises the following:
|
|
80
|
+
|
|
81
|
+
[National Agency of Petroleum, Natural Gas and Biofuels (ANP)](https://reate.cprm.gov.br/anp/TERRESTRE): Recôncavo Basin Well log data from free access of onshore public data.
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
[USGS Well Index](https://pubs.usgs.gov/of/1999/ofr-99-0015/Wells/WellIdx.htm)
|
|
83
|
+
[USGS Well Index](https://pubs.usgs.gov/of/1999/ofr-99-0015/Wells/WellIdx.htm): Wildcat wells data in the National Petroleum Reserve in Alaska. </br>
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
[DSDP Leg 96 - Hole 616](https://mlp.ldeo.columbia.edu/data/dsdp/leg96/616/)
|
|
85
|
+
[DSDP Leg 96 - Hole 616](https://mlp.ldeo.columbia.edu/data/dsdp/leg96/616/): Mississippi data from the fan (Gulf of Mexico - Processed and Original) from the DSDP (Deep Sea Drilling Project).</br>
|
|
82
86
|
|
|
83
|
-
Zihlman, F. N creator ; Oliver, H. L ; Geological Survey (U.S.)
|
|
84
|
-
Reston, Va. : Denver, Colo : U.S. Dept. of the Interior, U.S. Geological Survey1999
|
|
@@ -27,8 +27,11 @@ Part of the <strong>Appy</strong> project
|
|
|
27
27
|
|
|
28
28
|
## About
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
!!! Welcome to the Stoneforge Library !!!
|
|
31
31
|
|
|
32
|
+
The Stoneforge library is an institutional software library associated with the reservoir characterization and scientific research activities of the GIECAR laboratory at the <a href="https://www.uff.br/">Universidade Federal Fluminense (UFF)</a>, particularly within the <a href="http://geologiaegeofisica.sites.uff.br/">Department of Geology and Geophysics (GGO)</a>.
|
|
33
|
+
|
|
34
|
+
The library aims to support the teaching and development of Python routines for solving geological and geophysical problems, with a particular focus on well-log data, laboratory measurements, and the integration of well and seismic data.
|
|
32
35
|
|
|
33
36
|
## Installation and first steps
|
|
34
37
|
|
|
@@ -44,17 +47,15 @@ and them verify the installation using the following command in Python:
|
|
|
44
47
|
>>> import stoneforge
|
|
45
48
|
```
|
|
46
49
|
|
|
50
|
+
you can view and access more examples at: https://github.com/giecaruff/stoneforge/tree/main/examples
|
|
47
51
|
|
|
48
|
-
|
|
49
52
|
## Dataset
|
|
50
53
|
|
|
51
|
-
The stoneforge dataset comprises the following
|
|
54
|
+
### The stoneforge dataset comprises the following:
|
|
55
|
+
|
|
56
|
+
[National Agency of Petroleum, Natural Gas and Biofuels (ANP)](https://reate.cprm.gov.br/anp/TERRESTRE): Recôncavo Basin Well log data from free access of onshore public data.
|
|
52
57
|
|
|
53
|
-
|
|
54
|
-
[USGS Well Index](https://pubs.usgs.gov/of/1999/ofr-99-0015/Wells/WellIdx.htm)
|
|
58
|
+
[USGS Well Index](https://pubs.usgs.gov/of/1999/ofr-99-0015/Wells/WellIdx.htm): Wildcat wells data in the National Petroleum Reserve in Alaska. </br>
|
|
55
59
|
|
|
56
|
-
|
|
57
|
-
[DSDP Leg 96 - Hole 616](https://mlp.ldeo.columbia.edu/data/dsdp/leg96/616/)
|
|
60
|
+
[DSDP Leg 96 - Hole 616](https://mlp.ldeo.columbia.edu/data/dsdp/leg96/616/): Mississippi data from the fan (Gulf of Mexico - Processed and Original) from the DSDP (Deep Sea Drilling Project).</br>
|
|
58
61
|
|
|
59
|
-
Zihlman, F. N creator ; Oliver, H. L ; Geological Survey (U.S.)
|
|
60
|
-
Reston, Va. : Denver, Colo : U.S. Dept. of the Interior, U.S. Geological Survey1999
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "stoneforge"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.2"
|
|
4
4
|
authors = [
|
|
5
5
|
{name = "GIECAR - UFF"},
|
|
6
6
|
{name = "Wagner M. Lupinacci"},
|
|
@@ -18,14 +18,15 @@ description = "Geophysics equations, algorithms and methods"
|
|
|
18
18
|
readme = "README.md"
|
|
19
19
|
requires-python = ">=3.12"
|
|
20
20
|
dependencies = [
|
|
21
|
-
"
|
|
21
|
+
"click==8.1.8",
|
|
22
|
+
"hypothesis>=6.148.6",
|
|
23
|
+
"matplotlib>=3.10.0",
|
|
22
24
|
"numpy>=2.2.0",
|
|
25
|
+
"pandas>=2.2.2",
|
|
23
26
|
"pytest>=8.3.4",
|
|
24
|
-
"
|
|
27
|
+
"requests>=2.34.2",
|
|
25
28
|
"scikit-learn>=1.6.1",
|
|
26
|
-
"
|
|
27
|
-
"pandas>=2.2.2",
|
|
28
|
-
"hypothesis>=6.148.6"
|
|
29
|
+
"scipy>=1.14.1"
|
|
29
30
|
]
|
|
30
31
|
classifiers = [
|
|
31
32
|
"Development Status :: 5 - Production/Stable",
|
|
@@ -62,7 +63,6 @@ exclude = ["tests", "docs", "examples"] # Exclude unnecessary files
|
|
|
62
63
|
[tool.uv]
|
|
63
64
|
package = true
|
|
64
65
|
|
|
65
|
-
|
|
66
66
|
[tool.ruff]
|
|
67
67
|
# Set the maximum line length to 79.
|
|
68
68
|
line-length = 79
|
|
@@ -81,7 +81,7 @@ extend-select = [
|
|
|
81
81
|
convention = "google"
|
|
82
82
|
|
|
83
83
|
[tool.pytest.ini_options]
|
|
84
|
-
pythonpath = "
|
|
84
|
+
pythonpath = "."
|
|
85
85
|
minversion = "6.0"
|
|
86
86
|
addopts = [
|
|
87
87
|
"-ra",
|
|
@@ -94,7 +94,7 @@ addopts = [
|
|
|
94
94
|
"--cov-report=term-missing:skip-covered",
|
|
95
95
|
"--cov-report=html:htmlcov",
|
|
96
96
|
"--cov-report=xml",
|
|
97
|
-
"--cov-fail-under=
|
|
97
|
+
"--cov-fail-under=75",
|
|
98
98
|
]
|
|
99
99
|
testpaths = [
|
|
100
100
|
"tests",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from . import petrophysics # noqa: F401
|
|
2
2
|
from . import pseudo_wells # noqa: F401
|
|
3
3
|
from . import reservoir # noqa: F401
|
|
4
|
+
from . import vis # noqa: F401
|
|
4
5
|
|
|
5
6
|
from . import machine_learning # noqa: F401
|
|
6
|
-
from . import
|
|
7
|
+
from . import data_management # noqa: F401
|
|
7
8
|
from . import rock_physics # noqa: F401
|
|
8
9
|
|
|
9
10
|
from . import inversion # noqa: F401
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
ABSATER = 'ABSATER'
|
|
2
|
+
ATTRIB = 'ATTRIB'
|
|
3
|
+
INVATR = 'INVATR'
|
|
4
|
+
OBJECT = 'OBJECT'
|
|
5
|
+
RDSET = 'RDSET'
|
|
6
|
+
RSET = 'RSET'
|
|
7
|
+
SET = 'SET'
|
|
8
|
+
|
|
9
|
+
ComponentRole = {
|
|
10
|
+
'000': ABSATER,
|
|
11
|
+
'001': ATTRIB,
|
|
12
|
+
'010': INVATR,
|
|
13
|
+
'011': OBJECT,
|
|
14
|
+
'100': 'reserved',
|
|
15
|
+
'101': RDSET,
|
|
16
|
+
'110': RSET,
|
|
17
|
+
'111': SET
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
"""
|
|
21
|
+
- An EFLR begins with a Set components. Type in Set is mandatory, name is optional.
|
|
22
|
+
- A Redundant Set is an identical copy of some Set written previously in the same Logical File, including the Set
|
|
23
|
+
Name and Type. If a Redundant Set is has a null Name, then the Set of which it is a copy must be the only Set in the
|
|
24
|
+
same Logical File of the same Type, excluding other Redundant Sets, preceding the given Redundant Set.
|
|
25
|
+
|
|
26
|
+
- A Replacement Set has the same Type and (non-null) Name, the same Template, and the same Objects (none added,
|
|
27
|
+
none deleted) in the same order as a Set written previously in the same Logical File. However, the Attributes of the
|
|
28
|
+
Replacement Set reflect all updates that may have been applied since the original Set was written. A Replacement
|
|
29
|
+
Set can be written anywhere in a Logical File following the original Set that it replaces. There may be any number
|
|
30
|
+
of Replacement Sets for a given original Set.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
- Then Template follows Set. Template is just a collection of Attribute Components and/or Invariant Attribute
|
|
35
|
+
Components. This define the structures of the objects in this Set. All Components in the Template must have
|
|
36
|
+
distinct, non-null Labels.
|
|
37
|
+
|
|
38
|
+
- Object components follows the Template. Object name is manadatory,
|
|
39
|
+
|
|
40
|
+
- Attribute component.
|
|
41
|
+
- All Attributes in the same "column" of a Set must have the same Attribute Label, namely,
|
|
42
|
+
the one specified in the Template Attribute Component. Therefore, Attribute Components that follow Object Components
|
|
43
|
+
must not have Attribute Labels (because it is already defined in Template).
|
|
44
|
+
|
|
45
|
+
- The remaining Characteristics may be freely specified by an Object's Attribute Components. Any Characteristic
|
|
46
|
+
not present assumes the local default value as specified in the corresponding Attribute Component in the Template.
|
|
47
|
+
|
|
48
|
+
- Missing Attribute Components imply that local defaults should be used for the Characteristics of the
|
|
49
|
+
corresponding Attribute. Since Attribute order is important within a Set, only trailing Attribute Components can be
|
|
50
|
+
omitted.
|
|
51
|
+
|
|
52
|
+
- An Attribute is considered to be Absent for an Object when its Attribute Component is
|
|
53
|
+
replaced by an Absent Attribute Component. An Absent Attribute is one for which no
|
|
54
|
+
information is provided, not even default meaning.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class Component(object):
|
|
59
|
+
"""
|
|
60
|
+
Represent Component in RP 66, super class for set, object, attribute
|
|
61
|
+
"""
|
|
62
|
+
def toJSON(self):
|
|
63
|
+
return self.__dict__
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class Object(Component):
|
|
67
|
+
"""
|
|
68
|
+
Object. Each object only have two things: name and a list of attributes.
|
|
69
|
+
"""
|
|
70
|
+
def __init__(self):
|
|
71
|
+
self._name = None
|
|
72
|
+
self._attributes= []
|
|
73
|
+
|
|
74
|
+
@property
|
|
75
|
+
def name(self):
|
|
76
|
+
"""
|
|
77
|
+
:return:
|
|
78
|
+
:rtype: ObName
|
|
79
|
+
"""
|
|
80
|
+
return self._name
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def attributes(self):
|
|
84
|
+
return self._attributes
|
|
85
|
+
|
|
86
|
+
def __str__(self):
|
|
87
|
+
attrStr = "\n ".join(map(str, self.attributes))
|
|
88
|
+
return "Object[name:{} with attributes:\n{}]".format(self.name, attrStr)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class Attribute(Component):
|
|
92
|
+
"""
|
|
93
|
+
Represent Attribute in RP66.
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
def __init__(self):
|
|
97
|
+
self._label = ''
|
|
98
|
+
self._count = 1
|
|
99
|
+
# default rep code is 19.
|
|
100
|
+
self._repCode = 19
|
|
101
|
+
self._units = ''
|
|
102
|
+
self._value = None
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def clone(self, attr):
|
|
106
|
+
attr._label = self._label
|
|
107
|
+
attr._count = self._count
|
|
108
|
+
attr._repCode = self._repCode
|
|
109
|
+
attr._units = self._units
|
|
110
|
+
attr._value = self._value
|
|
111
|
+
return attr
|
|
112
|
+
|
|
113
|
+
def __str__(self):
|
|
114
|
+
return "Attribute[label:{} count:{} repCode:{} units:{} value:{}]".\
|
|
115
|
+
format(self._label, self._count, self._repCode, self._units, self._value)
|
|
116
|
+
|
|
117
|
+
@property
|
|
118
|
+
def value(self):
|
|
119
|
+
return self._value
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def label(self):
|
|
123
|
+
return self._label
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def count(self):
|
|
127
|
+
return self._count
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def repCode(self):
|
|
131
|
+
return self._repCode
|
|
132
|
+
|
|
133
|
+
@property
|
|
134
|
+
def units(self):
|
|
135
|
+
return self._units
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class AbsentAttribute(Attribute):
|
|
141
|
+
"""
|
|
142
|
+
Represent Absent Attribute.
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
def __init__(self, attr):
|
|
146
|
+
self._label = attr._label
|
|
147
|
+
self._count = attr._count
|
|
148
|
+
self._repCode = attr._repCode
|
|
149
|
+
self._units = attr._units
|
|
150
|
+
self._value = attr._value
|
|
151
|
+
|
|
152
|
+
class InvariantAttribute(Attribute):
|
|
153
|
+
"""
|
|
154
|
+
Represent Invariant attribute.
|
|
155
|
+
"""
|
|
156
|
+
pass
|
|
157
|
+
|
|
158
|
+
class Set(Component):
|
|
159
|
+
"""
|
|
160
|
+
Represent set. Set is central piece in EFLR, each set has a name, type and a template which defines attributes each
|
|
161
|
+
of objects should have, then a list of objects.
|
|
162
|
+
"""
|
|
163
|
+
def __init__(self):
|
|
164
|
+
self._type = None
|
|
165
|
+
self._name = None
|
|
166
|
+
self.template = None
|
|
167
|
+
self.objects = []
|
|
168
|
+
|
|
169
|
+
@property
|
|
170
|
+
def type(self):
|
|
171
|
+
return self._type
|
|
172
|
+
|
|
173
|
+
@property
|
|
174
|
+
def name(self):
|
|
175
|
+
return self._name
|
|
176
|
+
|
|
177
|
+
def __str__(self):
|
|
178
|
+
return 'Set[type:{} name:{} numOfObjects:{}]'.format(self._type, self._name, len(self.objects))
|
|
179
|
+
|
|
180
|
+
class RedundantSet(Set):
|
|
181
|
+
"""
|
|
182
|
+
Represent Redundant set.
|
|
183
|
+
"""
|
|
184
|
+
pass
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class ReplacementSet(Set):
|
|
188
|
+
"""
|
|
189
|
+
Represent replacementset.
|
|
190
|
+
"""
|
|
191
|
+
pass
|
|
192
|
+
|
|
193
|
+
class Template(object):
|
|
194
|
+
"""
|
|
195
|
+
Template. Template only contains a list of attribute which should be included in each objects in the same set.
|
|
196
|
+
It is similar to database columns.
|
|
197
|
+
"""
|
|
198
|
+
def __init__(self):
|
|
199
|
+
self._attrList = []
|
|
200
|
+
|
|
201
|
+
@property
|
|
202
|
+
def attrList(self):
|
|
203
|
+
return self._attrList
|
|
204
|
+
|
|
205
|
+
def __str__(self):
|
|
206
|
+
attrListStr = '\n '.join(map(str, self._attrList))
|
|
207
|
+
return "Template with attributes [\n{}]".format(attrListStr)
|
|
208
|
+
|
|
209
|
+
def toJSON(self):
|
|
210
|
+
return dict(attributeList=self._attrList)
|