rock-physics-open 0.3.0__py3-none-any.whl → 0.3.1__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.

Potentially problematic release.


This version of rock-physics-open might be problematic. Click here for more details.

Files changed (35) hide show
  1. rock_physics_open/equinor_utilities/machine_learning_utilities/__init__.py +0 -12
  2. rock_physics_open/equinor_utilities/machine_learning_utilities/import_ml_models.py +0 -16
  3. rock_physics_open/equinor_utilities/machine_learning_utilities/run_regression.py +6 -4
  4. rock_physics_open/equinor_utilities/std_functions/backus_ave.py +16 -1
  5. rock_physics_open/equinor_utilities/std_functions/dvorkin_nur.py +10 -2
  6. rock_physics_open/equinor_utilities/std_functions/gassmann.py +32 -7
  7. rock_physics_open/equinor_utilities/std_functions/hashin_shtrikman.py +36 -7
  8. rock_physics_open/equinor_utilities/std_functions/hertz_mindlin.py +9 -1
  9. rock_physics_open/equinor_utilities/std_functions/moduli_velocity.py +22 -6
  10. rock_physics_open/equinor_utilities/std_functions/reflection_eq.py +28 -6
  11. rock_physics_open/equinor_utilities/std_functions/rho.py +12 -2
  12. rock_physics_open/equinor_utilities/std_functions/voigt_reuss_hill.py +25 -4
  13. rock_physics_open/equinor_utilities/std_functions/walton.py +8 -1
  14. rock_physics_open/equinor_utilities/std_functions/wood_brie.py +20 -3
  15. rock_physics_open/equinor_utilities/various_utilities/display_result_statistics.py +16 -9
  16. rock_physics_open/equinor_utilities/various_utilities/gassmann_dry_mod.py +21 -2
  17. rock_physics_open/equinor_utilities/various_utilities/gassmann_mod.py +21 -2
  18. rock_physics_open/equinor_utilities/various_utilities/gassmann_sub_mod.py +23 -12
  19. rock_physics_open/equinor_utilities/various_utilities/hs_average.py +20 -1
  20. rock_physics_open/equinor_utilities/various_utilities/pressure.py +9 -1
  21. rock_physics_open/equinor_utilities/various_utilities/reflectivity.py +26 -10
  22. rock_physics_open/equinor_utilities/various_utilities/timeshift.py +15 -2
  23. rock_physics_open/equinor_utilities/various_utilities/vp_vs_rho_set_statistics.py +40 -24
  24. rock_physics_open/equinor_utilities/various_utilities/vrh_3_min.py +24 -2
  25. rock_physics_open/sandstone_models/friable_models.py +6 -7
  26. rock_physics_open/sandstone_models/patchy_cement_model.py +15 -0
  27. rock_physics_open/ternary_plots/ternary_plot_utilities.py +3 -3
  28. rock_physics_open/version.py +2 -2
  29. {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/METADATA +2 -2
  30. {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/RECORD +33 -35
  31. rock_physics_open/equinor_utilities/machine_learning_utilities/friable_pressure_models.py +0 -230
  32. rock_physics_open/equinor_utilities/machine_learning_utilities/patchy_cement_pressure_models.py +0 -280
  33. {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/WHEEL +0 -0
  34. {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/licenses/LICENSE +0 -0
  35. {rock_physics_open-0.3.0.dist-info → rock_physics_open-0.3.1.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,26 @@
1
+ import numpy as np
2
+ import numpy.typing as npt
3
+
1
4
  from rock_physics_open.equinor_utilities import std_functions
2
5
 
3
6
 
4
- def gassmann_model(k_min, k_fl, rho_fl, k_dry, mu, rho_dry, por):
7
+ def gassmann_model(
8
+ k_min: npt.NDArray[np.float64],
9
+ k_fl: npt.NDArray[np.float64],
10
+ rho_fl: npt.NDArray[np.float64],
11
+ k_dry: npt.NDArray[np.float64],
12
+ mu: npt.NDArray[np.float64],
13
+ rho_dry: npt.NDArray[np.float64],
14
+ por: npt.NDArray[np.float64],
15
+ ) -> tuple[
16
+ npt.NDArray[np.float64],
17
+ npt.NDArray[np.float64],
18
+ npt.NDArray[np.float64],
19
+ npt.NDArray[np.float64],
20
+ npt.NDArray[np.float64],
21
+ npt.NDArray[np.float64],
22
+ npt.NDArray[np.float64],
23
+ ]:
5
24
  """
6
25
  Gassmann model to go from dry rock to saturated state.
7
26
 
@@ -25,7 +44,7 @@ def gassmann_model(k_min, k_fl, rho_fl, k_dry, mu, rho_dry, por):
25
44
  Returns
26
45
  -------
27
46
  tuple
28
- vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu : (np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray).
47
+ vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu : np.ndarray
29
48
  vp_sat, vs_sat: saturated velocities [m/s], rho_sat: saturated density [kg/m^3], ai_sat: saturated acoustic
30
49
  impedance [kg/m^3 x m/s], vpvs_sat: saturated velocity ratio [unitless], k_sat, mu: saturated bulk modulus and
31
50
  shear modulus (the latter unchanged from dry state) [Pa].
@@ -1,17 +1,28 @@
1
+ import numpy as np
2
+ import numpy.typing as npt
3
+
1
4
  from rock_physics_open.equinor_utilities import std_functions
2
5
 
3
6
 
4
7
  def gassmann_sub_model(
5
- k_min,
6
- k_fl_orig,
7
- rho_fl_orig,
8
- k_fl_sub,
9
- rho_fl_sub,
10
- k_sat_orig,
11
- mu,
12
- rho_sat_orig,
13
- por,
14
- ):
8
+ k_min: npt.NDArray[np.float64],
9
+ k_fl_orig: npt.NDArray[np.float64],
10
+ rho_fl_orig: npt.NDArray[np.float64],
11
+ k_fl_sub: npt.NDArray[np.float64],
12
+ rho_fl_sub: npt.NDArray[np.float64],
13
+ k_sat_orig: npt.NDArray[np.float64],
14
+ mu: npt.NDArray[np.float64],
15
+ rho_sat_orig: npt.NDArray[np.float64],
16
+ por: npt.NDArray[np.float64],
17
+ ) -> tuple[
18
+ npt.NDArray[np.float64],
19
+ npt.NDArray[np.float64],
20
+ npt.NDArray[np.float64],
21
+ npt.NDArray[np.float64],
22
+ npt.NDArray[np.float64],
23
+ npt.NDArray[np.float64],
24
+ npt.NDArray[np.float64],
25
+ ]:
15
26
  """
16
27
  Gassmann model to go from one saturated state to another.
17
28
 
@@ -24,7 +35,7 @@ def gassmann_sub_model(
24
35
  rho_fl_orig : np.ndarray
25
36
  Original fluid density [lg/m^3].
26
37
  k_fl_sub : np.ndarray
27
- Sunstituted fluid bulk modulus [Pa].
38
+ Substituted fluid bulk modulus [Pa].
28
39
  rho_fl_sub : np.ndarray
29
40
  Substituted fluid density [lg/m^3].
30
41
  k_sat_orig : np.ndarray
@@ -39,7 +50,7 @@ def gassmann_sub_model(
39
50
  Returns
40
51
  -------
41
52
  tuple
42
- vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu : (np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray, np.ndarray).
53
+ vp_sat, vs_sat, rho_sat, ai_sat, vpvs_sat, k_sat, mu : np.ndarray
43
54
  vp_sat, vs_sat: saturated velocities [m/s], rho_sat: saturated density [kg/m^3], ai_sat: saturated acoustic
44
55
  impedance [kg/m^3 x m/s], vpvs_sat: saturated velocity ratio [unitless], k_sat, mu: saturated bulk modulus and
45
56
  shear modulus (the latter unchanged from dry state) [Pa].
@@ -1,7 +1,26 @@
1
+ import numpy as np
2
+ import numpy.typing as npt
3
+
1
4
  from rock_physics_open.equinor_utilities import std_functions
2
5
 
3
6
 
4
- def hs_average(k1, mu1, rhob1, k2, mu2, rhob2, f):
7
+ def hs_average(
8
+ k1: npt.NDArray[np.float64],
9
+ mu1: npt.NDArray[np.float64],
10
+ rhob1: npt.NDArray[np.float64],
11
+ k2: npt.NDArray[np.float64],
12
+ mu2: npt.NDArray[np.float64],
13
+ rhob2: npt.NDArray[np.float64],
14
+ f: npt.NDArray[np.float64],
15
+ ) -> tuple[
16
+ npt.NDArray[np.float64],
17
+ npt.NDArray[np.float64],
18
+ npt.NDArray[np.float64],
19
+ npt.NDArray[np.float64],
20
+ npt.NDArray[np.float64],
21
+ npt.NDArray[np.float64],
22
+ npt.NDArray[np.float64],
23
+ ]:
5
24
  """
6
25
  BMix of two phases by Hashin-Shtrikman model. Derived properties are also returned.
7
26
 
@@ -1,7 +1,15 @@
1
1
  import numpy as np
2
+ import numpy.typing as npt
2
3
 
3
4
 
4
- def pressure(rho, tvd_msl, water_depth, p_form, tvd_p_form, n):
5
+ def pressure(
6
+ rho: npt.NDArray[np.float64],
7
+ tvd_msl: npt.NDArray[np.float64],
8
+ water_depth: float,
9
+ p_form: float,
10
+ tvd_p_form: float,
11
+ n: float,
12
+ ) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]]:
5
13
  """
6
14
  Function to estimate overburden pressure and vertical effective stress (lithostatic pressure)
7
15
  based on density.
@@ -1,9 +1,19 @@
1
+ from typing import Literal, cast
2
+
1
3
  import numpy as np
4
+ import numpy.typing as npt
2
5
 
3
6
  from rock_physics_open.equinor_utilities import gen_utilities, std_functions
4
7
 
5
8
 
6
- def reflectivity(vp_inp, vs_inp, rho_inp, theta=0.0, k=2.0, model="AkiRichards"):
9
+ def reflectivity(
10
+ vp_inp: npt.NDArray[np.float64],
11
+ vs_inp: npt.NDArray[np.float64],
12
+ rho_inp: npt.NDArray[np.float64],
13
+ theta: float = 0.0,
14
+ k: float = 2.0,
15
+ model: Literal["AkiRichards", "SmithGidlow"] = "AkiRichards",
16
+ ) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.bool_]]:
7
17
  """
8
18
  Reflectivity model according to Aki and Richards or Smith and Gidlow for weak contrasts
9
19
  and angles less than critical angle.
@@ -35,12 +45,17 @@ def reflectivity(vp_inp, vs_inp, rho_inp, theta=0.0, k=2.0, model="AkiRichards")
35
45
  idx_inp: index to accepted part of the input arrays [bool].
36
46
  """
37
47
 
38
- vp, vs, rho, theta, k = gen_utilities.dim_check_vector(
39
- (vp_inp, vs_inp, rho_inp, theta, k)
48
+ vp, vs, rho, theta_, k_ = cast(
49
+ list[npt.NDArray[np.float64]],
50
+ gen_utilities.dim_check_vector((vp_inp, vs_inp, rho_inp, theta, k)),
40
51
  )
41
52
 
42
- idx_inp, (vp, vs, rho, theta, k) = gen_utilities.filter_input_log(
43
- [vp, vs, rho, theta, k], positive=True
53
+ idx_inp, (vp, vs, rho, theta_, k_) = cast(
54
+ tuple[npt.NDArray[np.bool_], list[npt.NDArray[np.float64]]],
55
+ gen_utilities.filter_input_log(
56
+ [vp, vs, rho, theta_, k_],
57
+ positive=True,
58
+ ),
44
59
  )
45
60
 
46
61
  if np.any(~idx_inp):
@@ -69,16 +84,17 @@ def reflectivity(vp_inp, vs_inp, rho_inp, theta=0.0, k=2.0, model="AkiRichards")
69
84
  > 1
70
85
  ) * "s"
71
86
  raise ValueError(
72
- "{0:} reflectivity: Missing or illegal values in input log{1:}: {2:}interpolation of input log{1:} "
73
- "is needed\n".format(model, log_str, pl_str)
87
+ "{0:} reflectivity: Missing or illegal values in input log{1:}: {2:}interpolation of input log{1:} is needed\n".format(
88
+ model, log_str, pl_str
89
+ )
74
90
  )
75
91
 
76
92
  if model == "AkiRichards":
77
- refl_coef = std_functions.aki_richards(vp, vs, rho, theta, k)
93
+ refl_coef = std_functions.aki_richards(vp, vs, rho, theta_, k_)
78
94
  elif model == "SmithGidlow":
79
- refl_coef = std_functions.smith_gidlow(vp, vs, rho, theta, k)
95
+ refl_coef = std_functions.smith_gidlow(vp, vs, rho, theta_, k_)
80
96
  else:
81
- raise ValueError(
97
+ raise ValueError( # pyright: ignore[reportUnreachable] | Kept for backward compatibility
82
98
  f'{__file__}: unknown model: {model}, should be one of "AkiRichards", "SmithGidlow"'
83
99
  )
84
100
 
@@ -1,7 +1,13 @@
1
1
  import numpy as np
2
+ import numpy.typing as npt
2
3
 
3
4
 
4
- def time_shift_pp(tvd, vp_base, vp_mon, multiplier):
5
+ def time_shift_pp(
6
+ tvd: npt.NDArray[np.float64],
7
+ vp_base: npt.NDArray[np.float64],
8
+ vp_mon: npt.NDArray[np.float64],
9
+ multiplier: int,
10
+ ) -> tuple[npt.NDArray[np.float64], npt.NDArray[np.float64]]:
5
11
  """
6
12
  Cumulative time shift calculation for 4D case. According to Equinor standard
7
13
  the time shift is negative for an increase in velocity from base to monitor
@@ -43,7 +49,14 @@ def time_shift_pp(tvd, vp_base, vp_mon, multiplier):
43
49
  return owt_pp_shift, twt_pp_shift
44
50
 
45
51
 
46
- def time_shift_ps(tvd, vp_base, vp_mon, vs_base, vs_mon, multiplier):
52
+ def time_shift_ps(
53
+ tvd: npt.NDArray[np.float64],
54
+ vp_base: npt.NDArray[np.float64],
55
+ vp_mon: npt.NDArray[np.float64],
56
+ vs_base: npt.NDArray[np.float64],
57
+ vs_mon: npt.NDArray[np.float64],
58
+ multiplier: int,
59
+ ) -> npt.NDArray[np.float64]:
47
60
  """
48
61
  Cumulative time shift calculation for 4D case. According to Equinor standard
49
62
  the time shift is negative for an increase in velocity from base to monitor
@@ -1,6 +1,8 @@
1
1
  import os
2
+ from typing import Literal, cast
2
3
 
3
4
  import numpy as np
5
+ import numpy.typing as npt
4
6
  import pandas as pd
5
7
  from sklearn.metrics import r2_score
6
8
 
@@ -8,18 +10,18 @@ from .display_result_statistics import disp_result_stats
8
10
 
9
11
 
10
12
  def vp_vs_rho_stats(
11
- vp_observed,
12
- vs_observed,
13
- rho_observed,
14
- vp_estimated,
15
- vs_estimated,
16
- rho_estimated,
17
- fname,
18
- estimated_set_names,
19
- well_names,
20
- file_mode="a",
21
- disp_results=True,
22
- ):
13
+ vp_observed: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
14
+ vs_observed: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
15
+ rho_observed: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
16
+ vp_estimated: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
17
+ vs_estimated: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
18
+ rho_estimated: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
19
+ fname: str,
20
+ estimated_set_names: str | list[str],
21
+ well_names: str | list[str],
22
+ file_mode: Literal["a", "w"] = "a",
23
+ disp_results: bool = True,
24
+ ) -> None:
23
25
  """
24
26
  Utility to estimate statistics between vp-vs-rho sets - observed and estimated values. The results are displayed
25
27
  on screen (optional) and saved to a .csv file. If the file exists, the results will be appended.
@@ -83,33 +85,42 @@ def vp_vs_rho_stats(
83
85
  ]
84
86
  est_frame = pd.DataFrame(columns=est_frame_columns, index=estimated_set_names)
85
87
  est_frame.index.name = "Estimated set name"
86
- est_frame.iloc[:, 0] = well_names
88
+ est_frame.iloc[:, 0] = well_names # pyright: ignore[reportArgumentType]
87
89
 
88
90
  # If inputs are found to satisfy expectations in _verify, and they are numpy arrays, cast to lists, and run through
89
91
  if isinstance(vp_observed, np.ndarray):
90
92
  vp_observed = [vp_observed]
93
+ if isinstance(vs_observed, np.ndarray):
91
94
  vs_observed = [vs_observed]
95
+ if isinstance(rho_observed, np.ndarray):
92
96
  rho_observed = [rho_observed]
97
+ if isinstance(vp_estimated, np.ndarray):
93
98
  vp_estimated = [vp_estimated]
99
+ if isinstance(vs_estimated, np.ndarray):
94
100
  vs_estimated = [vs_estimated]
101
+ if isinstance(rho_estimated, np.ndarray):
95
102
  rho_estimated = [rho_estimated]
96
103
 
97
104
  for i in range(len(vp_observed)):
98
- res = []
105
+ res: list[float] = []
99
106
  for obs, est in zip(
100
107
  [vp_observed[i], vs_observed[i], rho_observed[i]],
101
108
  [vp_estimated[i], vs_estimated[i], rho_estimated[i]],
102
109
  ):
103
- res.append(np.mean(np.abs((est.flatten() - obs.flatten()) / obs.flatten())))
104
- res.append(
105
- np.sqrt(
106
- np.mean(np.square((est.flatten() - obs.flatten()) / obs.flatten()))
107
- )
110
+ rmae = float(
111
+ np.mean(np.abs((est.flatten() - obs.flatten()) / obs.flatten()))
112
+ )
113
+ rrmse: float = np.sqrt(
114
+ np.mean(np.square((est.flatten() - obs.flatten()) / obs.flatten()))
108
115
  )
109
- res.append(r2_score(obs.flatten(), est.flatten()))
116
+ r2 = cast(float, r2_score(obs.flatten(), est.flatten()))
117
+
118
+ res.append(rmae)
119
+ res.append(rrmse)
120
+ res.append(r2)
110
121
 
111
122
  res_dict = dict(zip(est_frame_columns[1:], res))
112
- est_frame.iloc[i, 1:] = res_dict
123
+ est_frame.iloc[i, 1:] = res_dict # pyright: ignore[reportArgumentType]
113
124
  if disp_results:
114
125
  disp_result_stats(
115
126
  estimated_set_names[i], res, est_frame_columns[1:], values_only=True
@@ -122,7 +133,12 @@ def vp_vs_rho_stats(
122
133
  est_frame.to_csv(fname, mode=file_mode)
123
134
 
124
135
 
125
- def _verify(*args, set_names=None, well_names=None, file_mode=None):
136
+ def _verify(
137
+ *args: npt.NDArray[np.float64] | list[npt.NDArray[np.float64]],
138
+ set_names: list[str],
139
+ well_names: list[str],
140
+ file_mode: Literal["a", "w"],
141
+ ):
126
142
  """Verify that arguments are either numpy arrays or lists of numpy arrays.
127
143
  Raises
128
144
  ------
@@ -142,7 +158,7 @@ def _verify(*args, set_names=None, well_names=None, file_mode=None):
142
158
  if isinstance(arg, np.ndarray):
143
159
  arg = [arg]
144
160
  for this_arg in arg:
145
- if not isinstance(this_arg, np.ndarray):
161
+ if not isinstance(this_arg, np.ndarray): # pyright: ignore[reportUnnecessaryIsInstance] | For backward compatibility
146
162
  raise ValueError(f"{__file__}: input not numpy array: {type(arg)}")
147
163
  if np.any(np.isnan(this_arg)):
148
164
  raise ValueError(f"{__file__}: input contains NaNs")
@@ -151,4 +167,4 @@ def _verify(*args, set_names=None, well_names=None, file_mode=None):
151
167
  if not len(arg) == len(set_names) == len(well_names):
152
168
  raise ValueError(f"{__file__}: mismatch in argument lengths")
153
169
  if not (file_mode == "a" or file_mode == "w"):
154
- raise ValueError(f'{__file__}: file_mode must be one of ["a", "w"]')
170
+ raise ValueError(f'{__file__}: file_mode must be one of ["a", "w"]') # pyright: ignore[reportUnreachable] | For backward compatibility
@@ -1,9 +1,31 @@
1
+ import numpy as np
2
+ import numpy.typing as npt
3
+
1
4
  from rock_physics_open.equinor_utilities import std_functions
2
5
 
3
6
 
4
7
  def min_3_voigt_reuss_hill(
5
- vp1, vs1, rhob1, f1, vp2, vs2, rhob2, f2, vp3, vs3, rhob3, f3
6
- ):
8
+ vp1: npt.NDArray[np.float64],
9
+ vs1: npt.NDArray[np.float64],
10
+ rhob1: npt.NDArray[np.float64],
11
+ f1: npt.NDArray[np.float64],
12
+ vp2: npt.NDArray[np.float64],
13
+ vs2: npt.NDArray[np.float64],
14
+ rhob2: npt.NDArray[np.float64],
15
+ f2: npt.NDArray[np.float64],
16
+ vp3: npt.NDArray[np.float64],
17
+ vs3: npt.NDArray[np.float64],
18
+ rhob3: npt.NDArray[np.float64],
19
+ f3: npt.NDArray[np.float64],
20
+ ) -> tuple[
21
+ npt.NDArray[np.float64],
22
+ npt.NDArray[np.float64],
23
+ npt.NDArray[np.float64],
24
+ npt.NDArray[np.float64],
25
+ npt.NDArray[np.float64],
26
+ npt.NDArray[np.float64],
27
+ npt.NDArray[np.float64],
28
+ ]:
7
29
  """
8
30
  Mix of three phases by Voigt-Reuss-Hill model. The fractions should add up to 1 with input of vp, vs and rho.
9
31
 
@@ -124,7 +124,7 @@ def friable_model_dry(k_min, mu_min, phi, p_eff, phi_c, coord_num_func, n, shear
124
124
  Critical porosity [fraction].
125
125
  coord_num_func : str
126
126
  Indication if coordination number should be calculated from porosity or kept constant.
127
- n : float
127
+ n : float | None
128
128
  Coordination number [unitless].
129
129
  shear_red : float
130
130
  Shear reduction factor [fraction].
@@ -135,18 +135,17 @@ def friable_model_dry(k_min, mu_min, phi, p_eff, phi_c, coord_num_func, n, shear
135
135
  k, mu : (np.ndarray, np.ndarray).
136
136
  Bulk modulus k [Pa], shear modulus mu [Pa] of dry rock.
137
137
  """
138
- # Expand floats to arrays
139
- phi, phi_c, n, shear_red = gen_utilities.dim_check_vector(
140
- (phi, phi_c, n, shear_red)
138
+ # Expand floats to arrays, check for equal length
139
+ phi, phi_c, shear_red, k_min, mu_min, p_eff = gen_utilities.dim_check_vector(
140
+ (phi, phi_c, shear_red, k_min, mu_min, p_eff)
141
141
  )
142
-
143
142
  # Valid porosity values are less or equal to the critical porosity
144
143
  # Use filter_input_log to remove values that do not comply with this
145
144
  (
146
145
  idx_phi,
147
- (k_min, mu_min, phi, p_eff, phi_c, n, shear_red, _),
146
+ (phi, phi_c, shear_red, k_min, mu_min, p_eff, _),
148
147
  ) = gen_utilities.filter_input_log(
149
- (k_min, mu_min, phi, p_eff, phi_c, n, shear_red, phi_c - phi)
148
+ (phi, phi_c, shear_red, k_min, mu_min, p_eff, phi_c - phi)
150
149
  )
151
150
 
152
151
  # Dry rock properties of high-porosity end member calculated with
@@ -1,6 +1,11 @@
1
1
  import numpy as np
2
2
 
3
3
  from rock_physics_open.equinor_utilities import std_functions
4
+ from rock_physics_open.equinor_utilities.gen_utilities import (
5
+ dim_check_vector,
6
+ filter_input_log,
7
+ filter_output,
8
+ )
4
9
 
5
10
  from .constant_cement_models import constant_cement_model_dry
6
11
  from .friable_models import friable_model_dry
@@ -299,6 +304,14 @@ def patchy_cement_model_dry(
299
304
  mu : dry rock shear modulus [Pa],
300
305
  rho_dry : dry rock density [kg/m3].,
301
306
  """
307
+ # There are cases which suffer from a lack of consistency check at this stage,
308
+ # add dim_check_vector and filter input/output
309
+ phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff = dim_check_vector(
310
+ (phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff)
311
+ )
312
+ (idx, (phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff)) = (
313
+ filter_input_log((phi, k_min, mu_min, rho_min, k_cem, mu_cem, rho_cem, p_eff))
314
+ )
302
315
 
303
316
  k_zero, mu_zero = std_functions.hashin_shtrikman_walpole(
304
317
  k_cem, mu_cem, k_min, mu_min, FRAC_CEM_UP, bound="lower"
@@ -366,4 +379,6 @@ def patchy_cement_model_dry(
366
379
 
367
380
  rho_dry = (1 - phi - frac_cem) * rho_min + frac_cem * rho_cem
368
381
 
382
+ k_dry, mu, rho_dry = filter_output(idx, (k_dry, mu, rho_dry))
383
+
369
384
  return k_dry, mu, rho_dry
@@ -183,15 +183,15 @@ def _make_mesh(ax):
183
183
  # Tick mark text
184
184
  xy1 = _ternary_coord_trans(1 - i, i, np.zeros(len(i)))
185
185
  for j in range(len(i)):
186
- text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] - 0.025, "%.1f" % (i[j])))
186
+ text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] - 0.025, "%.1f" % (i[j, 0])))
187
187
  xy1 = _ternary_coord_trans(i, np.zeros(len(i)), 1 - i)
188
188
  for j in range(len(i)):
189
189
  text_handles.append(
190
- ax.text(xy1[j, 0] - 0.05, xy1[j, 1] + 0.025, "%.1f" % (i[j]))
190
+ ax.text(xy1[j, 0] - 0.05, xy1[j, 1] + 0.025, "%.1f" % (i[j, 0]))
191
191
  )
192
192
  xy1 = _ternary_coord_trans(np.zeros(len(i)), 1 - i, i)
193
193
  for j in range(len(i)):
194
- text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] + 0.025, "%.1f" % (i[j])))
194
+ text_handles.append(ax.text(xy1[j, 0], xy1[j, 1] + 0.025, "%.1f" % (i[j, 0])))
195
195
  plt.setp(text_handles, fontsize=10)
196
196
 
197
197
  return text_handles, line_handles
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.3.0'
32
- __version_tuple__ = version_tuple = (0, 3, 0)
31
+ __version__ = version = '0.3.1'
32
+ __version_tuple__ = version_tuple = (0, 3, 1)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rock_physics_open
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Equinor Rock Physics Module
5
5
  Author-email: Harald Flesche <hfle@equinor.com>, Eivind Jahren <ejah@equinor.com>, Jimmy Zurcher <jiz@equinor.com>
6
6
  Maintainer-email: Harald Flesche <hfle@equinor.com>, Eirik Ola Aksnes <eoaksnes@equinor.com>, Sivert Utne <sutn@equinor.com>, Einar Wigum Arbo <earb@equinor.com>
@@ -76,7 +76,7 @@ Alternatively, you can update the dependencies in your `pyproject.toml` file:
76
76
  <!-- x-release-please-start-version -->
77
77
  ```toml
78
78
  dependencies = [
79
- "rock-physics-open == 0.3.0",
79
+ "rock-physics-open == 0.3.1",
80
80
  ]
81
81
  ```
82
82
  <!-- x-release-please-end-version -->
@@ -1,5 +1,5 @@
1
1
  rock_physics_open/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- rock_physics_open/version.py,sha256=5zTqm8rgXsWYBpB2M3Zw_K1D-aV8wP7NsBLrmMKkrAQ,704
2
+ rock_physics_open/version.py,sha256=gGLpQUQx-ty9SEy9PYw9OgJWWzJLBnCpfJOfzL7SjlI,704
3
3
  rock_physics_open/equinor_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  rock_physics_open/equinor_utilities/anisotropy.py,sha256=toEsuIW_gHr34gZQpam3sQTl0ap6nAq1pW5hcX9GOHI,4469
5
5
  rock_physics_open/equinor_utilities/conversions.py,sha256=d6SGPbzYsmYBvhDqnohg1lPjAeYGOc0z_vdsuFeNlb4,194
@@ -16,15 +16,13 @@ rock_physics_open/equinor_utilities/gen_utilities/dict_to_float.py,sha256=-fiOsN
16
16
  rock_physics_open/equinor_utilities/gen_utilities/dim_check_vector.py,sha256=2ebRxWL4XFpnLsbi0j43KQff9ydRyR8hOB1KSqQY8JI,3964
17
17
  rock_physics_open/equinor_utilities/gen_utilities/filter_input.py,sha256=K-DUsS8nVOWick6CsnsWrUWnOtzPq5ofc_Z8kPBU_hs,5419
18
18
  rock_physics_open/equinor_utilities/gen_utilities/filter_output.py,sha256=iwoHuyzJtksEJKjuLwScd96Bov6SyifU-AqvosZ9VD0,3528
19
- rock_physics_open/equinor_utilities/machine_learning_utilities/__init__.py,sha256=5QwVh4dbH9sTaj33ok_7ZjGCxOjEKnU6IFMBKl4VZJQ,909
19
+ rock_physics_open/equinor_utilities/machine_learning_utilities/__init__.py,sha256=tXpPTpkviwEbok3Ff8R7m4Og8d97fjdsZaaM599jjEA,469
20
20
  rock_physics_open/equinor_utilities/machine_learning_utilities/base_pressure_model.py,sha256=UHBdYODHbXey4IwAhCbedcb5SwGCLkVJK98zKIOaIfY,4722
21
21
  rock_physics_open/equinor_utilities/machine_learning_utilities/dummy_vars.py,sha256=y2hWACUX9sk-kRH7FNTaO2-9ZNDHR-HvZzSpIz9ILxM,1479
22
22
  rock_physics_open/equinor_utilities/machine_learning_utilities/exponential_model.py,sha256=ZWtA8aNKVDkf8vAyH8IzJx1l8feipxQOGhITo5Ytv0g,3738
23
- rock_physics_open/equinor_utilities/machine_learning_utilities/friable_pressure_models.py,sha256=cetCzp8QzJZmfp0Mxga0-VNid9y2jObO5q9HxgK7hiE,7017
24
- rock_physics_open/equinor_utilities/machine_learning_utilities/import_ml_models.py,sha256=BFGnvnOfLHlBEnEy2BxbLteb4kUnURCNm2OS2m7ejUY,3195
25
- rock_physics_open/equinor_utilities/machine_learning_utilities/patchy_cement_pressure_models.py,sha256=7F60cS_TrffiMozrVdNkhl2lKcyeSQgQoFsGCDXokEc,8361
23
+ rock_physics_open/equinor_utilities/machine_learning_utilities/import_ml_models.py,sha256=a8KJTfeUCNz0zuDKwS4M5ZFIiWdIA8oHvEPxG4FzYvM,2391
26
24
  rock_physics_open/equinor_utilities/machine_learning_utilities/polynomial_model.py,sha256=WO6yOoygTD8B73SVWMoS5W-oMTAYm3yo8Ztj-LPR3s4,3673
27
- rock_physics_open/equinor_utilities/machine_learning_utilities/run_regression.py,sha256=L0bCEsMCvcOn6Ji9oDLztY-TaEEYvp1b7bYZQSJ_-II,4799
25
+ rock_physics_open/equinor_utilities/machine_learning_utilities/run_regression.py,sha256=7Ocw-tJtedJeuwcmCBQM_pHDmQilvxc2tO_oa-8WIdE,4826
28
26
  rock_physics_open/equinor_utilities/machine_learning_utilities/sigmoidal_model.py,sha256=dIPtjPcjCOBJtQwuUfRRci8rgBfFwwcPcbuKPqqL7VM,7315
29
27
  rock_physics_open/equinor_utilities/optimisation_utilities/__init__.py,sha256=8IZ_5Yq83YUB7_cxTkC8WeMkQGUHt83IHzA6GJ4rxDc,364
30
28
  rock_physics_open/equinor_utilities/optimisation_utilities/opt_subst_utilities.py,sha256=X77V2hi6PKpKwrf9ygPXeIjJxr-LkztucVXlyAjMBHU,14164
@@ -32,30 +30,30 @@ rock_physics_open/equinor_utilities/snapshot_test_utilities/__init__.py,sha256=l
32
30
  rock_physics_open/equinor_utilities/snapshot_test_utilities/compare_snapshots.py,sha256=PcbCM29iKtVUyRDB9kEFIbboX4fLT_Co2aaztCyqE20,5729
33
31
  rock_physics_open/equinor_utilities/snapshot_test_utilities/snapshots.py,sha256=_UvX78IoPDPTCAbblHD9fH_Yn-LwkDOA9MuU69bPdbM,2691
34
32
  rock_physics_open/equinor_utilities/std_functions/__init__.py,sha256=MLOfMxRazS9tGOVvuLkUp-E4b6jRWOP4YCLf8si624c,1121
35
- rock_physics_open/equinor_utilities/std_functions/backus_ave.py,sha256=sYaXSfqjR69U_UFaMmrD5aEbR_0FrL7ZIWGg-Yi8QNo,1607
36
- rock_physics_open/equinor_utilities/std_functions/dvorkin_nur.py,sha256=TerlLcuP92ihf5vHaJES5KLyleG3CR7NWSExDI1jLIY,2138
37
- rock_physics_open/equinor_utilities/std_functions/gassmann.py,sha256=sxZ_d-mJXAxC_qfYuYwmpOLVwh3jQvQLCH7ezQx02nM,3641
38
- rock_physics_open/equinor_utilities/std_functions/hashin_shtrikman.py,sha256=dz_-n-nObXQDStveJYWofSV1fMJQoDDPLg6sUNXOVFA,5902
39
- rock_physics_open/equinor_utilities/std_functions/hertz_mindlin.py,sha256=KcDx9JRn45aaQjcx6n1GCMqiNGf_PoqGiM4QkFC68-E,1403
40
- rock_physics_open/equinor_utilities/std_functions/moduli_velocity.py,sha256=31M1qHDuuMx_iGi8POCnPmmTM07MlR7Hj3eI2Ejm2jk,1251
41
- rock_physics_open/equinor_utilities/std_functions/reflection_eq.py,sha256=DA-Av9fudwomZb9cFsA8vfhjKIu_QwK50tRqgId1WM8,2544
42
- rock_physics_open/equinor_utilities/std_functions/rho.py,sha256=3yzfJ4felR2DQHSGu2sLDP2-OvplEtogHbJEXb8U-lk,1406
43
- rock_physics_open/equinor_utilities/std_functions/voigt_reuss_hill.py,sha256=M5qRiDxWndeWdXqBuV1HxwdyTifUGu_OvwfVcoNRvEI,3064
44
- rock_physics_open/equinor_utilities/std_functions/walton.py,sha256=I2mQuSTu4OOO9KHQvmgRHr1AuzTYIWSby9NofYMmq9s,1250
45
- rock_physics_open/equinor_utilities/std_functions/wood_brie.py,sha256=Esb19YhjNsZLAq85fjDdzBI32RLjAZcUQeV-lA1VYlY,1929
33
+ rock_physics_open/equinor_utilities/std_functions/backus_ave.py,sha256=KPkQrDcUL9DU4BnzcIMvgI61sJcU5aVoT62ZMnbfEpw,1997
34
+ rock_physics_open/equinor_utilities/std_functions/dvorkin_nur.py,sha256=KgKe_xHHFRq-eWWBn_506ubGD0O_RmbF2NApWYXNqUM,2435
35
+ rock_physics_open/equinor_utilities/std_functions/gassmann.py,sha256=oLWnGThD55z3nm4wyRDySeIdpTwRtRR-_kGmb5_cI4Q,4325
36
+ rock_physics_open/equinor_utilities/std_functions/hashin_shtrikman.py,sha256=il6UbxmIskK_cObkTLSma2VPFqswPTLGI1kO8e6x-l4,6856
37
+ rock_physics_open/equinor_utilities/std_functions/hertz_mindlin.py,sha256=Ekn4ig6YpkFM0m_Nlx5SwbP7SfT3rOVW2zaxiNQy7CI,1665
38
+ rock_physics_open/equinor_utilities/std_functions/moduli_velocity.py,sha256=Tbmw_OSQaefQoRqOCW1MIjWRlZZVMqSi9UhkYgmwDx8,1521
39
+ rock_physics_open/equinor_utilities/std_functions/reflection_eq.py,sha256=iXuWMGghwhUhyCQgGRm7xS_rhN4k6N042o3nDfgQzl8,3237
40
+ rock_physics_open/equinor_utilities/std_functions/rho.py,sha256=xDIa2x82w2XtkxrgwYYeRnqzT8zWlsfWlp5ntVQpQDs,1696
41
+ rock_physics_open/equinor_utilities/std_functions/voigt_reuss_hill.py,sha256=v1tRVYsH102rE504qJOdkjC2HCrL4FVlU4TI0X0yqKU,3803
42
+ rock_physics_open/equinor_utilities/std_functions/walton.py,sha256=p97TGeHGgEQrrc-c21cb7__0rmlKYgBb82GE1thuwDM,1501
43
+ rock_physics_open/equinor_utilities/std_functions/wood_brie.py,sha256=r4OVEYCVn-v7G2aQ-Yo79T4Zk1xa-Kh9Q8Ll6MJSuyI,2485
46
44
  rock_physics_open/equinor_utilities/various_utilities/Equinor_logo.gif,sha256=E9pXxAQig-6chS8Uz3rhFYcNQC4Nk0vbsja0pkZ-lEk,892
47
45
  rock_physics_open/equinor_utilities/various_utilities/Equinor_logo.ico,sha256=vXHlDI4DTCgxmm84_FB3BEMK-NORhcSR6wq01sb6QD0,19598
48
46
  rock_physics_open/equinor_utilities/various_utilities/__init__.py,sha256=UfxgTybUY_O48gou1DaL2bJYZKTViajN556J4EOjXLs,716
49
- rock_physics_open/equinor_utilities/various_utilities/display_result_statistics.py,sha256=sn06BZ3is2Yf519xMJc9vEHXq2DW5_ynWF2QKpK0Usk,3001
50
- rock_physics_open/equinor_utilities/various_utilities/gassmann_dry_mod.py,sha256=5BG6ozz2P69oBVejd8ZOekdN3T5q_XMgK_FcnvBHODc,1364
51
- rock_physics_open/equinor_utilities/various_utilities/gassmann_mod.py,sha256=JiQRjuFfJCIY6FuGaKs5XXeCnkhqiFyBu7_wzGYGfZg,1362
52
- rock_physics_open/equinor_utilities/various_utilities/gassmann_sub_mod.py,sha256=6IqLwY6gXd7aLpbke7oDjCNqsfjLAbgRErjq7FE_sbQ,1797
53
- rock_physics_open/equinor_utilities/various_utilities/hs_average.py,sha256=h6lSX66q5iWBjhPOR6qxJ0St0oYU5jYtqcrpa9OUKlk,1054
54
- rock_physics_open/equinor_utilities/various_utilities/pressure.py,sha256=_FckX63cGH1Le_ogfHfXQO2v8xWn-rBFSd_lfMEicfI,3300
55
- rock_physics_open/equinor_utilities/various_utilities/reflectivity.py,sha256=SoWjbUs6Xjii9OExiRDB70DiprPbfsl-sDQyI3v2GVw,3121
56
- rock_physics_open/equinor_utilities/various_utilities/timeshift.py,sha256=R_n6mlFFohlGqsi5-2geA4I0xaEw1IHBXzuNlT22v-g,2340
57
- rock_physics_open/equinor_utilities/various_utilities/vp_vs_rho_set_statistics.py,sha256=zre9bchR-x_l_5f7XRArrEMtzS5aIf6vAVXV9xUTY98,5105
58
- rock_physics_open/equinor_utilities/various_utilities/vrh_3_min.py,sha256=otMmJuiKWgMTNXYRmgjJMYH-6ND9-YQo9UzsuNVsP8w,1985
47
+ rock_physics_open/equinor_utilities/various_utilities/display_result_statistics.py,sha256=8SfCrLhC9nmCTO2NWlEzg2EFJ76lNbA5OXtK15TYs0w,3245
48
+ rock_physics_open/equinor_utilities/various_utilities/gassmann_dry_mod.py,sha256=l-7Pfw3wgDkVSWAcMNu_CPocRoUHMIghRVwIXL6qCAs,1757
49
+ rock_physics_open/equinor_utilities/various_utilities/gassmann_mod.py,sha256=ZgummAFq9gxVwVKDMfqdG-iUvUnEHdfK6b7iI52BZ3g,1755
50
+ rock_physics_open/equinor_utilities/various_utilities/gassmann_sub_mod.py,sha256=JW9KKrLW3qa8TBqDqeFJMjgqLom1pw86qMV-6oUnShw,2209
51
+ rock_physics_open/equinor_utilities/various_utilities/hs_average.py,sha256=2lArjOpwAmZKNuBIwQXppZ7zUo2JlrwzyMdUkQPhI7A,1522
52
+ rock_physics_open/equinor_utilities/various_utilities/pressure.py,sha256=XYw6zu2Lf9VrO4h4i8xRy2guMQSZGR0N1UnIfyhkvDI,3491
53
+ rock_physics_open/equinor_utilities/various_utilities/reflectivity.py,sha256=kxcmooLicw9pGv_TF-O7_uKC44yAqqc0WbcYA4mvpx4,3658
54
+ rock_physics_open/equinor_utilities/various_utilities/timeshift.py,sha256=kX7E4hnusHh5W3aCkaUAezZHn7BRQzVqPZzv2uBpVvU,2709
55
+ rock_physics_open/equinor_utilities/various_utilities/vp_vs_rho_set_statistics.py,sha256=6M3V57icSKS2yKt5Wi8c6EIuGOoxyfSVt0c9Z5ny14c,6235
56
+ rock_physics_open/equinor_utilities/various_utilities/vrh_3_min.py,sha256=c-hnf1FLgpLjFcys_9WRkVHelQ1VYz1Gcf0b8-2Gxt4,2592
59
57
  rock_physics_open/fluid_models/__init__.py,sha256=H3jeo69HuZCiuZ_meQe27NXIKTMOq2qiZ_UXKYyFmQs,201
60
58
  rock_physics_open/fluid_models/brine_model/__init__.py,sha256=PqVXs5rI421j7xL-Z5pFfNIdC0cUameBJHLOUqEO7wo,86
61
59
  rock_physics_open/fluid_models/brine_model/brine_properties.py,sha256=lBnai7l0gr_XGqVIaIPT-WWSudiMfBJAO-_v1FH99uo,5756
@@ -74,11 +72,11 @@ rock_physics_open/sandstone_models/constant_cement_models.py,sha256=kHRcPEC114uo
74
72
  rock_physics_open/sandstone_models/constant_cement_optimisation.py,sha256=D9ej8PaQ5iVMaCf0LKDQGgJ6CSl8JEFIaxobwddzs_Y,3745
75
73
  rock_physics_open/sandstone_models/contact_cement_model.py,sha256=EVCicRGnW13QBWuvyscFYLy8JpgANPla7ECDeZLfhdA,4488
76
74
  rock_physics_open/sandstone_models/curvefit_sandstone_models.py,sha256=pZ7u7bVNYG254fwtyyrD1SMIFn2onHBu_XZCfVfajzI,3988
77
- rock_physics_open/sandstone_models/friable_models.py,sha256=GmcdgT_yYhajIMEszZbuqeGb2JyQChi8o7NoctJc3aI,6091
75
+ rock_physics_open/sandstone_models/friable_models.py,sha256=cvfLt7GQHn8EKKUk2Z86l-2o-_nXwDXDkQ1ekPQ6L6s,6153
78
76
  rock_physics_open/sandstone_models/friable_optimisation.py,sha256=YCg20EJQaQevEmilPWCbuqZ7GycKX84nmlca5W-jfRM,3467
79
77
  rock_physics_open/sandstone_models/friable_shalysand_sandyshale_models.py,sha256=eMXRCrGdCC9VyYwjg498M0GTAMlWar18iz5gS7Rz16w,6884
80
78
  rock_physics_open/sandstone_models/patchy_cement_fluid_substitution_model.py,sha256=21ujg7K-f7vykKxYwFynPenZLVZkdBAiAEwt4-K4r5I,16123
81
- rock_physics_open/sandstone_models/patchy_cement_model.py,sha256=EOF5kRuH9QXeVvrFps07CJWMPfWz4N2UoZTutPUPK5Y,10504
79
+ rock_physics_open/sandstone_models/patchy_cement_model.py,sha256=zKdAAFJXgblCpmihRiEz_8DPd40nniJW97-0daCZoq0,11161
82
80
  rock_physics_open/sandstone_models/patchy_cement_optimisation.py,sha256=Tf3jRT0c1r3IgVPUFWTDqh4-XB5381dqeH7CPE27QYg,7017
83
81
  rock_physics_open/sandstone_models/unresolved_cemented_sandshale_models.py,sha256=xFF_FrQw_3DoYADK7-3Lecr_KnurNQLsXy-22eN-92c,3901
84
82
  rock_physics_open/sandstone_models/unresolved_friable_sandshale_models.py,sha256=HpRBIQw2POoQbJ2DlwoyJSDvKvhJQyhgmkjoGQFo1vE,3671
@@ -138,10 +136,10 @@ rock_physics_open/ternary_plots/__init__.py,sha256=mrmn0T4G91UPdCTEOr4HSEd1d8ZCR
138
136
  rock_physics_open/ternary_plots/gen_ternary_plot.py,sha256=uLwoeV19Tfj6Cy18NWcSoOV18DcYBJUYofb8zEYmSzM,1836
139
137
  rock_physics_open/ternary_plots/shale_prop_ternary.py,sha256=5-NB4LoXRP7JPQYaJBZwD5mnBLMjisCTEjj2u6u_boE,8228
140
138
  rock_physics_open/ternary_plots/ternary_patches.py,sha256=oYaIkCbzC4L19VWBz5iphVdQnpHX9kdy0p2NK65aIIM,7256
141
- rock_physics_open/ternary_plots/ternary_plot_utilities.py,sha256=weFDWyzd7wgr3xB63Q-xtT-KoJA6FNIDWuTkA7jr94Q,5669
139
+ rock_physics_open/ternary_plots/ternary_plot_utilities.py,sha256=7CM4BuxwUjfPAGLDROBLFs1oiZ48xIZYIrgG46jlM-c,5678
142
140
  rock_physics_open/ternary_plots/unconventionals_ternary.py,sha256=KWjcBrjI8Tgr2FYpz1ey-DPuhUeSC7b5mpN8OzwNa4I,1823
143
- rock_physics_open-0.3.0.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
144
- rock_physics_open-0.3.0.dist-info/METADATA,sha256=31O7aQyYTnFWoMjWrUpnxurqmsEVz16zwepO9_APppI,3901
145
- rock_physics_open-0.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
146
- rock_physics_open-0.3.0.dist-info/top_level.txt,sha256=zFBbfbv2pshFJvcvcLLigDmlJjjg08iDdb6ABgncaP8,18
147
- rock_physics_open-0.3.0.dist-info/RECORD,,
141
+ rock_physics_open-0.3.1.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
142
+ rock_physics_open-0.3.1.dist-info/METADATA,sha256=nT1qZefrmIhvMwB4iAF-_yLXV1u9P7OJrivLHxVmzlg,3901
143
+ rock_physics_open-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
144
+ rock_physics_open-0.3.1.dist-info/top_level.txt,sha256=zFBbfbv2pshFJvcvcLLigDmlJjjg08iDdb6ABgncaP8,18
145
+ rock_physics_open-0.3.1.dist-info/RECORD,,