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.
Files changed (166) hide show
  1. stoneforge-0.2.2/CHANGELOG.txt +6 -0
  2. {stoneforge-0.2.1/stoneforge.egg-info → stoneforge-0.2.2}/PKG-INFO +17 -15
  3. {stoneforge-0.2.1 → stoneforge-0.2.2}/README.md +10 -9
  4. {stoneforge-0.2.1 → stoneforge-0.2.2}/pyproject.toml +9 -9
  5. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/__init__.py +2 -1
  6. stoneforge-0.2.2/stoneforge/_vendor/dlispy/Component.py +210 -0
  7. stoneforge-0.2.2/stoneforge/_vendor/dlispy/LogicalFile.py +428 -0
  8. stoneforge-0.2.2/stoneforge/_vendor/dlispy/LogicalRecord.py +783 -0
  9. stoneforge-0.2.2/stoneforge/_vendor/dlispy/LogicalRecordSegment.py +272 -0
  10. stoneforge-0.2.2/stoneforge/_vendor/dlispy/RCReader.py +702 -0
  11. stoneforge-0.2.2/stoneforge/_vendor/dlispy/StorageUnitLabel.py +87 -0
  12. stoneforge-0.2.2/stoneforge/_vendor/dlispy/VisibleRecord.py +80 -0
  13. stoneforge-0.2.2/stoneforge/_vendor/dlispy/__init__.py +11 -0
  14. stoneforge-0.2.2/stoneforge/_vendor/dlispy/common.py +139 -0
  15. stoneforge-0.2.2/stoneforge/_vendor/dlispy/core.py +177 -0
  16. stoneforge-0.2.2/stoneforge/_vendor/dlispy/tests/test_basic.py +546 -0
  17. stoneforge-0.2.2/stoneforge/data_management/__init__.py +4 -0
  18. stoneforge-0.2.2/stoneforge/data_management/_resampling.py +138 -0
  19. stoneforge-0.2.2/stoneforge/data_management/preprocessing.py +247 -0
  20. stoneforge-0.2.2/stoneforge/inversion/__init__.py +6 -0
  21. stoneforge-0.2.2/stoneforge/inversion/mineralogical/__init__.py +1 -0
  22. stoneforge-0.2.2/stoneforge/inversion/mineralogical/multimineral.py +128 -0
  23. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/inversion/viability_study/bayes.py +13 -0
  24. stoneforge-0.2.2/stoneforge/io/__init__.py +7 -0
  25. stoneforge-0.2.2/stoneforge/io/dlist.py +260 -0
  26. stoneforge-0.2.2/stoneforge/io/tabr.py +79 -0
  27. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/__init__.py +3 -0
  28. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/__init__.py +4 -1
  29. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/porosity.py +34 -0
  30. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/water_saturation.py +1 -1
  31. stoneforge-0.2.2/stoneforge/pseudo_wells/__init__.py +8 -0
  32. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/pseudo_wells/lithology_generator.py +1 -1
  33. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/pseudo_wells/monte_carlo_simulations.py +2 -2
  34. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/pseudo_wells/pseudo_tools.py +12 -0
  35. stoneforge-0.2.2/stoneforge/pseudo_wells/referenced.py +213 -0
  36. stoneforge-0.2.2/stoneforge/reservoir/__init__.py +6 -0
  37. stoneforge-0.2.2/stoneforge/reservoir/toc_v.py +184 -0
  38. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/__init__.py +5 -1
  39. stoneforge-0.2.2/stoneforge/vis/__init__.py +5 -0
  40. stoneforge-0.2.2/stoneforge/vis/img.py +139 -0
  41. stoneforge-0.2.2/stoneforge/vis/plot_welllog.py +803 -0
  42. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/__init__.py +2 -0
  43. {stoneforge-0.2.1 → stoneforge-0.2.2/stoneforge.egg-info}/PKG-INFO +17 -15
  44. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/SOURCES.txt +42 -25
  45. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/requires.txt +6 -5
  46. stoneforge-0.2.2/tests/tests_data_management/test_preprocessing.py +48 -0
  47. stoneforge-0.2.2/tests/tests_data_management/test_resampling.py +94 -0
  48. stoneforge-0.2.2/tests/tests_inversion/test_regularized_acoustic_reflectivity_inversion.py +423 -0
  49. stoneforge-0.2.2/tests/tests_io/test_csv.py +7 -0
  50. stoneforge-0.2.2/tests/tests_io/test_dlis.py +11 -0
  51. stoneforge-0.2.2/tests/tests_io/test_las2.py +9 -0
  52. stoneforge-0.2.2/tests/tests_io/test_las3.py +8 -0
  53. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_net_pay/test_net_pay_analytical.py +1 -1
  54. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_net_pay/test_net_pay_hypothetical.py +1 -1
  55. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_net_pay/test_net_pay_numerical.py +1 -1
  56. stoneforge-0.2.2/tests/tests_porosity/test_porosity_extra.py +64 -0
  57. stoneforge-0.2.2/tests/tests_rock_physics/test_elastic_constants.py +73 -0
  58. stoneforge-0.2.2/tests/tests_rock_physics/test_gem.py +220 -0
  59. stoneforge-0.2.2/tests/tests_rock_physics/test_inclusion.py +58 -0
  60. stoneforge-0.2.2/tests/tests_rock_physics/test_rock_physics_bounds.py +27 -0
  61. stoneforge-0.2.2/tests/tests_synthetic/test_lithology_generator.py +54 -0
  62. stoneforge-0.2.2/tests/tests_synthetic/test_monte_carlo_simulations.py +196 -0
  63. stoneforge-0.2.2/tests/tests_synthetic/test_pseudo_tools.py +119 -0
  64. stoneforge-0.2.2/tests/tests_synthetic/test_referenced.py +88 -0
  65. stoneforge-0.2.2/tests/tests_total_organic_carbon/test_toc_j.py +33 -0
  66. stoneforge-0.2.2/tests/tests_total_organic_carbon/test_toc_v.py +36 -0
  67. stoneforge-0.2.2/tests/tests_viability/test_bayes.py +58 -0
  68. stoneforge-0.2.2/tests/tests_vis/test_img.py +63 -0
  69. stoneforge-0.2.2/tests/tests_vis/test_plot_welllog.py +133 -0
  70. stoneforge-0.2.2/tests/tests_water_saturation/test_water_saturation_facade.py +75 -0
  71. stoneforge-0.2.2/tests/tests_wavelets/test_wavelets.py +130 -0
  72. stoneforge-0.2.1/CHANGELOG.txt +0 -6
  73. stoneforge-0.2.1/docs/_build/html/_sources/index.rst.txt +0 -42
  74. stoneforge-0.2.1/docs/_build/html/_sources/modules/machinelearning/classification.rst.txt +0 -39
  75. stoneforge-0.2.1/docs/_build/html/_sources/modules/machinelearning/index.rst.txt +0 -10
  76. stoneforge-0.2.1/docs/_build/html/_sources/modules/machinelearning/regression.rst.txt +0 -39
  77. stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/index.rst.txt +0 -60
  78. stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/permeability.rst.txt +0 -32
  79. stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/porosity.rst.txt +0 -36
  80. stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/shale_volume.rst.txt +0 -38
  81. stoneforge-0.2.1/docs/_build/html/_sources/modules/petrophysics/water_saturation.rst.txt +0 -32
  82. stoneforge-0.2.1/docs/_build/html/_sources/modules/pseudowells.rst.txt +0 -23
  83. stoneforge-0.2.1/docs/_build/html/_sources/modules/reservoir/index.rst.txt +0 -15
  84. stoneforge-0.2.1/docs/_build/html/_sources/modules/reservoir/net_pay.rst.txt +0 -18
  85. stoneforge-0.2.1/docs/_build/html/_sources/modules/rockphysics.rst.txt +0 -47
  86. stoneforge-0.2.1/docs/_build/html/_sources/usage/installation.rst.txt +0 -40
  87. stoneforge-0.2.1/docs/_build/html/_sources/usage/quickstart.rst.txt +0 -30
  88. stoneforge-0.2.1/stoneforge/data_management/__init__.py +0 -1
  89. stoneforge-0.2.1/stoneforge/data_management/preprocessing.py +0 -141
  90. stoneforge-0.2.1/stoneforge/inversion/__init__.py +0 -2
  91. stoneforge-0.2.1/stoneforge/io/__init__.py +0 -5
  92. stoneforge-0.2.1/stoneforge/io/csv.py +0 -134
  93. stoneforge-0.2.1/stoneforge/io/dlisio_r.py +0 -443
  94. stoneforge-0.2.1/stoneforge/io/tabr.py +0 -104
  95. stoneforge-0.2.1/stoneforge/preprocessing/__init__.py +0 -8
  96. stoneforge-0.2.1/stoneforge/preprocessing/data_management.py +0 -348
  97. stoneforge-0.2.1/stoneforge/preprocessing/data_processing.py +0 -180
  98. stoneforge-0.2.1/stoneforge/preprocessing/las2.py +0 -370
  99. stoneforge-0.2.1/stoneforge/preprocessing/las_pandas.py +0 -24
  100. stoneforge-0.2.1/stoneforge/pseudo_wells/__init__.py +0 -3
  101. stoneforge-0.2.1/stoneforge/reservoir/__init__.py +0 -1
  102. stoneforge-0.2.1/stoneforge/vis/__init__.py +0 -2
  103. stoneforge-0.2.1/stoneforge/vis/img.py +0 -40
  104. stoneforge-0.2.1/tests/tests_load/test_load.py +0 -13
  105. stoneforge-0.2.1/tests/tests_rock_physics/test_gem.py +0 -48
  106. {stoneforge-0.2.1 → stoneforge-0.2.2}/LICENSE +0 -0
  107. {stoneforge-0.2.1 → stoneforge-0.2.2}/MANIFEST.in +0 -0
  108. {stoneforge-0.2.1 → stoneforge-0.2.2}/docs/conf.py +0 -0
  109. {stoneforge-0.2.1 → stoneforge-0.2.2}/setup.cfg +0 -0
  110. /stoneforge-0.2.1/tests/tests_rock_physics/test_elastic_constants.py → /stoneforge-0.2.2/stoneforge/_vendor/dlispy/tests/__init__.py +0 -0
  111. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/inversion/regularized_acoustic_reflectivy_inversion.py +0 -0
  112. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/inversion/viability_study/__init__.py +0 -0
  113. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/io/las2.py +0 -0
  114. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/io/las3.py +0 -0
  115. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/__init__.py +0 -0
  116. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/evaluation.py +0 -0
  117. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/fit.py +0 -0
  118. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/predict.py +0 -0
  119. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/settings.py +0 -0
  120. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/classification/validation.py +0 -0
  121. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/__init__.py +0 -0
  122. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/evaluation.py +0 -0
  123. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/fit.py +0 -0
  124. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/predict.py +0 -0
  125. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/settings.py +0 -0
  126. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_classification/validation.py +0 -0
  127. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/__init__.py +0 -0
  128. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/evaluation.py +0 -0
  129. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/fit.py +0 -0
  130. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/predict.py +0 -0
  131. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/settings.py +0 -0
  132. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/mlp_regression/validation.py +0 -0
  133. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/__init__.py +0 -0
  134. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/evaluation.py +0 -0
  135. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/fit.py +0 -0
  136. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/mldr_project.py +0 -0
  137. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/predict.py +0 -0
  138. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/machine_learning/regression/settings.py +0 -0
  139. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/helpers.py +0 -0
  140. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/permeability.py +0 -0
  141. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/petrophysics/shale_volume.py +0 -0
  142. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/reservoir/net_pay.py +0 -0
  143. {stoneforge-0.2.1/stoneforge/petrophysics → stoneforge-0.2.2/stoneforge/reservoir}/total_organic_carbon_content.py +0 -0
  144. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/elastic_constants.py +0 -0
  145. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/fluid_substitution.py +0 -0
  146. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/gem.py +0 -0
  147. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/inclusion.py +0 -0
  148. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/rock_physics/rock_physics_bounds.py +0 -0
  149. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/butterworth.py +0 -0
  150. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/ormsby.py +0 -0
  151. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge/wavelets/ricker.py +0 -0
  152. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/dependency_links.txt +0 -0
  153. {stoneforge-0.2.1 → stoneforge-0.2.2}/stoneforge.egg-info/top_level.txt +0 -0
  154. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_permeability/test_permeability_analytical.py +0 -0
  155. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_permeability/test_permeability_hypothetical.py +0 -0
  156. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_permeability/test_permeability_numerical.py +0 -0
  157. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_porosity/test_porosity_analytical.py +0 -0
  158. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_porosity/test_porosity_hypothetical.py +0 -0
  159. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_porosity/test_porosity_numerical.py +0 -0
  160. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_rock_physics/test_fluid_substitution.py +0 -0
  161. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_shale_volume/test_shale_volume_analytical.py +0 -0
  162. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_shale_volume/test_shale_volume_hypothetical.py +0 -0
  163. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_shale_volume/test_shale_volume_numerical.py +0 -0
  164. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_water_saturation/test_water_saturation_analytical.py +0 -0
  165. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_water_saturation/test_water_saturation_hypothetical.py +0 -0
  166. {stoneforge-0.2.1 → stoneforge-0.2.2}/tests/tests_water_saturation/test_water_saturation_numerical.py +0 -0
@@ -0,0 +1,6 @@
1
+ Change Log
2
+ ==========
3
+
4
+ 0.2.2 (22/09/2026)
5
+ ------------------
6
+ - Major Update Corrections
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stoneforge
3
- Version: 0.2.1
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: dlisio>=1.0.4
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: scipy>=1.14.1
21
+ Requires-Dist: requests>=2.34.2
19
22
  Requires-Dist: scikit-learn>=1.6.1
20
- Requires-Dist: matplotlib>=3.10.0
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
- The Stoneforge library is linked to the GIECAR laboratory at the Universidade Federal Fluminense (UFF) related to the Geology and Geophysics Departmnet <a href="http://geologiaegeofisica.sites.uff.br/"> (GGO)</a>, and its purpose is to teach and develop routines in Python to solve geological and geophysical problems.
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 data:
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
- Four .las data from wildcat wells in the National Petroleum Reserve in Alaska. Those where drilled in the National Petroleum Reserve in Alaska (NPRA). </br>
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
- Two .dlis data from the Mississippi Fan (Gulf of Mexico) from the DSDP (Deep Sea Drilling Project); DSDP Leg 96 - Hole 616; Processed and Original data. </br>
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
- The Stoneforge library is linked to the GIECAR laboratory at the Universidade Federal Fluminense (UFF) related to the Geology and Geophysics Departmnet <a href="http://geologiaegeofisica.sites.uff.br/"> (GGO)</a>, and its purpose is to teach and develop routines in Python to solve geological and geophysical problems.
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 data:
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
- Four .las data from wildcat wells in the National Petroleum Reserve in Alaska. Those where drilled in the National Petroleum Reserve in Alaska (NPRA). </br>
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
- Two .dlis data from the Mississippi Fan (Gulf of Mexico) from the DSDP (Deep Sea Drilling Project); DSDP Leg 96 - Hole 616; Processed and Original data. </br>
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.1"
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
- "dlisio>=1.0.4",
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
- "scipy>=1.14.1",
27
+ "requests>=2.34.2",
25
28
  "scikit-learn>=1.6.1",
26
- "matplotlib>=3.10.0",
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 = "stoneforge"
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=30",
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 preprocessing # noqa: F401
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)