geolysis 0.4.2__py3-none-any.whl → 0.4.4__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.
geolysis/spt.py CHANGED
@@ -1,15 +1,49 @@
1
+ """ Standard penetration test module.
2
+
3
+ Enums
4
+ =====
5
+
6
+ .. autosummary::
7
+ :toctree: _autosummary
8
+ :nosignatures:
9
+
10
+ HammerType
11
+ SamplerType
12
+
13
+ Classes
14
+ =======
15
+
16
+ .. autosummary::
17
+ :toctree: _autosummary
18
+
19
+ SPTNDesign
20
+ EnergyCorrection
21
+ GibbsHoltzOPC
22
+ BazaraaPeckOPC
23
+ PeckOPC
24
+ LiaoWhitmanOPC
25
+ SkemptonOPC
26
+ DilatancyCorrection
27
+ """
1
28
  import enum
2
29
  from abc import abstractmethod
3
30
  from typing import Final, Sequence
4
31
 
5
- from geolysis import validators
6
- from geolysis.utils import isclose, log10, mean, round_, sqrt
32
+ from .utils import enum_repr, isclose, log10, mean, round_, sqrt, validators
7
33
 
8
- __all__ = ["EnergyCorrection", "GibbsHoltzOPC", "BazaraaPeckOPC", "PeckOPC",
9
- "LiaoWhitmanOPC", "SkemptonOPC", "DilatancyCorrection"]
34
+ __all__ = ["SPTNDesign",
35
+ "HammerType",
36
+ "SamplerType",
37
+ "EnergyCorrection",
38
+ "GibbsHoltzOPC",
39
+ "BazaraaPeckOPC",
40
+ "PeckOPC",
41
+ "LiaoWhitmanOPC",
42
+ "SkemptonOPC",
43
+ "DilatancyCorrection"]
10
44
 
11
45
 
12
- class SPTDesign:
46
+ class SPTNDesign:
13
47
  """ SPT Design Calculations.
14
48
 
15
49
  Due to uncertainty in field procedure in standard penetration test and also
@@ -21,35 +55,43 @@ class SPTDesign:
21
55
  N-value from the base.
22
56
  """
23
57
 
24
- def __init__(self, spt_n_values: Sequence[float]) -> None:
58
+ def __init__(self, corrected_spt_n_values: Sequence[float]) -> None:
25
59
  """
26
- :param spt_n_values: SPT N-values within the foundation influence zone.
27
- ``spt_n_values`` can either be **corrected** or
28
- **uncorrected** SPT N-values.
29
- :type spt_n_values: Sequence[float]
60
+ :param corrected_spt_n_values: Corrected SPT N-values within the
61
+ foundation influence zone.
62
+ :type corrected_spt_n_values: Sequence[float]
30
63
  """
31
- self.spt_n_values = spt_n_values
64
+ self.corrected_spt_n_values = corrected_spt_n_values
65
+
66
+ @property
67
+ def corrected_spt_n_values(self) -> Sequence[float]:
68
+ return self._corrected_spt_n_values
69
+
70
+ @corrected_spt_n_values.setter
71
+ @validators.min_len(1)
72
+ def corrected_spt_n_values(self, val: Sequence[float]) -> None:
73
+ self._corrected_spt_n_values = val
32
74
 
33
75
  @round_(ndigits=1)
34
76
  def average_spt_n_design(self) -> float:
35
77
  """Calculates the average of the corrected SPT N-values within the
36
78
  foundation influence zone.
37
79
  """
38
- return mean(self.spt_n_values)
80
+ return mean(self.corrected_spt_n_values)
39
81
 
40
82
  @round_(ndigits=1)
41
83
  def minimum_spt_n_design(self):
42
84
  """The lowest SPT N-value within the influence zone can be taken as the
43
85
  :math:`N_{design}` as suggested by ``Terzaghi & Peck (1948)``.
44
86
  """
45
- return min(self.spt_n_values)
87
+ return min(self.corrected_spt_n_values)
46
88
 
47
89
  @round_(ndigits=1)
48
90
  def weighted_spt_n_design(self):
49
91
  r"""Calculates the weighted average of the corrected SPT N-values
50
92
  within the foundation influence zone.
51
93
 
52
- Weighted average is given by the formula:
94
+ :Equation:
53
95
 
54
96
  .. math::
55
97
 
@@ -60,14 +102,16 @@ class SPTDesign:
60
102
  sum_total = 0.0
61
103
  sum_wgts = 0.0
62
104
 
63
- for i, corrected_spt in enumerate(self.spt_n_values, start=1):
105
+ for i, corr_spt_n_val in enumerate(self.corrected_spt_n_values,
106
+ start=1):
64
107
  wgt = 1 / i ** 2
65
- sum_total += wgt * corrected_spt
108
+ sum_total += wgt * corr_spt_n_val
66
109
  sum_wgts += wgt
67
110
 
68
111
  return sum_total / sum_wgts
69
112
 
70
113
 
114
+ @enum_repr
71
115
  class HammerType(enum.StrEnum):
72
116
  """Enumeration of hammer types."""
73
117
  AUTOMATIC = enum.auto()
@@ -77,6 +121,7 @@ class HammerType(enum.StrEnum):
77
121
  DROP = PIN = enum.auto()
78
122
 
79
123
 
124
+ @enum_repr
80
125
  class SamplerType(enum.StrEnum):
81
126
  """Enumeration of sampler types."""
82
127
  STANDARD = enum.auto()
@@ -93,7 +138,7 @@ class EnergyCorrection:
93
138
  the measured N-value to :math:`N_{60}` assuming 60% hammer energy being
94
139
  transferred to the tip of the standard split spoon.
95
140
 
96
- Energy correction is given by the formula:
141
+ :Equation:
97
142
 
98
143
  .. math::
99
144
 
@@ -102,6 +147,7 @@ class EnergyCorrection:
102
147
  ``ENERGY``: 0.6, 0.55, etc
103
148
  """
104
149
 
150
+ #: Hammer efficiency factors
105
151
  HAMMER_EFFICIENCY_FACTORS = {HammerType.AUTOMATIC: 0.70,
106
152
  HammerType.DONUT_1: 0.60,
107
153
  HammerType.DONUT_2: 0.50,
@@ -109,11 +155,14 @@ class EnergyCorrection:
109
155
  HammerType.DROP: 0.45,
110
156
  HammerType.PIN: 0.45}
111
157
 
158
+ #: Sampler correction factors
112
159
  SAMPLER_CORRECTION_FACTORS = {SamplerType.STANDARD: 1.00,
113
160
  SamplerType.NON_STANDARD: 1.20}
114
161
 
115
- def __init__(self, recorded_spt_n_value: int, *, energy_percentage=0.6,
116
- borehole_diameter=65.0, rod_length=3.0,
162
+ def __init__(self, recorded_spt_n_value: int, *,
163
+ energy_percentage=0.6,
164
+ borehole_diameter=65.0,
165
+ rod_length=3.0,
117
166
  hammer_type=HammerType.DONUT_1,
118
167
  sampler_type=SamplerType.STANDARD):
119
168
  """
@@ -136,7 +185,6 @@ class EnergyCorrection:
136
185
  :param sampler_type: Sampler type, defaults to :attr:`SamplerType.STANDARD`
137
186
  :type sampler_type: SamplerType, optional
138
187
  """
139
-
140
188
  self.recorded_spt_n_value = recorded_spt_n_value
141
189
  self.energy_percentage = energy_percentage
142
190
  self.borehole_diameter = borehole_diameter
@@ -197,7 +245,6 @@ class EnergyCorrection:
197
245
  corr = 1.05
198
246
  else:
199
247
  corr = 1.15
200
-
201
248
  return corr
202
249
 
203
250
  @property
@@ -216,7 +263,6 @@ class EnergyCorrection:
216
263
  corr = 0.95
217
264
  else:
218
265
  corr = 1.00
219
-
220
266
  return corr
221
267
 
222
268
  def correction(self) -> float:
@@ -241,7 +287,7 @@ class OPC:
241
287
  :param std_spt_n_value: SPT N-value standardized for field procedures.
242
288
  :type std_spt_n_value: float
243
289
 
244
- :param eop: Effective overburden pressure (:math:`kN/m^2`)
290
+ :param eop: Effective overburden pressure (:math:`kPa`).
245
291
  :type eop: float
246
292
  """
247
293
  self.std_spt_n_value = std_spt_n_value
@@ -260,7 +306,7 @@ class OPC:
260
306
  def corrected_spt_n_value(self) -> float:
261
307
  """Corrected SPT N-value."""
262
308
  corrected_spt = self.correction() * self.std_spt_n_value
263
- # Corrected SPT should not be more
309
+ # Corrected SPT should not be more
264
310
  # than 2 times the Standardized SPT
265
311
  return min(corrected_spt, 2 * self.std_spt_n_value)
266
312
 
@@ -272,7 +318,7 @@ class OPC:
272
318
  class GibbsHoltzOPC(OPC):
273
319
  r"""Overburden Pressure Correction according to ``Gibbs & Holtz (1957)``.
274
320
 
275
- Overburden Pressure Correction is given by the formula:
321
+ :Equation:
276
322
 
277
323
  .. math:: C_N = \dfrac{350}{\sigma_o + 70} \, \sigma_o \le 280kN/m^2
278
324
 
@@ -295,16 +341,14 @@ class GibbsHoltzOPC(OPC):
295
341
  def correction(self) -> float:
296
342
  """SPT Correction."""
297
343
  corr = 350.0 / (self.eop + 70.0)
298
- if corr > 2.0:
299
- corr /= 2.0
300
- return corr
344
+ return corr / 2.0 if corr > 2.0 else corr
301
345
 
302
346
 
303
347
  class BazaraaPeckOPC(OPC):
304
348
  r"""Overburden Pressure Correction according to ``Bazaraa (1967)``, and
305
349
  also by ``Peck and Bazaraa (1969)``.
306
350
 
307
- Overburden Pressure Correction is given by the formula:
351
+ :Equation:
308
352
 
309
353
  .. math::
310
354
 
@@ -316,7 +360,7 @@ class BazaraaPeckOPC(OPC):
316
360
  C_N &= 1 \, , \, \sigma_o = 71.8kN/m^2
317
361
  """
318
362
 
319
- #: Maximum effective overburden pressure. (:math:`kN/m^2`)
363
+ #: Maximum effective overburden pressure (:math:`kPa`).
320
364
  STD_PRESSURE: Final = 71.8
321
365
 
322
366
  @property
@@ -342,7 +386,7 @@ class BazaraaPeckOPC(OPC):
342
386
  class PeckOPC(OPC):
343
387
  r"""Overburden Pressure Correction according to ``Peck et al. (1974)``.
344
388
 
345
- Overburden Pressure Correction is given by the formula:
389
+ :Equation:
346
390
 
347
391
  .. math:: C_N = 0.77 \log \left(\dfrac{2000}{\sigma_o} \right)
348
392
  """
@@ -364,7 +408,7 @@ class PeckOPC(OPC):
364
408
  class LiaoWhitmanOPC(OPC):
365
409
  r"""Overburden Pressure Correction according to ``Liao & Whitman (1986)``.
366
410
 
367
- Overburden Pressure Correction is given by the formula:
411
+ :Equation:
368
412
 
369
413
  .. math:: C_N = \sqrt{\dfrac{100}{\sigma_o}}
370
414
  """
@@ -386,7 +430,7 @@ class LiaoWhitmanOPC(OPC):
386
430
  class SkemptonOPC(OPC):
387
431
  r"""Overburden Pressure Correction according to ``Skempton (1986)``.
388
432
 
389
- Overburden Pressure Correction is given by the formula:
433
+ :Equation:
390
434
 
391
435
  .. math:: C_N = \dfrac{2}{1 + 0.01044 \cdot \sigma_o}
392
436
  """
@@ -412,7 +456,7 @@ class DilatancyCorrection:
412
456
  correction, overburden pressure correction is applied first and then
413
457
  dilatancy correction is applied.
414
458
 
415
- Dilatancy correction is given by the formula:
459
+ :Equation:
416
460
 
417
461
  .. math::
418
462
 
@@ -422,26 +466,26 @@ class DilatancyCorrection:
422
466
  (N_1)_{60} &= (N_1)_{60} \, , \, (N_1)_{60} \le 15
423
467
  """
424
468
 
425
- def __init__(self, std_spt_n_value: float) -> None:
469
+ def __init__(self, corr_spt_n_value: float) -> None:
426
470
  """
427
- :param std_spt_n_value: SPT N-value standardized for field procedures
471
+ :param corr_spt_n_value: SPT N-value standardized for field procedures
428
472
  and/or corrected for overburden pressure.
429
- :type std_spt_n_value: float
473
+ :type corr_spt_n_value: float
430
474
  """
431
- self.std_spt_n_value = std_spt_n_value
475
+ self.corr_spt_n_value = corr_spt_n_value
432
476
 
433
477
  @property
434
- def std_spt_n_value(self) -> float:
478
+ def corr_spt_n_value(self) -> float:
435
479
  return self._std_spt_n_value
436
480
 
437
- @std_spt_n_value.setter
481
+ @corr_spt_n_value.setter
438
482
  @validators.gt(0.0)
439
- def std_spt_n_value(self, val: float) -> None:
483
+ def corr_spt_n_value(self, val: float) -> None:
440
484
  self._std_spt_n_value = val
441
485
 
442
486
  @round_(ndigits=1)
443
487
  def corrected_spt_n_value(self) -> float:
444
488
  """Corrected SPT N-value."""
445
- if self.std_spt_n_value <= 15.0:
446
- return self.std_spt_n_value
447
- return 15.0 + 0.5 * (self.std_spt_n_value - 15.0)
489
+ if self.corr_spt_n_value <= 15.0:
490
+ return self.corr_spt_n_value
491
+ return 15.0 + 0.5 * (self.corr_spt_n_value - 15.0)
@@ -4,8 +4,25 @@ from math import exp, inf, isclose, log10, pi, sqrt
4
4
  from statistics import fmean as mean
5
5
  from typing import Callable, SupportsRound
6
6
 
7
- __all__ = ["inf", "pi", "deg2rad", "rad2deg", "tan", "cot", "sin", "cos",
8
- "arctan", "round_", "mean", "exp", "isclose", "log10", "sqrt"]
7
+ from . import validators
8
+
9
+ __all__ = ["enum_repr",
10
+ "inf",
11
+ "pi",
12
+ "deg2rad",
13
+ "rad2deg",
14
+ "tan",
15
+ "cot",
16
+ "sin",
17
+ "cos",
18
+ "arctan",
19
+ "round_",
20
+ "mean",
21
+ "exp",
22
+ "isclose",
23
+ "log10",
24
+ "sqrt",
25
+ "validators"]
9
26
 
10
27
 
11
28
  def deg2rad(x: float, /) -> float:
@@ -43,6 +60,11 @@ def arctan(x: float, /) -> float:
43
60
  return rad2deg(math.atan(x))
44
61
 
45
62
 
63
+ def enum_repr(cls):
64
+ cls.__repr__ = lambda self: f"{self.value}"
65
+ return cls
66
+
67
+
46
68
  def round_(ndigits: int | Callable[..., SupportsRound]) -> Callable:
47
69
  """A decorator that rounds the result of a callable to a specified number
48
70
  of decimal places.
@@ -0,0 +1,80 @@
1
+ """validators"""
2
+ import operator
3
+ from typing import Callable, TypeAlias
4
+
5
+ Number: TypeAlias = int | float
6
+
7
+
8
+ def _num_validator(bound: float, /, *,
9
+ compare_symbol: str,
10
+ compare_fn: Callable,
11
+ err_msg: str,
12
+ exc_type: Callable):
13
+ def dec(fn):
14
+ def wrapper(obj, val):
15
+ if not compare_fn(val, bound):
16
+ msg = f"{fn.__name__} must be {compare_symbol} {bound}"
17
+ raise exc_type(err_msg if err_msg else msg)
18
+ fn(obj, val)
19
+
20
+ return wrapper
21
+
22
+ return dec
23
+
24
+
25
+ def _len_validator(bound: float, /, *,
26
+ compare_symbol: str,
27
+ compare_fn: Callable,
28
+ err_msg: str,
29
+ exc_type: Callable):
30
+ def dec(fn):
31
+ def wrapper(obj, val):
32
+ _len = len(val)
33
+ if not compare_fn(_len, bound):
34
+ msg = f"Length of '{fn.__name__}' must be {compare_symbol} {bound}"
35
+ raise exc_type(err_msg if err_msg else msg)
36
+ return fn(obj, val)
37
+
38
+ return wrapper
39
+
40
+ return dec
41
+
42
+
43
+ def min_len(m_len: int, /, *, exc_type=ValueError, err_msg=None):
44
+ return _len_validator(m_len, compare_symbol=">=",
45
+ compare_fn=operator.ge,
46
+ err_msg=err_msg,
47
+ exc_type=exc_type)
48
+
49
+
50
+ # def lt(val: Number, /, *, exc_type=ValueError, err_msg=None):
51
+ # return _NumberValidator(val, "<", operator.lt, exc_type, err_msg)
52
+
53
+
54
+ def le(val: Number, /, *, exc_type=ValueError, err_msg=None):
55
+ return _num_validator(val, compare_symbol="<=",
56
+ compare_fn=operator.le,
57
+ err_msg=err_msg,
58
+ exc_type=exc_type)
59
+
60
+
61
+ # def eq(val: Number, /, *, exc_type=ValueError, err_msg=None):
62
+ # return _NumberValidator(val, "==", operator.eq, exc_type, err_msg)
63
+
64
+
65
+ # def ne(val: Number, /, *, exc_type=ValueError, err_msg=None):
66
+ # return _NumberValidator(val, "!=", operator.ne, exc_type, err_msg)
67
+
68
+
69
+ def ge(val: Number, /, *, exc_type=ValueError, err_msg=None):
70
+ return _num_validator(val, compare_symbol=">=",
71
+ compare_fn=operator.ge,
72
+ err_msg=err_msg,
73
+ exc_type=exc_type)
74
+
75
+
76
+ def gt(val: Number, /, *, exc_type=ValueError, err_msg=None):
77
+ return _num_validator(val, compare_symbol=">",
78
+ compare_fn=operator.gt,
79
+ err_msg=err_msg,
80
+ exc_type=exc_type)
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: geolysis
3
- Version: 0.4.2
4
- Summary: geolysis.core is an opensource software for geotechnical engineering analysis and modeling.
3
+ Version: 0.4.4
4
+ Summary: geolysis is an opensource software for geotechnical engineering analysis and modeling.
5
5
  Author-email: Patrick Boateng <boatengpato.pb@gmail.com>
6
6
  License: MIT License
7
- Project-URL: Homepage, https://github.com/patrickboateng/geolysis
8
- Project-URL: Documentation, https://geolysis.readthedocs.org
7
+ Project-URL: Homepage, https://docs.geolysis.io
8
+ Project-URL: Documentation, https://docs.geolysis.io
9
9
  Project-URL: Repository, https://github.com/patrickboateng/geolysis
10
10
  Project-URL: Discussions, https://github.com/patrickboateng/geolysis/discussions
11
11
  Project-URL: Issue Tracker, https://github.com/patrickboateng/geolysis/issues
12
- Keywords: geotechnical-engineering,soil-classification,settlement-analysis,bearing-capacity-analysis
12
+ Keywords: geotechnical-engineering,soil-classification,bearing-capacity-analysis,standard-penetration-test-analysis
13
13
  Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Intended Audience :: Education
@@ -29,14 +29,15 @@ Requires-Dist: pytest; extra == "dev"
29
29
  Requires-Dist: pytest-cov; extra == "dev"
30
30
  Requires-Dist: coverage; extra == "dev"
31
31
 
32
- <h1 align="center">
32
+ <div align="center">
33
33
  <img src="https://raw.githubusercontent.com/patrickboateng/geolysis/dev/docs/source/_static/branding/geolysislogo.svg"
34
34
  alt="geolysislogo" width="75%" />
35
- </h1><br>
35
+ </div><br>
36
36
 
37
37
  <div align="center">
38
38
 
39
39
  [![PyPI Latest Release](https://img.shields.io/pypi/v/geolysis?style=flat&logo=pypi)](https://pypi.org/project/geolysis/)
40
+ [![PyPI Downloads](https://static.pepy.tech/badge/geolysis)](https://pepy.tech/projects/geolysis)
40
41
  [![PyPI pyversions](https://img.shields.io/pypi/pyversions/geolysis.svg?logo=python&style=flat)](https://pypi.python.org/pypi/geolysis/)
41
42
  [![license](https://img.shields.io/pypi/l/geolysis?style=flat&logo=opensourceinitiative)](https://opensource.org/license/mit/)
42
43
 
@@ -116,106 +117,97 @@ Here are brief descriptions of these projects:
116
117
 
117
118
  ## Installation
118
119
 
119
- **_Note: Work on the latest update is still in progress, so the usage example
120
- below
121
- will not function if installed._**
122
-
123
120
  ```shell
124
- pip install geolysis
121
+ $ pip install geolysis
125
122
  ```
126
123
 
127
124
  ## Usage Example
128
125
 
129
126
  ```python
130
127
 
131
- >> > from geolysis.soil_classifier import create_soil_classifier
132
- >> > uscs_clf = create_soil_classifier(liquid_limit=34.1,
133
- ...
134
- plastic_limit = 21.1,
135
- ...
136
- fines = 47.88,
137
- ...
138
- sand = 37.84,
139
- ...
140
- clf_type = "USCS")
141
- >> > clf = uscs_clf.classify()
142
- >> > clf
128
+ >>> from geolysis.soil_classifier import create_soil_classifier
129
+ >>> uscs_clf = create_soil_classifier(liquid_limit=34.1,
130
+ ... plastic_limit=21.1,
131
+ ... fines=47.88,
132
+ ... sand=37.84,
133
+ ... clf_type="USCS")
134
+ >>> clf = uscs_clf.classify()
135
+ >>> clf
143
136
  SoilClf(symbol='SC', description='Clayey sands')
144
- >> > clf.symbol
137
+ >>> clf.symbol
145
138
  'SC'
146
- >> > clf.description
139
+ >>> clf.description
147
140
  'Clayey sands'
148
141
 
149
142
  ```
150
143
 
151
144
  ```python
152
145
 
153
- >> > from geolysis.soil_classifier import create_soil_classifier
154
- >> > aashto_clf = create_soil_classifier(liquid_limit=34.1,
155
- ...
156
- plastic_limit = 21.1,
157
- ...
158
- fines = 47.88,
159
- ...
160
- sand = 37.84, # Sand is optional for AASHTO classification
161
- ...
162
- clf_type = "AASHTO")
163
- >> > clf = aashto_clf.classify()
164
- >> > clf
146
+ >>> from geolysis.soil_classifier import create_soil_classifier
147
+ >>> aashto_clf = create_soil_classifier(liquid_limit=34.1,
148
+ ... plastic_limit=21.1,
149
+ ... fines=47.88,
150
+ ... sand=37.84, # Sand is optional for AASHTO classification
151
+ ... clf_type="AASHTO")
152
+ >>> clf = aashto_clf.classify()
153
+ >>> clf
165
154
  SoilClf(symbol='A-6(4)', description='Clayey soils')
166
- >> > clf.symbol
155
+ >>> clf.symbol
167
156
  'A-6(4)'
168
- >> > clf.description
157
+ >>> clf.description
169
158
  'Clayey soils'
170
159
 
171
160
  ```
172
161
 
162
+ Check out more examples
163
+ [here](https://docs.geolysis.io/en/latest/user_guide/getting_started.html#quick-start)
164
+
173
165
  ## Features
174
166
 
175
167
  <table>
176
- <tr>
177
- <td rowspan="2">
178
- <strong>Soil Classification</strong>
179
- </td>
180
- <td>AASHTO Classification System</td>
181
- </tr>
182
- <tr>
183
- <td>Unified Soil Classification System</td>
184
- </tr>
185
- <tr>
186
- <td rowspan="4">
187
- <strong>Standard Penetration Test (SPT) Analysis</strong>
188
- </td>
189
- <td>SPT Energy Correction</td>
190
- </tr>
191
- <tr>
192
- <td>SPT Overburden Pressure Correction</td>
193
- </tr>
194
- <tr>
195
- <td>Dilatancy Correction</td>
196
- </tr>
197
- <tr>
198
- <td>SPT N-Design Calculation</td>
199
- </tr>
200
- <tr>
201
- <td rowspan="2">
202
- <strong>Bearing Capacity Estimation</strong>
203
- </td>
204
- <td>Allowable Bearing Capacity Estimation</td>
205
- </tr>
206
- <tr>
207
- <td>Ultimate Bearing Capacity Estimation</td>
208
- </tr>
168
+ <tr>
169
+ <td><strong>Soil Classification</strong></td>
170
+ <td>AASHTO Classification System</td>
171
+ </tr>
172
+ <tr>
173
+ <td></td>
174
+ <td>Unified Soil Classification System</td>
175
+ </tr>
176
+ <tr>
177
+ <td><strong>Standard Penetration Test (SPT) Analysis</strong></td>
178
+ <td>SPT Energy Correction</td>
179
+ </tr>
180
+ <tr>
181
+ <td></td>
182
+ <td>SPT Overburden Pressure Correction</td>
183
+ </tr>
184
+ <tr>
185
+ <td></td>
186
+ <td>Dilatancy Correction</td>
187
+ </tr>
188
+ <tr>
189
+ <td></td>
190
+ <td>SPT N-Design Calculation</td>
191
+ </tr>
192
+ <tr>
193
+ <td><strong>Bearing Capacity Estimation</strong></td>
194
+ <td>Allowable Bearing Capacity Estimation</td>
195
+ </tr>
196
+ <tr>
197
+ <td></td>
198
+ <td>Ultimate Bearing Capacity Estimation</td>
199
+ </tr>
209
200
  </table>
210
201
 
211
202
  ## Documentation
212
203
 
213
- Full documentation is available [here](https://www.geolysis.readthedocs.io)
214
-
215
- **_Note: Work on the latest documentation is still ongoing._**
204
+ Full documentation is available [here](https://docs.geolysis.io/en/latest/)
216
205
 
217
206
  ## Contributing
218
207
 
208
+ Contribution guidelines can be
209
+ found [here](https://docs.geolysis.io/en/latest/dev_guide/index.html)
210
+
219
211
  ## License
220
212
 
221
213
  This project is licensed under the MIT License - see the
@@ -0,0 +1,21 @@
1
+ geolysis/__init__.py,sha256=MyIge95T6RDI2zo-8gn3ewgjx3Bs986rvy55fek6UV4,122
2
+ geolysis/foundation.py,sha256=M6m8Pb7Bn7jdfD_77_RSXpAzZVpAiyQoWu1jJi_LVDE,10149
3
+ geolysis/soil_classifier.py,sha256=vvO4OrxcXAqLe3a3c8jhkfIZWV375BnyefCXHNhQAaU,26760
4
+ geolysis/spt.py,sha256=WI2KhaljsZ17qNhi99pFLswgZ167N1rR1udTcs_Czvc,14232
5
+ geolysis/bearing_capacity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ geolysis/bearing_capacity/abc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ geolysis/bearing_capacity/abc/cohl/__init__.py,sha256=fqG8lxcFUWUpaP3kAk4zFLmFdSWfKuZsU1H6QM5z5nQ,6922
8
+ geolysis/bearing_capacity/abc/cohl/bowles_abc.py,sha256=2S0EFRW-C2s5e3MF8wz-9JWov7NzNuWqJ4HlSuqMrS4,4231
9
+ geolysis/bearing_capacity/abc/cohl/meyerhof_abc.py,sha256=wdWYn58NG7sYc-8ML-Yf7kS4PZnpOqghu6gwaH7UFsg,4197
10
+ geolysis/bearing_capacity/abc/cohl/terzaghi_abc.py,sha256=SRawtG8M0jGGMmzEqOvu_nV1tJ-8wJCJQo4GepDREd8,5448
11
+ geolysis/bearing_capacity/ubc/__init__.py,sha256=BgByVUK3t_EH5MXnEkd0IQOxqJqabYJZ02EoJq3zIac,11126
12
+ geolysis/bearing_capacity/ubc/hansen_ubc.py,sha256=DM3gnF6OueUDbQq4L82bR7i2vFusr2x1uh3vmYfAKk4,7222
13
+ geolysis/bearing_capacity/ubc/terzaghi_ubc.py,sha256=-mgSgqhceKaEzR0_zOQ2-wJTDPNpi-VQ3gg_lTxcqm0,6710
14
+ geolysis/bearing_capacity/ubc/vesic_ubc.py,sha256=41TKVQf_5wsHTEuR08u4FS-Rtdc2WomV1JC9fBubKVY,7482
15
+ geolysis/utils/__init__.py,sha256=Q3eBBOi_JKnydu6su-TswdI2bIT4PZ7V43NIIGaTj2w,2616
16
+ geolysis/utils/validators.py,sha256=ETvqwXtBFE17keDE5plYcSOztFNbSuJVqB6M6SmxBaQ,2556
17
+ geolysis-0.4.4.dist-info/LICENSE.txt,sha256=ap6sMs3lT7ICbEXBhgihwH1BTCVcjmCQkIkwVnil1Ak,1065
18
+ geolysis-0.4.4.dist-info/METADATA,sha256=8X06eJ1edfSgMt4htbXtylGUrsdtvIoLmTYYVRYFffY,7444
19
+ geolysis-0.4.4.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
20
+ geolysis-0.4.4.dist-info/top_level.txt,sha256=9mnQgOaCRr11dtXff8X-q3FfXjRONd6kHseSy5q2y8g,9
21
+ geolysis-0.4.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5