RS3Scripting 4.42.0__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.
Files changed (393) hide show
  1. rs3/ApplicationManager.py +77 -0
  2. rs3/ColorPicker.py +123 -0
  3. rs3/CommonEnums.py +16 -0
  4. rs3/Compute.py +105 -0
  5. rs3/ExternalVolume.py +48 -0
  6. rs3/Geometry.py +74 -0
  7. rs3/Model.py +795 -0
  8. rs3/ModelEnums.py +9 -0
  9. rs3/RS3Modeler.py +109 -0
  10. rs3/Restraints.py +91 -0
  11. rs3/Selection.py +123 -0
  12. rs3/__init__.py +18 -0
  13. rs3/_client.py +57 -0
  14. rs3/_proxyObject.py +5 -0
  15. rs3/generatedFiles/BFPCommonMessage_pb2.py +38 -0
  16. rs3/generatedFiles/BFPCommonMessage_pb2.pyi +47 -0
  17. rs3/generatedFiles/BFPCommonMessage_pb2_grpc.py +24 -0
  18. rs3/generatedFiles/BeamDataService_pb2.py +37 -0
  19. rs3/generatedFiles/BeamDataService_pb2.pyi +5 -0
  20. rs3/generatedFiles/BeamDataService_pb2_grpc.py +226 -0
  21. rs3/generatedFiles/BeamService_pb2.py +37 -0
  22. rs3/generatedFiles/BeamService_pb2.pyi +5 -0
  23. rs3/generatedFiles/BeamService_pb2_grpc.py +140 -0
  24. rs3/generatedFiles/BeamStageFactorService_pb2.py +37 -0
  25. rs3/generatedFiles/BeamStageFactorService_pb2.pyi +5 -0
  26. rs3/generatedFiles/BeamStageFactorService_pb2_grpc.py +140 -0
  27. rs3/generatedFiles/BeamsResultsQueryService_pb2.py +50 -0
  28. rs3/generatedFiles/BeamsResultsQueryService_pb2.pyi +48 -0
  29. rs3/generatedFiles/BeamsResultsQueryService_pb2_grpc.py +141 -0
  30. rs3/generatedFiles/BoltDataService_pb2.py +37 -0
  31. rs3/generatedFiles/BoltDataService_pb2.pyi +5 -0
  32. rs3/generatedFiles/BoltDataService_pb2_grpc.py +226 -0
  33. rs3/generatedFiles/BoltService_pb2.py +37 -0
  34. rs3/generatedFiles/BoltService_pb2.pyi +5 -0
  35. rs3/generatedFiles/BoltService_pb2_grpc.py +140 -0
  36. rs3/generatedFiles/BoltsResultsQueryService_pb2.py +51 -0
  37. rs3/generatedFiles/BoltsResultsQueryService_pb2.pyi +75 -0
  38. rs3/generatedFiles/BoltsResultsQueryService_pb2_grpc.py +141 -0
  39. rs3/generatedFiles/ClientService_pb2.py +40 -0
  40. rs3/generatedFiles/ClientService_pb2.pyi +15 -0
  41. rs3/generatedFiles/ClientService_pb2_grpc.py +97 -0
  42. rs3/generatedFiles/CommonGeometryMessages_pb2.py +52 -0
  43. rs3/generatedFiles/CommonGeometryMessages_pb2.pyi +92 -0
  44. rs3/generatedFiles/CommonGeometryMessages_pb2_grpc.py +24 -0
  45. rs3/generatedFiles/CommonMessages_pb2.py +66 -0
  46. rs3/generatedFiles/CommonMessages_pb2.pyi +145 -0
  47. rs3/generatedFiles/CommonMessages_pb2_grpc.py +24 -0
  48. rs3/generatedFiles/CompositeLinerDataService_pb2.py +47 -0
  49. rs3/generatedFiles/CompositeLinerDataService_pb2.pyi +51 -0
  50. rs3/generatedFiles/CompositeLinerDataService_pb2_grpc.py +227 -0
  51. rs3/generatedFiles/CompositeLinerResultsQueryService_pb2.py +63 -0
  52. rs3/generatedFiles/CompositeLinerResultsQueryService_pb2.pyi +139 -0
  53. rs3/generatedFiles/CompositeLinerResultsQueryService_pb2_grpc.py +314 -0
  54. rs3/generatedFiles/CompositeLinerService_pb2.py +37 -0
  55. rs3/generatedFiles/CompositeLinerService_pb2.pyi +5 -0
  56. rs3/generatedFiles/CompositeLinerService_pb2_grpc.py +140 -0
  57. rs3/generatedFiles/ComputeService_pb2.py +48 -0
  58. rs3/generatedFiles/ComputeService_pb2.pyi +56 -0
  59. rs3/generatedFiles/ComputeService_pb2_grpc.py +147 -0
  60. rs3/generatedFiles/ExternalVolumesService_pb2.py +45 -0
  61. rs3/generatedFiles/ExternalVolumesService_pb2.pyi +34 -0
  62. rs3/generatedFiles/ExternalVolumesService_pb2_grpc.py +270 -0
  63. rs3/generatedFiles/FieldStressService_pb2.py +37 -0
  64. rs3/generatedFiles/FieldStressService_pb2.pyi +5 -0
  65. rs3/generatedFiles/FieldStressService_pb2_grpc.py +140 -0
  66. rs3/generatedFiles/FieldStressSourceService_pb2.py +85 -0
  67. rs3/generatedFiles/FieldStressSourceService_pb2.pyi +182 -0
  68. rs3/generatedFiles/FieldStressSourceService_pb2_grpc.py +657 -0
  69. rs3/generatedFiles/GaussPointFailureMessage_pb2.py +37 -0
  70. rs3/generatedFiles/GaussPointFailureMessage_pb2.pyi +14 -0
  71. rs3/generatedFiles/GaussPointFailureMessage_pb2_grpc.py +24 -0
  72. rs3/generatedFiles/HydraulicStageFactorService_pb2.py +45 -0
  73. rs3/generatedFiles/HydraulicStageFactorService_pb2.pyi +36 -0
  74. rs3/generatedFiles/HydraulicStageFactorService_pb2_grpc.py +227 -0
  75. rs3/generatedFiles/JointDataService_pb2.py +45 -0
  76. rs3/generatedFiles/JointDataService_pb2.pyi +30 -0
  77. rs3/generatedFiles/JointDataService_pb2_grpc.py +313 -0
  78. rs3/generatedFiles/JointResultsQueryService_pb2.py +54 -0
  79. rs3/generatedFiles/JointResultsQueryService_pb2.pyi +92 -0
  80. rs3/generatedFiles/JointResultsQueryService_pb2_grpc.py +141 -0
  81. rs3/generatedFiles/JointService_pb2.py +45 -0
  82. rs3/generatedFiles/JointService_pb2.pyi +30 -0
  83. rs3/generatedFiles/JointService_pb2_grpc.py +227 -0
  84. rs3/generatedFiles/JointStageFactorService_pb2.py +37 -0
  85. rs3/generatedFiles/JointStageFactorService_pb2.pyi +5 -0
  86. rs3/generatedFiles/JointStageFactorService_pb2_grpc.py +140 -0
  87. rs3/generatedFiles/LinerDataService_pb2.py +37 -0
  88. rs3/generatedFiles/LinerDataService_pb2.pyi +5 -0
  89. rs3/generatedFiles/LinerDataService_pb2_grpc.py +226 -0
  90. rs3/generatedFiles/LinerService_pb2.py +37 -0
  91. rs3/generatedFiles/LinerService_pb2.pyi +5 -0
  92. rs3/generatedFiles/LinerService_pb2_grpc.py +140 -0
  93. rs3/generatedFiles/LinerStageFactorService_pb2.py +37 -0
  94. rs3/generatedFiles/LinerStageFactorService_pb2.pyi +5 -0
  95. rs3/generatedFiles/LinerStageFactorService_pb2_grpc.py +140 -0
  96. rs3/generatedFiles/MaterialDataService_pb2.py +37 -0
  97. rs3/generatedFiles/MaterialDataService_pb2.pyi +5 -0
  98. rs3/generatedFiles/MaterialDataService_pb2_grpc.py +226 -0
  99. rs3/generatedFiles/MaterialDatumService_pb2.py +45 -0
  100. rs3/generatedFiles/MaterialDatumService_pb2.pyi +38 -0
  101. rs3/generatedFiles/MaterialDatumService_pb2_grpc.py +140 -0
  102. rs3/generatedFiles/MaterialHydraulicDataService_pb2.py +93 -0
  103. rs3/generatedFiles/MaterialHydraulicDataService_pb2.pyi +193 -0
  104. rs3/generatedFiles/MaterialHydraulicDataService_pb2_grpc.py +829 -0
  105. rs3/generatedFiles/MaterialHydraulicModelService_pb2.py +55 -0
  106. rs3/generatedFiles/MaterialHydraulicModelService_pb2.pyi +79 -0
  107. rs3/generatedFiles/MaterialHydraulicModelService_pb2_grpc.py +313 -0
  108. rs3/generatedFiles/MaterialInitialConditionsService_pb2.py +37 -0
  109. rs3/generatedFiles/MaterialInitialConditionsService_pb2.pyi +5 -0
  110. rs3/generatedFiles/MaterialInitialConditionsService_pb2_grpc.py +140 -0
  111. rs3/generatedFiles/MaterialJointService_pb2.py +49 -0
  112. rs3/generatedFiles/MaterialJointService_pb2.pyi +52 -0
  113. rs3/generatedFiles/MaterialJointService_pb2_grpc.py +183 -0
  114. rs3/generatedFiles/MaterialJointSetSlipCriterionService_pb2.py +69 -0
  115. rs3/generatedFiles/MaterialJointSetSlipCriterionService_pb2.pyi +130 -0
  116. rs3/generatedFiles/MaterialJointSetSlipCriterionService_pb2_grpc.py +398 -0
  117. rs3/generatedFiles/MaterialJointStageFactorService_pb2.py +45 -0
  118. rs3/generatedFiles/MaterialJointStageFactorService_pb2.pyi +42 -0
  119. rs3/generatedFiles/MaterialJointStageFactorService_pb2_grpc.py +140 -0
  120. rs3/generatedFiles/MaterialStageFactorsService_pb2.py +37 -0
  121. rs3/generatedFiles/MaterialStageFactorsService_pb2.pyi +5 -0
  122. rs3/generatedFiles/MaterialStageFactorsService_pb2_grpc.py +140 -0
  123. rs3/generatedFiles/MaterialStiffnessFormulaService_pb2.py +47 -0
  124. rs3/generatedFiles/MaterialStiffnessFormulaService_pb2.pyi +54 -0
  125. rs3/generatedFiles/MaterialStiffnessFormulaService_pb2_grpc.py +140 -0
  126. rs3/generatedFiles/MaterialStiffnessService_pb2.py +53 -0
  127. rs3/generatedFiles/MaterialStiffnessService_pb2.pyi +66 -0
  128. rs3/generatedFiles/MaterialStiffnessService_pb2_grpc.py +313 -0
  129. rs3/generatedFiles/MaterialStrengthService_pb2.py +105 -0
  130. rs3/generatedFiles/MaterialStrengthService_pb2.pyi +243 -0
  131. rs3/generatedFiles/MaterialStrengthService_pb2_grpc.py +833 -0
  132. rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2.py +47 -0
  133. rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2.pyi +43 -0
  134. rs3/generatedFiles/MaterialUnsaturatedSoilDataService_pb2_grpc.py +228 -0
  135. rs3/generatedFiles/MeshSettingsService_pb2.py +41 -0
  136. rs3/generatedFiles/MeshSettingsService_pb2.pyi +16 -0
  137. rs3/generatedFiles/MeshSettingsService_pb2_grpc.py +184 -0
  138. rs3/generatedFiles/ModelFunctionService_pb2.py +119 -0
  139. rs3/generatedFiles/ModelFunctionService_pb2.pyi +331 -0
  140. rs3/generatedFiles/ModelFunctionService_pb2_grpc.py +871 -0
  141. rs3/generatedFiles/ModelService_pb2.py +342 -0
  142. rs3/generatedFiles/ModelService_pb2.pyi +962 -0
  143. rs3/generatedFiles/ModelService_pb2_grpc.py +3322 -0
  144. rs3/generatedFiles/PileDataService_pb2.py +55 -0
  145. rs3/generatedFiles/PileDataService_pb2.pyi +63 -0
  146. rs3/generatedFiles/PileDataService_pb2_grpc.py +399 -0
  147. rs3/generatedFiles/PileForepoleResultsQueryService_pb2.py +51 -0
  148. rs3/generatedFiles/PileForepoleResultsQueryService_pb2.pyi +63 -0
  149. rs3/generatedFiles/PileForepoleResultsQueryService_pb2_grpc.py +141 -0
  150. rs3/generatedFiles/PileStageFactorService_pb2.py +37 -0
  151. rs3/generatedFiles/PileStageFactorService_pb2.pyi +5 -0
  152. rs3/generatedFiles/PileStageFactorService_pb2_grpc.py +140 -0
  153. rs3/generatedFiles/PlainStrandCableBoltService_pb2.py +44 -0
  154. rs3/generatedFiles/PlainStrandCableBoltService_pb2.pyi +30 -0
  155. rs3/generatedFiles/PlainStrandCableBoltService_pb2_grpc.py +140 -0
  156. rs3/generatedFiles/ProjectSettingsDataService_pb2.py +69 -0
  157. rs3/generatedFiles/ProjectSettingsDataService_pb2.pyi +119 -0
  158. rs3/generatedFiles/ProjectSettingsDataService_pb2_grpc.py +786 -0
  159. rs3/generatedFiles/RFCApplicationService_pb2.py +34 -0
  160. rs3/generatedFiles/RFCApplicationService_pb2.pyi +27 -0
  161. rs3/generatedFiles/RFCApplicationService_pb2_grpc.py +145 -0
  162. rs3/generatedFiles/RS3ModelerService_pb2.py +50 -0
  163. rs3/generatedFiles/RS3ModelerService_pb2.pyi +45 -0
  164. rs3/generatedFiles/RS3ModelerService_pb2_grpc.py +183 -0
  165. rs3/generatedFiles/RelativeStageFactorService_pb2.py +40 -0
  166. rs3/generatedFiles/RelativeStageFactorService_pb2.pyi +17 -0
  167. rs3/generatedFiles/RelativeStageFactorService_pb2_grpc.py +97 -0
  168. rs3/generatedFiles/RestraintsService_pb2.py +62 -0
  169. rs3/generatedFiles/RestraintsService_pb2.pyi +84 -0
  170. rs3/generatedFiles/RestraintsService_pb2_grpc.py +312 -0
  171. rs3/generatedFiles/ResultsQueryCommonMessage_pb2.py +56 -0
  172. rs3/generatedFiles/ResultsQueryCommonMessage_pb2.pyi +85 -0
  173. rs3/generatedFiles/ResultsQueryCommonMessage_pb2_grpc.py +24 -0
  174. rs3/generatedFiles/ResultsQueryService_pb2.py +87 -0
  175. rs3/generatedFiles/ResultsQueryService_pb2.pyi +185 -0
  176. rs3/generatedFiles/ResultsQueryService_pb2_grpc.py +745 -0
  177. rs3/generatedFiles/SelectionService_pb2.py +49 -0
  178. rs3/generatedFiles/SelectionService_pb2.pyi +51 -0
  179. rs3/generatedFiles/SelectionService_pb2_grpc.py +269 -0
  180. rs3/generatedFiles/SolidsResultsQueryService_pb2.py +93 -0
  181. rs3/generatedFiles/SolidsResultsQueryService_pb2.pyi +213 -0
  182. rs3/generatedFiles/SolidsResultsQueryService_pb2_grpc.py +195 -0
  183. rs3/generatedFiles/StageFactorService_pb2.py +58 -0
  184. rs3/generatedFiles/StageFactorService_pb2.pyi +79 -0
  185. rs3/generatedFiles/StageFactorService_pb2_grpc.py +226 -0
  186. rs3/generatedFiles/StiffnessStageFactorService_pb2.py +37 -0
  187. rs3/generatedFiles/StiffnessStageFactorService_pb2.pyi +5 -0
  188. rs3/generatedFiles/StiffnessStageFactorService_pb2_grpc.py +140 -0
  189. rs3/generatedFiles/StrengthStageFactorService_pb2.py +37 -0
  190. rs3/generatedFiles/StrengthStageFactorService_pb2.pyi +5 -0
  191. rs3/generatedFiles/StrengthStageFactorService_pb2_grpc.py +140 -0
  192. rs3/generatedFiles/WaterByLocationDataService_pb2.py +61 -0
  193. rs3/generatedFiles/WaterByLocationDataService_pb2.pyi +95 -0
  194. rs3/generatedFiles/WaterByLocationDataService_pb2_grpc.py +312 -0
  195. rs3/generatedFiles/WaterPressureGridDataService_pb2.py +63 -0
  196. rs3/generatedFiles/WaterPressureGridDataService_pb2.pyi +107 -0
  197. rs3/generatedFiles/WaterPressureGridDataService_pb2_grpc.py +312 -0
  198. rs3/generatedFiles/__init__.py +3 -0
  199. rs3/loadings/LoadingEnums.py +6 -0
  200. rs3/loadings/Loadings.py +15 -0
  201. rs3/loadings/__init__.py +0 -0
  202. rs3/loadings/fieldStress/AdvancedConstant.py +115 -0
  203. rs3/loadings/fieldStress/AdvancedGravity.py +176 -0
  204. rs3/loadings/fieldStress/Constant.py +119 -0
  205. rs3/loadings/fieldStress/FieldStress.py +38 -0
  206. rs3/loadings/fieldStress/Gravity.py +206 -0
  207. rs3/loadings/fieldStress/_PropertyAccessor.py +41 -0
  208. rs3/loadings/fieldStress/__init__.py +0 -0
  209. rs3/mesh/Graded.py +59 -0
  210. rs3/mesh/Mesh.py +50 -0
  211. rs3/mesh/MeshEnums.py +16 -0
  212. rs3/mesh/Uniform.py +35 -0
  213. rs3/mesh/_PropertyAccessor.py +10 -0
  214. rs3/mesh/__init__.py +0 -0
  215. rs3/projectSettings/Dynamic.py +110 -0
  216. rs3/projectSettings/Groundwater.py +118 -0
  217. rs3/projectSettings/ProjectSettingEnums.py +108 -0
  218. rs3/projectSettings/ProjectSettings.py +43 -0
  219. rs3/projectSettings/ShearStrengthReduction.py +130 -0
  220. rs3/projectSettings/SolverOptions.py +88 -0
  221. rs3/projectSettings/Stages.py +162 -0
  222. rs3/projectSettings/StressAnalysis.py +183 -0
  223. rs3/projectSettings/Units.py +82 -0
  224. rs3/projectSettings/_PropertyAccessor.py +133 -0
  225. rs3/projectSettings/__init__.py +0 -0
  226. rs3/properties/CustomHydraulicModel.py +129 -0
  227. rs3/properties/DiscreteFunction.py +147 -0
  228. rs3/properties/GeneralizedAnisotropicFunction.py +98 -0
  229. rs3/properties/IPropertyGroupAccessors.py +12 -0
  230. rs3/properties/PropertyEnums.py +387 -0
  231. rs3/properties/ShearNormalFunction.py +94 -0
  232. rs3/properties/SnowdenStrengthFunction.py +115 -0
  233. rs3/properties/_PropertyAccessor.py +111 -0
  234. rs3/properties/__init__.py +0 -0
  235. rs3/properties/beam/Beam.py +86 -0
  236. rs3/properties/beam/BeamCommon.py +175 -0
  237. rs3/properties/beam/Standard.py +97 -0
  238. rs3/properties/beam/Truss.py +23 -0
  239. rs3/properties/beam/_PropertyAccessor.py +9 -0
  240. rs3/properties/beam/__init__.py +0 -0
  241. rs3/properties/bolt/Bolt.py +81 -0
  242. rs3/properties/bolt/EndAnchored.py +77 -0
  243. rs3/properties/bolt/FullyBonded.py +78 -0
  244. rs3/properties/bolt/PlainStrandCable.py +151 -0
  245. rs3/properties/bolt/Swellex.py +106 -0
  246. rs3/properties/bolt/Tieback.py +176 -0
  247. rs3/properties/bolt/_PropertyAccessor.py +7 -0
  248. rs3/properties/bolt/__init__.py +0 -0
  249. rs3/properties/groundwater/WaterByLocation.py +83 -0
  250. rs3/properties/groundwater/WaterGrid.py +120 -0
  251. rs3/properties/groundwater/_PropertyAccessor.py +36 -0
  252. rs3/properties/groundwater/__init__.py +0 -0
  253. rs3/properties/joint/BartonBandis.py +118 -0
  254. rs3/properties/joint/GeosyntheticHyperbolic.py +158 -0
  255. rs3/properties/joint/Joint.py +176 -0
  256. rs3/properties/joint/MaterialDependent.py +107 -0
  257. rs3/properties/joint/MohrCoulomb.py +169 -0
  258. rs3/properties/joint/NoneSlip.py +68 -0
  259. rs3/properties/joint/_PropertyAccessor.py +9 -0
  260. rs3/properties/joint/__init__.py +0 -0
  261. rs3/properties/liner/Geosynthetic.py +85 -0
  262. rs3/properties/liner/Liner.py +83 -0
  263. rs3/properties/liner/ReinforcedConcrete.py +216 -0
  264. rs3/properties/liner/Standard.py +183 -0
  265. rs3/properties/liner/_PropertyAccessor.py +7 -0
  266. rs3/properties/liner/__init__.py +0 -0
  267. rs3/properties/liningComposition/LiningComposition.py +244 -0
  268. rs3/properties/liningComposition/_PropertyAccessor.py +7 -0
  269. rs3/properties/liningComposition/__init__.py +0 -0
  270. rs3/properties/material/Material.py +74 -0
  271. rs3/properties/material/__init__.py +0 -0
  272. rs3/properties/material/constitutiveModel/AnisotropicLinear.py +149 -0
  273. rs3/properties/material/constitutiveModel/AnisotropicLinearPlanarBase.py +72 -0
  274. rs3/properties/material/constitutiveModel/BarcelonaBasic.py +158 -0
  275. rs3/properties/material/constitutiveModel/BartonBandis.py +77 -0
  276. rs3/properties/material/constitutiveModel/BaseConstitutiveModel.py +11 -0
  277. rs3/properties/material/constitutiveModel/BoundingSurfacePlasticity.py +88 -0
  278. rs3/properties/material/constitutiveModel/CamClay.py +144 -0
  279. rs3/properties/material/constitutiveModel/ChSoil.py +111 -0
  280. rs3/properties/material/constitutiveModel/ConstitutiveModel.py +87 -0
  281. rs3/properties/material/constitutiveModel/CySoil.py +137 -0
  282. rs3/properties/material/constitutiveModel/DiscreteFunction.py +39 -0
  283. rs3/properties/material/constitutiveModel/DoubleYield.py +130 -0
  284. rs3/properties/material/constitutiveModel/DruckerPrager.py +136 -0
  285. rs3/properties/material/constitutiveModel/GeneralizedAnisotropic.py +39 -0
  286. rs3/properties/material/constitutiveModel/GeneralizedHoekBrown.py +226 -0
  287. rs3/properties/material/constitutiveModel/HardeningSoil.py +156 -0
  288. rs3/properties/material/constitutiveModel/HardeningSoilWithSmallStrain.py +170 -0
  289. rs3/properties/material/constitutiveModel/HoekBrown.py +125 -0
  290. rs3/properties/material/constitutiveModel/Hyperbolic.py +77 -0
  291. rs3/properties/material/constitutiveModel/JointedGeneralizedHoekBrown.py +184 -0
  292. rs3/properties/material/constitutiveModel/JointedMohrCoulomb.py +173 -0
  293. rs3/properties/material/constitutiveModel/ManzariAndDafalias.py +148 -0
  294. rs3/properties/material/constitutiveModel/ModifiedCamClay.py +11 -0
  295. rs3/properties/material/constitutiveModel/MohrCoulomb.py +147 -0
  296. rs3/properties/material/constitutiveModel/MohrCoulombUnsaturatedZoneCalculations.py +80 -0
  297. rs3/properties/material/constitutiveModel/MohrCoulombWithCap.py +154 -0
  298. rs3/properties/material/constitutiveModel/Norsand.py +146 -0
  299. rs3/properties/material/constitutiveModel/PowerCurve.py +119 -0
  300. rs3/properties/material/constitutiveModel/Shansep.py +214 -0
  301. rs3/properties/material/constitutiveModel/ShearNormalFunction.py +34 -0
  302. rs3/properties/material/constitutiveModel/SnowdenAnisotropicLinear.py +108 -0
  303. rs3/properties/material/constitutiveModel/SoftSoil.py +104 -0
  304. rs3/properties/material/constitutiveModel/SoftSoilCreep.py +111 -0
  305. rs3/properties/material/constitutiveModel/SofteningHardening.py +214 -0
  306. rs3/properties/material/constitutiveModel/SwellingRock.py +202 -0
  307. rs3/properties/material/constitutiveModel/UnsaturatedZoneCalculations.py +138 -0
  308. rs3/properties/material/constitutiveModel/VerticalStressRatio.py +113 -0
  309. rs3/properties/material/constitutiveModel/_PropertyAccessor.py +96 -0
  310. rs3/properties/material/constitutiveModel/__init__.py +0 -0
  311. rs3/properties/material/constitutiveModel/jointOption/BartonBandis.py +109 -0
  312. rs3/properties/material/constitutiveModel/jointOption/MaterialJoint.py +48 -0
  313. rs3/properties/material/constitutiveModel/jointOption/MaterialJointOptions.py +32 -0
  314. rs3/properties/material/constitutiveModel/jointOption/MohrCoulomb.py +142 -0
  315. rs3/properties/material/constitutiveModel/jointOption/PlaneOrientationBase.py +92 -0
  316. rs3/properties/material/constitutiveModel/jointOption/SimpleHyperbolic.py +112 -0
  317. rs3/properties/material/constitutiveModel/jointOption/_PropertyAccessor.py +61 -0
  318. rs3/properties/material/constitutiveModel/jointOption/__init__.py +0 -0
  319. rs3/properties/material/constitutiveModel/stiffness/BaseStiffness.py +11 -0
  320. rs3/properties/material/constitutiveModel/stiffness/DuncanChangHyperbolic.py +128 -0
  321. rs3/properties/material/constitutiveModel/stiffness/GeneralizedHoekBrownEstimation.py +50 -0
  322. rs3/properties/material/constitutiveModel/stiffness/LinearIsotropic.py +106 -0
  323. rs3/properties/material/constitutiveModel/stiffness/NonlinearIsotropic.py +104 -0
  324. rs3/properties/material/constitutiveModel/stiffness/Orthotropic.py +296 -0
  325. rs3/properties/material/constitutiveModel/stiffness/TransverselyIsotropic.py +186 -0
  326. rs3/properties/material/constitutiveModel/stiffness/_PropertyAccessor.py +33 -0
  327. rs3/properties/material/constitutiveModel/stiffness/__init__.py +0 -0
  328. rs3/properties/material/constitutiveModel/stiffness/formula/Formula1.py +96 -0
  329. rs3/properties/material/constitutiveModel/stiffness/formula/Formula2.py +136 -0
  330. rs3/properties/material/constitutiveModel/stiffness/formula/Formula3.py +113 -0
  331. rs3/properties/material/constitutiveModel/stiffness/formula/_PropertyAccessor.py +37 -0
  332. rs3/properties/material/constitutiveModel/stiffness/formula/__init__.py +0 -0
  333. rs3/properties/material/datum/CohesionDatumDependency.py +99 -0
  334. rs3/properties/material/datum/Datum.py +23 -0
  335. rs3/properties/material/datum/FrictionAngleDatumDependency.py +99 -0
  336. rs3/properties/material/datum/YoungsModulusDatumDependency.py +78 -0
  337. rs3/properties/material/datum/_PropertyAccessor.py +26 -0
  338. rs3/properties/material/datum/__init__.py +0 -0
  339. rs3/properties/material/hydraulic/FEAGroundwater/Brooks.py +71 -0
  340. rs3/properties/material/hydraulic/FEAGroundwater/Custom.py +79 -0
  341. rs3/properties/material/hydraulic/FEAGroundwater/FEAGroundwater.py +85 -0
  342. rs3/properties/material/hydraulic/FEAGroundwater/Fredlund.py +82 -0
  343. rs3/properties/material/hydraulic/FEAGroundwater/Gardner.py +72 -0
  344. rs3/properties/material/hydraulic/FEAGroundwater/HydraulicMethodVectors.py +97 -0
  345. rs3/properties/material/hydraulic/FEAGroundwater/HydraulicParametersCommon.py +157 -0
  346. rs3/properties/material/hydraulic/FEAGroundwater/Simple.py +37 -0
  347. rs3/properties/material/hydraulic/FEAGroundwater/VanGenuchten.py +94 -0
  348. rs3/properties/material/hydraulic/FEAGroundwater/_PropertyAccessor.py +16 -0
  349. rs3/properties/material/hydraulic/FEAGroundwater/__init__.py +0 -0
  350. rs3/properties/material/hydraulic/Hydraulic.py +111 -0
  351. rs3/properties/material/hydraulic/PhreaticConditions.py +37 -0
  352. rs3/properties/material/hydraulic/StaticGroundwater.py +100 -0
  353. rs3/properties/material/hydraulic/WaterConditions.py +110 -0
  354. rs3/properties/material/hydraulic/_PropertyAccessor.py +31 -0
  355. rs3/properties/material/hydraulic/__init__.py +0 -0
  356. rs3/properties/material/initialConditions/InitialConditions.py +108 -0
  357. rs3/properties/material/initialConditions/_PropertyAccessor.py +11 -0
  358. rs3/properties/material/initialConditions/__init__.py +0 -0
  359. rs3/properties/material/stageFactors/StageFactors.py +77 -0
  360. rs3/properties/material/stageFactors/_PropertyAccessor.py +7 -0
  361. rs3/properties/material/stageFactors/__init__.py +0 -0
  362. rs3/properties/pile/EndCondition.py +109 -0
  363. rs3/properties/pile/Linear.py +69 -0
  364. rs3/properties/pile/MohrCoulomb.py +123 -0
  365. rs3/properties/pile/MultiLinear.py +70 -0
  366. rs3/properties/pile/Pile.py +108 -0
  367. rs3/properties/pile/PileCommon.py +99 -0
  368. rs3/properties/pile/_PropertyAccessor.py +9 -0
  369. rs3/properties/pile/__init__.py +0 -0
  370. rs3/properties/stageFactors/IStageFactorBase.py +10 -0
  371. rs3/properties/stageFactors/StageFactorBaseInterfaces.py +24 -0
  372. rs3/properties/stageFactors/StageFactorInterfaces.py +70 -0
  373. rs3/properties/stageFactors/_StageFactorInterface.py +48 -0
  374. rs3/properties/stageFactors/_StageFactorPropertyAccessor.py +18 -0
  375. rs3/properties/stageFactors/__init__.py +0 -0
  376. rs3/results/BeamResults.py +181 -0
  377. rs3/results/BoltResults.py +214 -0
  378. rs3/results/CompositeLinerResults.py +374 -0
  379. rs3/results/JointResults.py +160 -0
  380. rs3/results/PileForepoleResults.py +219 -0
  381. rs3/results/ResultEnums.py +146 -0
  382. rs3/results/Results.py +661 -0
  383. rs3/results/ResultsCommon.py +66 -0
  384. rs3/results/SolidElementResults.py +175 -0
  385. rs3/results/SolidNodalResults.py +248 -0
  386. rs3/results/SolidResults.py +206 -0
  387. rs3/results/YieldedElement.py +33 -0
  388. rs3/results/__init__.py +0 -0
  389. rs3scripting-4.42.0.dist-info/METADATA +70 -0
  390. rs3scripting-4.42.0.dist-info/RECORD +393 -0
  391. rs3scripting-4.42.0.dist-info/WHEEL +5 -0
  392. rs3scripting-4.42.0.dist-info/licenses/License.txt +20 -0
  393. rs3scripting-4.42.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,214 @@
1
+ from typing import Optional, Union, List, Dict, Tuple
2
+
3
+ import rs3.generatedFiles.BoltsResultsQueryService_pb2_grpc as BoltsResultsQueryService_pb2_grpc
4
+
5
+ from rs3._client import Client
6
+
7
+ from rs3.results.ResultsCommon import _ResultsQueryBase, _NodeValuePairCollection
8
+ from rs3.results.YieldedElement import YieldedElement
9
+ from rs3.results.ResultEnums import BoltDataType, BoltGaussPointFailureType
10
+ from rs3.Geometry import Cube, Cylinder, Sphere
11
+
12
+
13
+ class BoltNodeResult:
14
+ def __init__(self, grpcNodalResult):
15
+ self._grpcNodalResult = grpcNodalResult
16
+
17
+ @property
18
+ def NodeID(self):
19
+ return self._grpcNodalResult.nodeInformation.nodeID
20
+
21
+ @property
22
+ def XCoordinate(self):
23
+ return self._grpcNodalResult.nodeInformation.location.x
24
+
25
+ @property
26
+ def YCoordinate(self):
27
+ return self._grpcNodalResult.nodeInformation.location.y
28
+
29
+ @property
30
+ def ZCoordinate(self):
31
+ return self._grpcNodalResult.nodeInformation.location.z
32
+
33
+ @property
34
+ def EntityName(self):
35
+ return self._grpcNodalResult.entityInformation.name
36
+
37
+ @property
38
+ def EntityID(self):
39
+ return self._grpcNodalResult.entityInformation.ID
40
+
41
+ @property
42
+ def BoltIndex(self) -> int:
43
+ '''
44
+ Get the bolt index for this node.
45
+
46
+ The boltIndex is an integer index that identifies which bolt or bolt pattern instance
47
+ this node belongs to. The indexing starts at 1 (1-based).
48
+
49
+ - For a single bolt: The boltIndex is a sequential index (1, 2, 3, ...) that uniquely
50
+ identifies each individual bolt in the model.
51
+ - For a bolt pattern: The boltIndex represents the index of the bolt instance within
52
+ the pattern. All nodes belonging to the same bolt instance in a pattern will
53
+ have the same boltIndex value.
54
+
55
+ Returns:
56
+ int: The bolt index for this node, starting from 1.
57
+ '''
58
+ return self._grpcNodalResult.indexToPattern
59
+
60
+
61
+ class BoltElementResults:
62
+ def __init__(self, grpcElementResults):
63
+ self._grpcElementResults = grpcElementResults
64
+ self._nodeResultsByDataType = self._buildNodeResultsByDataType(grpcElementResults)
65
+ self._yieldedElement = YieldedElement(grpcElementResults.failurePoint, failureTypeEnum=BoltGaussPointFailureType) if grpcElementResults.HasField('failurePoint') else None
66
+
67
+ @property
68
+ def ElementID(self):
69
+ return self._grpcElementResults.elementInformation.elementID
70
+
71
+ @property
72
+ def EntityName(self):
73
+ return self._grpcElementResults.entityInformation.name
74
+
75
+ @property
76
+ def EntityID(self):
77
+ return self._grpcElementResults.entityInformation.ID
78
+
79
+ @property
80
+ def NodeIDs(self):
81
+ return list(self._grpcElementResults.elementInformation.nodeIDs)
82
+
83
+ def getNodeResult(self, dataType: BoltDataType) -> List[float]:
84
+ if dataType not in self._nodeResultsByDataType:
85
+ raise ValueError(f"Data type {dataType} not found")
86
+ return self._nodeResultsByDataType[dataType].ResultValues
87
+
88
+ def getResultsInNodeDataTuple(self, dataType: BoltDataType) -> List[Tuple[int, float]]:
89
+ if dataType not in self._nodeResultsByDataType:
90
+ raise ValueError(f"Data type {dataType} not found")
91
+ return self._nodeResultsByDataType[dataType].NodeValuePairs
92
+
93
+ @property
94
+ def BoltIndex(self) -> int:
95
+ '''
96
+ Get the bolt index for this element.
97
+
98
+ The boltIndex is an integer index that identifies which bolt or bolt pattern instance
99
+ this element belongs to. The indexing starts at 1 (1-based).
100
+
101
+ - For a single bolt: The boltIndex is a sequential index (1, 2, 3, ...) that uniquely
102
+ identifies each individual bolt in the model.
103
+ - For a bolt pattern: The boltIndex represents the index of the bolt instance within
104
+ the pattern. All elements belonging to the same bolt instance in a pattern will
105
+ have the same boltIndex value.
106
+
107
+ Returns:
108
+ int: The bolt index for this element, starting from 1.
109
+ '''
110
+ return self._grpcElementResults.boltID
111
+
112
+ @property
113
+ def YieldedElement(self):
114
+ return self._yieldedElement
115
+
116
+
117
+ def _buildNodeResultsByDataType(self, grpcElementResults):
118
+ nodeIdResultPairs = [(nodeID, nodeValue) for nodeID, nodeValue in zip(grpcElementResults.elementInformation.nodeIDs, grpcElementResults.nodeValues)]
119
+ pairsByType: Dict[BoltDataType, List[tuple[int, float]]] = {dt: [] for dt in BoltDataType}
120
+ for nodeID, nodeValue in nodeIdResultPairs:
121
+ pairsByType[BoltDataType.AXIAL_FORCE].append((nodeID, nodeValue.axisForce))
122
+ pairsByType[BoltDataType.AXIAL_STRESS].append((nodeID, nodeValue.axisStress))
123
+ pairsByType[BoltDataType.DISPLACEMENT_X].append((nodeID, nodeValue.displacementX))
124
+ pairsByType[BoltDataType.DISPLACEMENT_Y].append((nodeID, nodeValue.displacementY))
125
+ pairsByType[BoltDataType.DISPLACEMENT_Z].append((nodeID, nodeValue.displacementZ))
126
+ pairsByType[BoltDataType.DISPLACEMENT_TOTAL].append((nodeID, nodeValue.displacementTotal))
127
+ pairsByType[BoltDataType.INTERFACE_SHEAR_FORCE].append((nodeID, nodeValue.interfaceShearForce))
128
+ pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_X].append((nodeID, nodeValue.interfaceDisplacementX))
129
+ pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_Y].append((nodeID, nodeValue.interfaceDisplacementY))
130
+ pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_Z].append((nodeID, nodeValue.interfaceDisplacementZ))
131
+ pairsByType[BoltDataType.INTERFACE_DISPLACEMENT_TOTAL].append((nodeID, nodeValue.interfaceDisplacementTotal))
132
+ return {dt: _NodeValuePairCollection(pairs) for dt, pairs in pairsByType.items()}
133
+
134
+ class BoltResults(_ResultsQueryBase):
135
+ '''
136
+ Entry point to query bolt nodal results for a given stage and SRF.
137
+
138
+ Parameters:
139
+ stageNumber (int): 1-based stage index.
140
+ srfResultIndex (int): 0-based SRF value index. 0 is to query SRF-None values.
141
+
142
+ Notes:
143
+ - entityName is trimmed; empty strings are ignored.
144
+ - region=None leaves the proto field unset (service returns all).
145
+ - Exceptions from the underlying service are propagated as-is by the client.
146
+
147
+ Examples:
148
+ See :ref:`bolt_result_example`.
149
+ '''
150
+ def __init__(self, client: Client, projectId: str, stageNumber: int, srfResultIndex: int):
151
+ super().__init__(client, projectId, stageNumber, srfResultIndex)
152
+ self._queryService = BoltsResultsQueryService_pb2_grpc.BoltResultsQueryServiceStub(client.channel)
153
+
154
+
155
+ def getBoltNodeResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[BoltNodeResult]:
156
+ '''
157
+ Query bolt nodal results at a specific stage and SRF value.
158
+ Parameters:
159
+ entityName: Optional[str]: If provided, only nodes belonging to the specified entity are queried.
160
+ region: Optional[Union[Cube, Cylinder, Sphere]]: Sample region filter. When None, the field is not set in the request (proto3 unset), and the service returns all nodes.
161
+ includeIntersecting: bool: If True, nodes that intersect the sample region are included. When False, only nodes fully contained are included. Ignored when region is None.
162
+ Raises:
163
+ Exception if:
164
+ - stageNumber is less than 1
165
+ - stageNumber is greater than the number of stages in the project
166
+ - _srfResultIndex is less than 0
167
+ - _srfResultIndex is greater than the number of SRF values in the project
168
+ Returns:
169
+ list[BoltNodeResult]: A list of bolt nodal results wrappers for the requested stage and SRF value.
170
+ '''
171
+ request = self._makeRequest(entityName, region, includeIntersecting)
172
+ stream = self._queryService.QueryBoltNodalResults(request)
173
+ allResults = []
174
+ totalQueriedNodesCount = None
175
+ for chunk in stream:
176
+ if chunk.HasField('header'):
177
+ header = chunk.header
178
+ totalQueriedNodesCount = header.totalQueriedNodesCount
179
+ elif chunk.HasField('data'):
180
+ allResults.extend(chunk.data.results)
181
+ if totalQueriedNodesCount != len(allResults):
182
+ raise RuntimeError(f"Number of nodes received does not match the expected total queried nodes count. Expected {totalQueriedNodesCount}, but received {len(allResults)}.")
183
+ return [BoltNodeResult(r) for r in allResults]
184
+
185
+
186
+ def getBoltElementResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[BoltElementResults]:
187
+ '''
188
+ Query bolt element results at a specific stage and SRF value.
189
+ Parameters:
190
+ entityName: Optional[str]: If provided, only elements belonging to the specified entity are queried.
191
+ region: Optional[Union[Cube, Cylinder, Sphere]]: Sample region filter. When None, the field is not set in the request (proto3 unset), and the service returns all elements.
192
+ includeIntersecting: bool: If True, elements that intersect the sample region are included. When False, only elements fully contained are included. Ignored when region is None.
193
+ Raises:
194
+ Exception if:
195
+ - stageNumber is less than 1
196
+ - stageNumber is greater than the number of stages in the project
197
+ - _srfResultIndex is less than 0
198
+ - _srfResultIndex is greater than the number of SRF values in the project
199
+ Returns:
200
+ list[BoltElementResults]: A list of bolt element results wrappers for the requested stage and SRF value.
201
+ '''
202
+ request = self._makeRequest(entityName, region, includeIntersecting)
203
+ stream = self._queryService.QueryBoltElementResults(request)
204
+ allResults = []
205
+ totalQueriedElementsCount = None
206
+ for chunk in stream:
207
+ if chunk.HasField('header'):
208
+ header = chunk.header
209
+ totalQueriedElementsCount = header.totalQueriedElementsCount
210
+ elif chunk.HasField('data'):
211
+ allResults.extend(chunk.data.results)
212
+ if totalQueriedElementsCount != len(allResults):
213
+ raise RuntimeError(f"Number of elements received does not match the expected total queried elements count. Expected {totalQueriedElementsCount}, but received {len(allResults)}.")
214
+ return [BoltElementResults(r) for r in allResults]
@@ -0,0 +1,374 @@
1
+ from typing import Optional, Union
2
+ import rs3.generatedFiles.CompositeLinerResultsQueryService_pb2_grpc as CompositeLinerResultsQueryService_pb2_grpc
3
+ import rs3.generatedFiles.CompositeLinerResultsQueryService_pb2 as CompositeLinerResultsQueryService_pb2
4
+ import rs3.generatedFiles.ResultsQueryCommonMessage_pb2 as ResultsQueryCommonMessage_pb2
5
+ from rs3._proxyObject import _ProxyObject
6
+ from rs3._client import Client
7
+ from rs3.Geometry import Cube, Cylinder, Sphere
8
+ from rs3.results.ResultEnums import *
9
+
10
+ class LinerNodalResults:
11
+ """
12
+ Nodal result wrapper with per-material data access.
13
+
14
+ Notes:
15
+ - EntityNames/EntityIDs correspond to owning entities for this node.
16
+
17
+ """
18
+ def __init__(self, grpcNodalResults):
19
+ self._grpcNodalResults = grpcNodalResults
20
+
21
+ @property
22
+ def EntityName(self):
23
+ return self._grpcNodalResults.entityInformation.name
24
+
25
+ @property
26
+ def EntityID(self):
27
+ return self._grpcNodalResults.entityInformation.ID
28
+
29
+ @property
30
+ def LayerIndex(self):
31
+ return self._grpcNodalResults.compositeLinerStructureInformation.layerIndex
32
+
33
+ @property
34
+ def NodeID(self):
35
+ return self._grpcNodalResults.nodeInformation.nodeID
36
+
37
+ @property
38
+ def XCoordinate(self):
39
+ return self._grpcNodalResults.nodeInformation.location.x
40
+
41
+ @property
42
+ def YCoordinate(self):
43
+ return self._grpcNodalResults.nodeInformation.location.y
44
+
45
+ @property
46
+ def ZCoordinate(self):
47
+ return self._grpcNodalResults.nodeInformation.location.z
48
+
49
+ @property
50
+ def AssignedPropertyName(self):
51
+ return self._grpcNodalResults.compositeLinerStructureInformation.assignedPropertyName
52
+
53
+ @property
54
+ def AttachedLinerLayersAboveIndex(self):
55
+ return list(self._grpcNodalResults.compositeLinerStructureInformation.attachedLinerLayerUpperIndex)
56
+
57
+ @property
58
+ def AttachedLinerLayersBelowIndex(self):
59
+ return list(self._grpcNodalResults.compositeLinerStructureInformation.attachedLinerLayerLowerIndex)
60
+
61
+ @property
62
+ def AttachedInterfaceLayerAboveIndex(self):
63
+ return self._grpcNodalResults.compositeLinerStructureInformation.attachedInterfaceLayerUpperIndex
64
+
65
+ @property
66
+ def AttachedInterfaceLayerBelowIndex(self):
67
+ return self._grpcNodalResults.compositeLinerStructureInformation.attachedInterfaceLayerLowerIndex
68
+
69
+ @property
70
+ def NodeDetails(self):
71
+ return {"NodeID" : self.NodeID,
72
+ "XCoordinate": self.XCoordinate,
73
+ "YCoordinate": self.YCoordinate,
74
+ "ZCoordinate": self.ZCoordinate,
75
+ "EntityName": self.EntityName,
76
+ "LayerIndex": self.LayerIndex
77
+ }
78
+
79
+ class LinerElementResults:
80
+ """
81
+ Element-level results wrapper for a specific stage/SRF context.
82
+
83
+ Notes:
84
+ - AttachedNodes returns a copy of node IDs; modifying it does not affect internal state.
85
+ - getResult(dataType) returns the value of that node in the given element when it is in the global coordinate system.
86
+ It returns the average across the elements about that node when the local axes is defined.
87
+
88
+ """
89
+ def __init__(self, grpcElementResults):
90
+ self._grpcElementResults = grpcElementResults
91
+ self._linerResults = grpcElementResults.linerNodalResults
92
+
93
+ @property
94
+ def ElementID(self):
95
+ return self._grpcElementResults.elementInformation.elementID
96
+
97
+ @property
98
+ def AttachedNodeIDs(self):
99
+ return list(self._grpcElementResults.elementInformation.nodeIDs)
100
+
101
+ @property
102
+ def EntityName(self):
103
+ return self._grpcElementResults.entityInformation.name
104
+
105
+ @property
106
+ def EntityId(self):
107
+ return self._grpcElementResults.entityInformation.ID
108
+
109
+ @property
110
+ def LayerIndex(self):
111
+ return self._grpcElementResults.compositeLinerStructureInformation.layerIndex
112
+
113
+ @property
114
+ def AssignedPropertyName(self):
115
+ return self._grpcElementResults.compositeLinerStructureInformation.assignedPropertyName
116
+
117
+ @property
118
+ def AttachedLinerLayersAboveIndex(self):
119
+ return list(self._grpcElementResults.compositeLinerStructureInformation.attachedLinerLayerUpperID)
120
+
121
+ @property
122
+ def AttachedLinerLayersBelowIndex(self):
123
+ return list(self._grpcElementResults.compositeLinerStructureInformation.attachedLinerLayerLowerID)
124
+
125
+ @property
126
+ def AttachedInterfaceLayerAboveIndex(self):
127
+ return self._grpcElementResults.compositeLinerStructureInformation.attachedInterfaceLayerUpperID
128
+
129
+ @property
130
+ def AttachedInterfaceLayerBelowIndex(self):
131
+ return self._grpcElementResults.compositeLinerStructureInformation.attachedInterfaceLayerLowerID
132
+
133
+ @property
134
+ def FailureType(self):
135
+ return LinerGaussPointFailureCombinations(self._grpcElementResults.failureType)
136
+
137
+ def getResults(self, dataType: LinerResultTypes) -> list[float]:
138
+ if not self._linerResults:
139
+ raise ValueError("No liner results available")
140
+
141
+ result = self._linerResults[0]
142
+ return getattr(result, dataType.value)
143
+
144
+ class InterfaceNodalResults:
145
+ '''
146
+ Nodal result wrapper with per-material data access.
147
+
148
+ Notes:
149
+ - EntityNames/EntityIDs correspond to owning entities for this node.
150
+
151
+ '''
152
+ def __init__(self, grpcNodalResults):
153
+ self._grpcNodalResults = grpcNodalResults
154
+
155
+ @property
156
+ def EntityName(self):
157
+ return self._grpcNodalResults.entityInformation.name
158
+
159
+ @property
160
+ def EntityID(self):
161
+ return self._grpcNodalResults.entityInformation.ID
162
+
163
+ @property
164
+ def LayerIndex(self):
165
+ return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.layerIndex
166
+
167
+ @property
168
+ def AssignedPropertyName(self):
169
+ return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.assignedPropertyName
170
+
171
+ @property
172
+ def AttachedLinerLayersAboveIndex(self):
173
+ return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerUpperIndex
174
+
175
+ @property
176
+ def AttachedLinerLayersBelowIndex(self):
177
+ return self._grpcNodalResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerLowerIndex
178
+
179
+ @property
180
+ def NodeID(self):
181
+ return self._grpcNodalResults.nodeInformation.nodeID
182
+
183
+ @property
184
+ def XCoordinate(self):
185
+ return self._grpcNodalResults.nodeInformation.location.x
186
+
187
+ @property
188
+ def YCoordinate(self):
189
+ return self._grpcNodalResults.nodeInformation.location.y
190
+
191
+ @property
192
+ def ZCoordinate(self):
193
+ return self._grpcNodalResults.nodeInformation.location.z
194
+
195
+ class InterfaceElementResults:
196
+ '''
197
+ Element-level results wrapper for a specific stage/SRF context.
198
+
199
+ Notes:
200
+ - AttachedNodes returns a copy of node IDs; modifying it does not affect internal state.
201
+ '''
202
+ def __init__(self, grpcElementResults):
203
+ self._grpcElementResults = grpcElementResults
204
+ self._interfaceResults = grpcElementResults.jointNodalResults
205
+
206
+ @property
207
+ def ElementID(self):
208
+ return self._grpcElementResults.elementInformation.elementID
209
+
210
+ @property
211
+ def AttachedNodeIDs(self):
212
+ return list(self._grpcElementResults.elementInformation.nodeIDs)
213
+
214
+ @property
215
+ def EntityName(self):
216
+ return self._grpcElementResults.entityInformation.name
217
+
218
+ @property
219
+ def EntityID(self):
220
+ return self._grpcElementResults.entityInformation.ID
221
+
222
+ @property
223
+ def LayerIndex(self):
224
+ return self._grpcElementResults.compositeLinerLinerAttachmentInformation.layerIndex
225
+
226
+ @property
227
+ def AssignedPropertyName(self):
228
+ return self._grpcElementResults.compositeLinerLinerAttachmentInformation.assignedPropertyName
229
+
230
+ @property
231
+ def AttachedLinerLayersAboveIndex(self):
232
+ return self._grpcElementResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerUpperIndex
233
+
234
+ @property
235
+ def AttachedLinerLayersBelowIndex(self):
236
+ return self._grpcElementResults.compositeLinerLinerAttachmentInformation.attachedLinerLayerLowerIndex
237
+
238
+ @property
239
+ def FailureType(self):
240
+ return JointGaussPointFailureCombinations(self._grpcElementResults.failureType)
241
+
242
+ def getResults(self, dataType: InterfaceResultTypes) -> list[float]:
243
+ if not self._interfaceResults:
244
+ raise ValueError("No liner results available")
245
+
246
+ result = self._interfaceResults[0]
247
+ return getattr(result, dataType.value)
248
+
249
+ class CompositeLinerResults(_ProxyObject):
250
+ '''
251
+ Entry point to query composite liner nodal/element results for a given stage and SRF.
252
+
253
+ Parameters:
254
+ stageNumber (int): 1-based stage index.
255
+ srfResultIndex (int): 0-based SRF value index. 0 is to query SRF-None values.
256
+
257
+ Notes:
258
+ - entityName is trimmed; empty strings are ignored.
259
+ - region=None leaves the proto field unset (service returns all).
260
+ - Exceptions from the underlying service are propagated as-is by the client.
261
+
262
+ Examples:
263
+ See :ref:`composite_liner_result_example`.
264
+ '''
265
+
266
+ def __init__(self, client: Client, projectId: str, stageNumber: list[int], srfResultIndex: int):
267
+ super().__init__(client, projectId)
268
+ self._queryService = CompositeLinerResultsQueryService_pb2_grpc.CompositeLinerResultsQueryServiceStub(self._client.channel)
269
+ self._stageNumber = stageNumber
270
+ self._srfResultIndex = srfResultIndex
271
+
272
+ def getLinerNodeResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[LinerNodalResults]:
273
+ request = self._makeRequest(entityName, region, includeIntersecting)
274
+ stream = self._queryService.GetLinerNodeResults(request)
275
+
276
+ results = []
277
+ totalQueriedNodesCount = None
278
+
279
+ for chunk in stream:
280
+ if chunk.HasField('header'):
281
+ header = chunk.header
282
+ totalQueriedNodesCount = header.totalQueriedNodesCount
283
+ elif chunk.HasField('data'):
284
+ results.extend(chunk.data.results)
285
+
286
+ if totalQueriedNodesCount != len(results):
287
+ raise RuntimeError(f"Number of nodes received does not match the expected total queried nodes count. Expected {totalQueriedNodesCount}, but received {len(results)}")
288
+
289
+ return [LinerNodalResults(r) for r in results]
290
+
291
+ def getLinerElementResults(self, entityName: Optional[str] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[LinerElementResults]:
292
+ request = self._makeRequest(entityName, region, includeIntersecting)
293
+ stream = self._queryService.GetLinerElementResults(request)
294
+
295
+ results = []
296
+ totalQueriedElementsCount = None
297
+
298
+ for chunk in stream:
299
+ if chunk.HasField('header'):
300
+ header = chunk.header
301
+ totalQueriedElementsCount = header.totalQueriedElementsCount
302
+ elif chunk.HasField('data'):
303
+ results.extend(chunk.data.results)
304
+
305
+ if totalQueriedElementsCount != len(results):
306
+ raise RuntimeError(f"Number of elements received does not match the expected total queried elements count. Expected {totalQueriedElementsCount}, but received {len(results)}")
307
+
308
+ return [LinerElementResults(r) for r in results]
309
+
310
+ def getInterfaceNodeResults(self, entityNames: Optional[list[str]] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[InterfaceNodalResults]:
311
+ request = self._makeRequest(entityNames, region, includeIntersecting)
312
+ stream = self._queryService.GetInterfaceNodeResults(request)
313
+
314
+ results = []
315
+ totalQueriedNodesCount = None
316
+
317
+ for chunk in stream:
318
+ if chunk.HasField('header'):
319
+ header = chunk.header
320
+ totalQueriedNodesCount = header.totalQueriedNodesCount
321
+ elif chunk.HasField('data'):
322
+ results.extend(chunk.data.results)
323
+
324
+ if totalQueriedNodesCount != len(results):
325
+ raise RuntimeError(f"Number of nodes received does not match the expected total queried nodes count. Expected {totalQueriedNodesCount}, but received {len(results)}")
326
+
327
+ return [InterfaceNodalResults(r) for r in results]
328
+
329
+ def getInterfaceElementResults(self, entityNames: Optional[list[str]] = None, region: Optional[Union[Cube, Cylinder, Sphere]] = None, includeIntersecting: bool = True) -> list[InterfaceElementResults]:
330
+ request = self._makeRequest(entityNames, region, includeIntersecting)
331
+ stream = self._queryService.GetInterfaceElementResults(request)
332
+
333
+ results = []
334
+ totalQueriedElementsCount = None
335
+
336
+ for chunk in stream:
337
+ if chunk.HasField('header'):
338
+ header = chunk.header
339
+ totalQueriedElementsCount = header.totalQueriedElementsCount
340
+ elif chunk.HasField('data'):
341
+ results.extend(chunk.data.results)
342
+
343
+ if totalQueriedElementsCount != len(results):
344
+ raise RuntimeError(f"Number of elements received does not match the expected total queried elements count. Expected {totalQueriedElementsCount}, but received {len(results)}")
345
+
346
+ return [InterfaceElementResults(r) for r in results]
347
+
348
+ def setCoordinateSystem(self, coordinateSystemName : str) -> None:
349
+ request = CompositeLinerResultsQueryService_pb2.SetCoordinateSystemRequest(_projectId=self._objectId, coordinateSystemName=coordinateSystemName)
350
+ self._client.callFunction(self._queryService.SetCoordinateSystem, request)
351
+
352
+ def getCoordinateSystem(self) -> str:
353
+ request = CompositeLinerResultsQueryService_pb2.GetCoordinateSystemRequest(_projectId=self._objectId)
354
+ return self._client.callFunction(self._queryService.GetCoordinateSystem, request).coordinateSystemName
355
+
356
+ def _makeRequest(self, entityName: Optional[str], region: Optional[Union[Cube, Cylinder, Sphere]], includeIntersecting: bool = True) -> ResultsQueryCommonMessage_pb2.ResultsQueryRequest:
357
+ request = ResultsQueryCommonMessage_pb2.ResultsQueryRequest(
358
+ _projectId=self._objectId,
359
+ stageNumber=self._stageNumber,
360
+ srfValueNumber=self._srfResultIndex)
361
+
362
+ if entityName:
363
+ # Trim whitespace inside each string if needed
364
+ request.entityName = entityName.strip()
365
+
366
+ if region is not None:
367
+ if isinstance(region, (Cube, Cylinder, Sphere)):
368
+ common_region = region.toCommonGeometryObject()
369
+ request.sampleRegion.region.CopyFrom(common_region)
370
+ request.sampleRegion.includeIntersecting = includeIntersecting
371
+ else:
372
+ raise TypeError(f"Unsupported region type: {type(region)}")
373
+
374
+ return request