geolysis 0.4.2__tar.gz → 0.4.4__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 (38) hide show
  1. {geolysis-0.4.2 → geolysis-0.4.4}/PKG-INFO +68 -76
  2. {geolysis-0.4.2 → geolysis-0.4.4}/README.md +63 -71
  3. geolysis-0.4.4/geolysis/__init__.py +5 -0
  4. geolysis-0.4.4/geolysis/bearing_capacity/__init__.py +0 -0
  5. geolysis-0.4.4/geolysis/bearing_capacity/abc/__init__.py +0 -0
  6. geolysis-0.4.4/geolysis/bearing_capacity/abc/cohl/__init__.py +206 -0
  7. geolysis-0.4.4/geolysis/bearing_capacity/abc/cohl/bowles_abc.py +107 -0
  8. geolysis-0.4.4/geolysis/bearing_capacity/abc/cohl/meyerhof_abc.py +107 -0
  9. geolysis-0.4.4/geolysis/bearing_capacity/abc/cohl/terzaghi_abc.py +142 -0
  10. geolysis-0.4.4/geolysis/bearing_capacity/ubc/__init__.py +337 -0
  11. geolysis-0.4.4/geolysis/bearing_capacity/ubc/hansen_ubc.py +296 -0
  12. geolysis-0.4.4/geolysis/bearing_capacity/ubc/terzaghi_ubc.py +258 -0
  13. geolysis-0.4.4/geolysis/bearing_capacity/ubc/vesic_ubc.py +302 -0
  14. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis/foundation.py +165 -98
  15. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis/soil_classifier.py +160 -99
  16. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis/spt.py +88 -44
  17. geolysis-0.4.2/geolysis/utils.py → geolysis-0.4.4/geolysis/utils/__init__.py +24 -2
  18. geolysis-0.4.4/geolysis/utils/validators.py +80 -0
  19. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis.egg-info/PKG-INFO +68 -76
  20. geolysis-0.4.4/geolysis.egg-info/SOURCES.txt +30 -0
  21. {geolysis-0.4.2 → geolysis-0.4.4}/pyproject.toml +9 -23
  22. geolysis-0.4.4/tests/test_foundation.py +117 -0
  23. geolysis-0.4.4/tests/test_soil_classifier.py +172 -0
  24. geolysis-0.4.4/tests/test_spt.py +108 -0
  25. {geolysis-0.4.2 → geolysis-0.4.4}/tests/test_utils.py +7 -2
  26. geolysis-0.4.4/tests/test_validators.py +24 -0
  27. geolysis-0.4.2/geolysis/__init__.py +0 -3
  28. geolysis-0.4.2/geolysis/validators.py +0 -54
  29. geolysis-0.4.2/geolysis.egg-info/SOURCES.txt +0 -19
  30. geolysis-0.4.2/tests/test_foundation.py +0 -22
  31. geolysis-0.4.2/tests/test_soil_classifier.py +0 -136
  32. geolysis-0.4.2/tests/test_spt.py +0 -37
  33. {geolysis-0.4.2 → geolysis-0.4.4}/LICENSE.txt +0 -0
  34. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis.egg-info/dependency_links.txt +0 -0
  35. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis.egg-info/requires.txt +0 -0
  36. {geolysis-0.4.2 → geolysis-0.4.4}/geolysis.egg-info/top_level.txt +0 -0
  37. {geolysis-0.4.2 → geolysis-0.4.4}/setup.cfg +0 -0
  38. {geolysis-0.4.2 → geolysis-0.4.4}/setup.py +0 -0
@@ -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
@@ -1,11 +1,12 @@
1
- <h1 align="center">
1
+ <div align="center">
2
2
  <img src="https://raw.githubusercontent.com/patrickboateng/geolysis/dev/docs/source/_static/branding/geolysislogo.svg"
3
3
  alt="geolysislogo" width="75%" />
4
- </h1><br>
4
+ </div><br>
5
5
 
6
6
  <div align="center">
7
7
 
8
8
  [![PyPI Latest Release](https://img.shields.io/pypi/v/geolysis?style=flat&logo=pypi)](https://pypi.org/project/geolysis/)
9
+ [![PyPI Downloads](https://static.pepy.tech/badge/geolysis)](https://pepy.tech/projects/geolysis)
9
10
  [![PyPI pyversions](https://img.shields.io/pypi/pyversions/geolysis.svg?logo=python&style=flat)](https://pypi.python.org/pypi/geolysis/)
10
11
  [![license](https://img.shields.io/pypi/l/geolysis?style=flat&logo=opensourceinitiative)](https://opensource.org/license/mit/)
11
12
 
@@ -85,106 +86,97 @@ Here are brief descriptions of these projects:
85
86
 
86
87
  ## Installation
87
88
 
88
- **_Note: Work on the latest update is still in progress, so the usage example
89
- below
90
- will not function if installed._**
91
-
92
89
  ```shell
93
- pip install geolysis
90
+ $ pip install geolysis
94
91
  ```
95
92
 
96
93
  ## Usage Example
97
94
 
98
95
  ```python
99
96
 
100
- >> > from geolysis.soil_classifier import create_soil_classifier
101
- >> > uscs_clf = create_soil_classifier(liquid_limit=34.1,
102
- ...
103
- plastic_limit = 21.1,
104
- ...
105
- fines = 47.88,
106
- ...
107
- sand = 37.84,
108
- ...
109
- clf_type = "USCS")
110
- >> > clf = uscs_clf.classify()
111
- >> > clf
97
+ >>> from geolysis.soil_classifier import create_soil_classifier
98
+ >>> uscs_clf = create_soil_classifier(liquid_limit=34.1,
99
+ ... plastic_limit=21.1,
100
+ ... fines=47.88,
101
+ ... sand=37.84,
102
+ ... clf_type="USCS")
103
+ >>> clf = uscs_clf.classify()
104
+ >>> clf
112
105
  SoilClf(symbol='SC', description='Clayey sands')
113
- >> > clf.symbol
106
+ >>> clf.symbol
114
107
  'SC'
115
- >> > clf.description
108
+ >>> clf.description
116
109
  'Clayey sands'
117
110
 
118
111
  ```
119
112
 
120
113
  ```python
121
114
 
122
- >> > from geolysis.soil_classifier import create_soil_classifier
123
- >> > aashto_clf = create_soil_classifier(liquid_limit=34.1,
124
- ...
125
- plastic_limit = 21.1,
126
- ...
127
- fines = 47.88,
128
- ...
129
- sand = 37.84, # Sand is optional for AASHTO classification
130
- ...
131
- clf_type = "AASHTO")
132
- >> > clf = aashto_clf.classify()
133
- >> > clf
115
+ >>> from geolysis.soil_classifier import create_soil_classifier
116
+ >>> aashto_clf = create_soil_classifier(liquid_limit=34.1,
117
+ ... plastic_limit=21.1,
118
+ ... fines=47.88,
119
+ ... sand=37.84, # Sand is optional for AASHTO classification
120
+ ... clf_type="AASHTO")
121
+ >>> clf = aashto_clf.classify()
122
+ >>> clf
134
123
  SoilClf(symbol='A-6(4)', description='Clayey soils')
135
- >> > clf.symbol
124
+ >>> clf.symbol
136
125
  'A-6(4)'
137
- >> > clf.description
126
+ >>> clf.description
138
127
  'Clayey soils'
139
128
 
140
129
  ```
141
130
 
131
+ Check out more examples
132
+ [here](https://docs.geolysis.io/en/latest/user_guide/getting_started.html#quick-start)
133
+
142
134
  ## Features
143
135
 
144
136
  <table>
145
- <tr>
146
- <td rowspan="2">
147
- <strong>Soil Classification</strong>
148
- </td>
149
- <td>AASHTO Classification System</td>
150
- </tr>
151
- <tr>
152
- <td>Unified Soil Classification System</td>
153
- </tr>
154
- <tr>
155
- <td rowspan="4">
156
- <strong>Standard Penetration Test (SPT) Analysis</strong>
157
- </td>
158
- <td>SPT Energy Correction</td>
159
- </tr>
160
- <tr>
161
- <td>SPT Overburden Pressure Correction</td>
162
- </tr>
163
- <tr>
164
- <td>Dilatancy Correction</td>
165
- </tr>
166
- <tr>
167
- <td>SPT N-Design Calculation</td>
168
- </tr>
169
- <tr>
170
- <td rowspan="2">
171
- <strong>Bearing Capacity Estimation</strong>
172
- </td>
173
- <td>Allowable Bearing Capacity Estimation</td>
174
- </tr>
175
- <tr>
176
- <td>Ultimate Bearing Capacity Estimation</td>
177
- </tr>
137
+ <tr>
138
+ <td><strong>Soil Classification</strong></td>
139
+ <td>AASHTO Classification System</td>
140
+ </tr>
141
+ <tr>
142
+ <td></td>
143
+ <td>Unified Soil Classification System</td>
144
+ </tr>
145
+ <tr>
146
+ <td><strong>Standard Penetration Test (SPT) Analysis</strong></td>
147
+ <td>SPT Energy Correction</td>
148
+ </tr>
149
+ <tr>
150
+ <td></td>
151
+ <td>SPT Overburden Pressure Correction</td>
152
+ </tr>
153
+ <tr>
154
+ <td></td>
155
+ <td>Dilatancy Correction</td>
156
+ </tr>
157
+ <tr>
158
+ <td></td>
159
+ <td>SPT N-Design Calculation</td>
160
+ </tr>
161
+ <tr>
162
+ <td><strong>Bearing Capacity Estimation</strong></td>
163
+ <td>Allowable Bearing Capacity Estimation</td>
164
+ </tr>
165
+ <tr>
166
+ <td></td>
167
+ <td>Ultimate Bearing Capacity Estimation</td>
168
+ </tr>
178
169
  </table>
179
170
 
180
171
  ## Documentation
181
172
 
182
- Full documentation is available [here](https://www.geolysis.readthedocs.io)
183
-
184
- **_Note: Work on the latest documentation is still ongoing._**
173
+ Full documentation is available [here](https://docs.geolysis.io/en/latest/)
185
174
 
186
175
  ## Contributing
187
176
 
177
+ Contribution guidelines can be
178
+ found [here](https://docs.geolysis.io/en/latest/dev_guide/index.html)
179
+
188
180
  ## License
189
181
 
190
182
  This project is licensed under the MIT License - see the
@@ -0,0 +1,5 @@
1
+ from . import foundation, soil_classifier, spt
2
+
3
+ __version__ = "0.4.4"
4
+
5
+ __all__ = ["foundation", "soil_classifier", "spt"]
File without changes
@@ -0,0 +1,206 @@
1
+ """ Allowable bearing capacity package for cohesionless soils.
2
+
3
+ Exceptions
4
+ ==========
5
+
6
+ .. autosummary::
7
+ :toctree: _autosummary
8
+
9
+ SettlementError
10
+
11
+ Enums
12
+ =====
13
+
14
+ .. autosummary::
15
+ :toctree: _autosummary
16
+ :nosignatures:
17
+
18
+ ABC_TYPE
19
+
20
+ Functions
21
+ =========
22
+
23
+ .. autosummary::
24
+ :toctree: _autosummary
25
+
26
+ create_allowable_bearing_capacity
27
+ """
28
+ import enum
29
+ from abc import ABC, abstractmethod
30
+ from typing import Optional
31
+
32
+ from geolysis.foundation import (FoundationSize,
33
+ Shape,
34
+ FoundationType,
35
+ create_foundation)
36
+ from geolysis.utils import inf, enum_repr, validators
37
+
38
+
39
+ class SettlementError(ValueError):
40
+ """Raised when tolerable settlement is greater than the maximum
41
+ allowable settlement.
42
+ """
43
+
44
+
45
+ class AllowableBearingCapacity(ABC):
46
+ #: Maximum tolerable foundation settlement (mm).
47
+ MAX_TOL_SETTLEMENT = 25.4
48
+
49
+ def __init__(self, corrected_spt_n_value: float,
50
+ tol_settlement: float,
51
+ foundation_size: FoundationSize) -> None:
52
+ self.corrected_spt_n_value = corrected_spt_n_value
53
+ self.tol_settlement = tol_settlement
54
+ self.foundation_size = foundation_size
55
+
56
+ @property
57
+ def corrected_spt_n_value(self) -> float:
58
+ return self._corrected_spt_n_value
59
+
60
+ @corrected_spt_n_value.setter
61
+ @validators.ge(0.0)
62
+ def corrected_spt_n_value(self, val: float) -> None:
63
+ self._corrected_spt_n_value = val
64
+
65
+ @property
66
+ def tol_settlement(self) -> float:
67
+ return self._tol_settlement
68
+
69
+ @tol_settlement.setter
70
+ @validators.le(25.4, exc_type=SettlementError)
71
+ def tol_settlement(self, tol_settlement: float) -> None:
72
+ self._tol_settlement = tol_settlement
73
+
74
+ def _sr(self) -> float:
75
+ """Calculate the settlement ratio."""
76
+ return self.tol_settlement / self.MAX_TOL_SETTLEMENT
77
+
78
+ def _fd(self) -> float:
79
+ """Calculate the depth factor."""
80
+ depth = self.foundation_size.depth
81
+ width = self.foundation_size.width
82
+
83
+ return min(1.0 + 0.33 * depth / width, 1.33)
84
+
85
+ @abstractmethod
86
+ def bearing_capacity(self): ...
87
+
88
+
89
+ from . import bowles_abc, terzaghi_abc, meyerhof_abc
90
+
91
+ from .bowles_abc import BowlesABC4MatFoundation, BowlesABC4PadFoundation
92
+ from .meyerhof_abc import MeyerhofABC4MatFoundation, MeyerhofABC4PadFoundation
93
+ from .terzaghi_abc import TerzaghiABC4MatFoundation, TerzaghiABC4PadFoundation
94
+
95
+
96
+ @enum_repr
97
+ class ABC_TYPE(enum.StrEnum):
98
+ """Enumeration of available allowable bearing capacity types."""
99
+ BOWLES = enum.auto()
100
+ MEYERHOF = enum.auto()
101
+ TERZAGHI = enum.auto()
102
+
103
+
104
+ def create_allowable_bearing_capacity(corrected_spt_n_value: float,
105
+ tol_settlement: float,
106
+ depth: float,
107
+ width: float,
108
+ length: Optional[float] = None,
109
+ eccentricity: float = 0.0,
110
+ ground_water_level: float = inf,
111
+ shape: Shape | str = Shape.SQUARE,
112
+ foundation_type: FoundationType | str = \
113
+ FoundationType.PAD,
114
+ abc_type: Optional[
115
+ ABC_TYPE | str] = None,
116
+ ) -> AllowableBearingCapacity:
117
+ """ A factory function that encapsulate the creation of allowable bearing
118
+ capacities.
119
+
120
+ :param corrected_spt_n_value: The corrected SPT N-value.
121
+ :type corrected_spt_n_value: float
122
+
123
+ :param tol_settlement: Tolerable settlement of foundation (mm).
124
+ :type tol_settlement: float
125
+
126
+ :param depth: Depth of foundation (m).
127
+ :type depth: float
128
+
129
+ :param width: Width of foundation footing (m).
130
+ :type width: float
131
+
132
+ :param length: Length of foundation footing (m).
133
+ :type length: float, optional
134
+
135
+ :param eccentricity: The deviation of the foundation load from the center
136
+ of gravity of the foundation footing, defaults to 0.0.
137
+ This means that the foundation load aligns with the
138
+ center of gravity of the foundation footing (m).
139
+ :type eccentricity: float, optional
140
+
141
+ :param ground_water_level: Depth of water below ground level (m).
142
+ :type ground_water_level: float
143
+
144
+ :param shape: Shape of foundation footing, defaults to "SQUARE".
145
+ :type shape: str, optional
146
+
147
+ :param foundation_type: Type of foundation, defaults to "pad".
148
+ :type foundation_type: FoundationType | str, optional
149
+
150
+ :param abc_type: Type of allowable bearing capacity calculation to apply.
151
+ Available values can be found in :class:`ABC_TYPE`,
152
+ defaults to None.
153
+ :type abc_type: ABC_TYPE | str
154
+
155
+ :raises ValueError: Raised if abc_type or foundation_type is not supported.
156
+ :raises ValueError: Raised when length is not provided for a rectangular
157
+ footing.
158
+ :raises ValueError: Raised if an invalid footing shape is provided.
159
+ """
160
+ msg = (f"{abc_type = } is not supported, Supported "
161
+ f"types are: {list(ABC_TYPE)}")
162
+
163
+ if abc_type is None:
164
+ raise ValueError(msg)
165
+
166
+ try:
167
+ abc_type = ABC_TYPE(str(abc_type).casefold())
168
+ except ValueError as e:
169
+ raise ValueError(msg) from e
170
+
171
+ msg = (f"{foundation_type = } is not supported, Supported "
172
+ f"types are: {list(FoundationType)}")
173
+
174
+ try:
175
+ foundation_type = FoundationType(str(foundation_type).casefold())
176
+ except ValueError as e:
177
+ raise ValueError(msg) from e
178
+
179
+ # exception from create_foundation will automaatically propagate
180
+ # no need to catch and handle it.
181
+ fnd_size = create_foundation(depth=depth,
182
+ width=width,
183
+ length=length,
184
+ eccentricity=eccentricity,
185
+ ground_water_level=ground_water_level,
186
+ shape=shape)
187
+ abc_classes = {
188
+ ABC_TYPE.BOWLES: {
189
+ FoundationType.PAD: BowlesABC4PadFoundation,
190
+ FoundationType.MAT: BowlesABC4MatFoundation,
191
+ },
192
+ ABC_TYPE.MEYERHOF: {
193
+ FoundationType.PAD: MeyerhofABC4PadFoundation,
194
+ FoundationType.MAT: MeyerhofABC4MatFoundation,
195
+ },
196
+ ABC_TYPE.TERZAGHI: {
197
+ FoundationType.PAD: TerzaghiABC4PadFoundation,
198
+ FoundationType.MAT: TerzaghiABC4MatFoundation,
199
+ }
200
+ }
201
+
202
+ abc_class = abc_classes[abc_type][foundation_type]
203
+ abc = abc_class(corrected_spt_n_value=corrected_spt_n_value,
204
+ tol_settlement=tol_settlement,
205
+ foundation_size=fnd_size)
206
+ return abc