NaxToPy 3.2.1__tar.gz → 3.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. {naxtopy-3.2.1/src/NaxToPy.egg-info → naxtopy-3.2.2}/PKG-INFO +8 -2
  2. {naxtopy-3.2.1 → naxtopy-3.2.2}/README.md +7 -1
  3. {naxtopy-3.2.1 → naxtopy-3.2.2}/pyproject.toml +1 -1
  4. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PComponent.py +2 -2
  5. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +29 -3
  6. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Constants/Constants.py +4 -4
  7. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Errors/N2PLog.py +17 -1
  8. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/N2PModelContent.py +45 -18
  9. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/common/data_input_hdf5.py +20 -1
  10. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/common/hdf5.py +3 -3
  11. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/common/property.py +13 -11
  12. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PCalculatorRFJoints.py +3 -3
  13. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PGetFasteners.py +3 -3
  14. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PGetLoadFasteners.py +4 -32
  15. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/N2PJoint.py +2 -4
  16. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/metallic/neuber/N2PNeuber.py +215 -74
  17. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/__init__.py +1 -0
  18. {naxtopy-3.2.1 → naxtopy-3.2.2/src/NaxToPy.egg-info}/PKG-INFO +8 -2
  19. {naxtopy-3.2.1 → naxtopy-3.2.2}/LICENSE +0 -0
  20. {naxtopy-3.2.1 → naxtopy-3.2.2}/setup.cfg +0 -0
  21. {naxtopy-3.2.1 → naxtopy-3.2.2}/setup.py +0 -0
  22. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
  23. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
  24. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
  25. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
  26. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
  27. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
  28. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
  29. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
  30. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
  31. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
  32. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
  33. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
  34. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
  35. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
  36. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
  37. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
  38. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
  39. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
  40. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
  41. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
  42. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
  43. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
  44. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
  45. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
  46. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
  47. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
  48. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
  49. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
  50. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
  51. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
  52. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +0 -0
  53. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PConnector.py +0 -0
  54. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PCoord.py +0 -0
  55. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PElement.py +0 -0
  56. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PFreeBody.py +0 -0
  57. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PIncrement.py +0 -0
  58. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PLoadCase.py +0 -0
  59. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PMaterial.py +0 -0
  60. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PNode.py +0 -0
  61. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PProperty.py +0 -0
  62. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PReport.py +0 -0
  63. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PResult.py +0 -0
  64. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PSection.py +0 -0
  65. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/N2PSet.py +0 -0
  66. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
  67. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Classes/__init__.py +0 -0
  68. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Constants/__init__.py +0 -0
  69. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Constants/librerias.py +0 -0
  70. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
  71. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
  72. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Errors/__init__.py +0 -0
  73. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +0 -0
  74. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
  75. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
  76. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
  77. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Core/__init__.py +0 -0
  78. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/__init__.py +0 -0
  79. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/common/__init__.py +0 -0
  80. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/common/material.py +0 -0
  81. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/common/model_processor.py +0 -0
  82. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/envelope/N2PEnvelope.py +0 -0
  83. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/envelope/__init__.py +0 -0
  84. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
  85. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/airbus/__init__.py +0 -0
  86. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/airbus/core_shear_crimping_airbus.py +0 -0
  87. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/airbus/dimpling_airbus.py +0 -0
  88. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/airbus/wrinkling_airbus.py +0 -0
  89. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
  90. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
  91. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/cmh/core_shear_crimping_cmh.py +0 -0
  92. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/cmh/dimpling_cmh.py +0 -0
  93. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/cmh/wrinkling_cmh.py +0 -0
  94. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
  95. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
  96. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/hsb/wrinkling_hsb.py +0 -0
  97. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/hypersizer/__init__.py +0 -0
  98. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/hypersizer/crimping_hypersizer.py +0 -0
  99. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/hypersizer/dimpling_hypersizer.py +0 -0
  100. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/hypersizer/wrinkling_hypersizer.py +0 -0
  101. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
  102. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/handbooks/nasa/wrinkling_nasa.py +0 -0
  103. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/n2ptoexe/N2PtoEXE.py +0 -0
  104. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/n2ptoexe/__init__.py +0 -0
  105. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/numericaltools/N2PCoefficientsFinder.py +0 -0
  106. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/numericaltools/__init__.py +0 -0
  107. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/__init__.py +0 -0
  108. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/__init__.py +0 -0
  109. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/delamination/N2PEdgeDelamination.py +0 -0
  110. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/delamination/__init__.py +0 -0
  111. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py +0 -0
  112. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Backupy.py +0 -0
  113. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Vectorisation.py +0 -0
  114. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/failure_analysis/__init__.py +0 -0
  115. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/sandwich/N2PSandwich.py +0 -0
  116. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/composite/sandwich/__init__.py +0 -0
  117. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PCompRF.py +0 -0
  118. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PFastenerAnalysis.py +0 -0
  119. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PMetalRF.py +0 -0
  120. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PRivetRF.py +0 -0
  121. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/N2PUpdateFastener.py +0 -0
  122. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
  123. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +0 -0
  124. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
  125. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
  126. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
  127. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
  128. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
  129. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
  130. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
  131. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
  132. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
  133. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
  134. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
  135. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
  136. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
  137. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
  138. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
  139. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
  140. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
  141. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
  142. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
  143. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
  144. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
  145. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
  146. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
  147. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
  148. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
  149. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
  150. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
  151. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/__init__.py +0 -0
  152. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/N2PAttachment.py +0 -0
  153. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/N2PBolt.py +0 -0
  154. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/N2PFastenerSystem.py +0 -0
  155. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/N2PJointAnalysisParameters.py +0 -0
  156. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/N2PPlate.py +0 -0
  157. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/fasteners/joints/__init__.py +0 -0
  158. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/metallic/__init__.py +0 -0
  159. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/Modules/static/metallic/neuber/__init__.py +0 -0
  160. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/NaxToPy.ico +0 -0
  161. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy/user_functions.txt +0 -0
  162. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy.egg-info/SOURCES.txt +0 -0
  163. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
  164. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy.egg-info/requires.txt +0 -0
  165. {naxtopy-3.2.1 → naxtopy-3.2.2}/src/NaxToPy.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: NaxToPy
3
- Version: 3.2.1
3
+ Version: 3.2.2
4
4
  Summary: Package for postprocessing FEM results in Python
5
5
  Home-page: https://www.idaerosolutions.com/Home/NaxToPy
6
6
  Download-URL: https://apps.microsoft.com/detail/XP9MMH0KDKGRJN?hl=en-US&gl=US
@@ -285,9 +285,15 @@ is redundant. The coordinate system will prevail.
285
285
 
286
286
  ### v.3.2.1
287
287
  1. BugFix: Derived components are now founded right while using `get_result_by_LCs_Incr()`.
288
- 1. BugFix: All sections are now founded right while using `get_result_by_LCs_Incr()`.
288
+ 2. BugFix: All sections are now founded right while using `get_result_by_LCs_Incr()`.
289
289
  3. BugFix: Now symbols like "\" or "-" are supported as part of the name of Components and Load Cases while creating new derived Components and Derived Load Cases.
290
290
 
291
+ ### v.3.2.2
292
+ 1. BugFix: Logs message are not printed double when the buffer is called several times.
293
+ 2. BugFix: `get_load_case()` now returns correctly the load cases if it is called before and after calling `import_results_from_files()`.
294
+ 3. Refactor: New structure for the h5 files generated by N2PNeuber module.
295
+ 4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly readed from a bdf file.
296
+
291
297
  # Documentation
292
298
 
293
299
  **NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
@@ -258,9 +258,15 @@ is redundant. The coordinate system will prevail.
258
258
 
259
259
  ### v.3.2.1
260
260
  1. BugFix: Derived components are now founded right while using `get_result_by_LCs_Incr()`.
261
- 1. BugFix: All sections are now founded right while using `get_result_by_LCs_Incr()`.
261
+ 2. BugFix: All sections are now founded right while using `get_result_by_LCs_Incr()`.
262
262
  3. BugFix: Now symbols like "\" or "-" are supported as part of the name of Components and Load Cases while creating new derived Components and Derived Load Cases.
263
263
 
264
+ ### v.3.2.2
265
+ 1. BugFix: Logs message are not printed double when the buffer is called several times.
266
+ 2. BugFix: `get_load_case()` now returns correctly the load cases if it is called before and after calling `import_results_from_files()`.
267
+ 3. Refactor: New structure for the h5 files generated by N2PNeuber module.
268
+ 4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly readed from a bdf file.
269
+
264
270
  # Documentation
265
271
 
266
272
  **NaxToPy** is a package developed by Idaero Solutions© as a part of the **NaxTo** software.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "NaxToPy"
7
- version = "3.2.1"
7
+ version = "3.2.2"
8
8
  license = {text = "MIT"}
9
9
  authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
10
10
  requires-python = ">=3.9"
@@ -150,7 +150,7 @@ class N2PComponent:
150
150
  * -10: User defined coordinate system
151
151
  * -20: Element/Node user defined coordinate system
152
152
  * -1000: Analysis coordinate system (default)
153
- * \>0: Solver ID of predefined coordinate system
153
+ * >0: Solver ID of predefined coordinate system
154
154
 
155
155
  .. note::
156
156
 
@@ -251,7 +251,7 @@ class N2PComponent:
251
251
  * -10: User defined coordinate system
252
252
  * -20: Element/Node user defined coordinate system
253
253
  * -1000: Analysis coordinate system (default)
254
- * \>0: Solver ID of predefined coordinate system
254
+ * >0: Solver ID of predefined coordinate system
255
255
 
256
256
  .. note::
257
257
 
@@ -230,6 +230,7 @@ class N2PNastranInputData:
230
230
  "__executivecontrolinstructions",
231
231
  "__listcomments",
232
232
  "__lazylist",
233
+ "__bdfFiles"
233
234
  )
234
235
 
235
236
  def __init__(self, dictcardscston2p: dict, inputfiledata):
@@ -239,6 +240,7 @@ class N2PNastranInputData:
239
240
  self.__executivecontrolinstructions = []
240
241
  self.__listcomments = []
241
242
  self.__lazylist = None
243
+ self.__bdfFiles = {bdf.BdfFilePath: bdf for bdf in inputfiledata.BdfFiles}
242
244
 
243
245
  @property
244
246
  def ListBulkDataCards(self) -> list[N2PCard]:
@@ -417,9 +419,33 @@ class N2PNastranInputData:
417
419
  N2PLog.Error.E100(error.StatusMessage)
418
420
  return failed_cards
419
421
 
420
- def create_card(self, card_type: str, parentBdfFile: object, rawContent: str = None, superElemntId:int = 0) -> N2PCard:
421
- """Method that creates a new card of the type specified."""
422
- card = self.__inputfiledata.CreateCard(card_type, parentBdfFile, rawContent, superElemntId)
422
+ def create_card(self, card_type: str, bdf_file: str, rawContent: str = None, superElemntId:int = 0) -> N2PCard:
423
+ """Method that creates a new card of the type specified. By default, the card is created empty, with small field format.
424
+
425
+ Example:
426
+ >>> new_cbar = model.ModelInputData.create_card("CBAR", "C:\\bdf\\mesh\\model.bdf")
427
+ >>> # new_cbar is now a N2PCard object of type CBAR empty. You can set its properties:
428
+ >>> new_cbar.EID = 1001
429
+ >>> new_cbar.PID = 2001
430
+ >>> new_cbar.GA = 10
431
+ >>> new_cbar.GB = 20
432
+ >>> new_cbar.X1 = 1.0
433
+ >>> new_cbar.X2 = 0.0
434
+ >>> new_cbar.X3 = 0.0
435
+
436
+ >>> # It is also possible to create a card with raw content and specifying the superelement id:
437
+ >>> raw_content = "CBAR 1002 2001 30 40 0.0 1.0 0.0"
438
+ >>> new_cbar2 = model.ModelInputData.create_card("CBAR", "C:\\bdf\\mesh\\model.bdf", rawContent=raw_content, superElemntId=0)
439
+
440
+ """
441
+ bdfFileObject = self.__bdfFiles.get(bdf_file, None)
442
+ if bdfFileObject is None:
443
+ N2PLog.Warning.W212(bdf_file)
444
+ bdfFileObject = self.__inputfiledata.BdfFiles[0]
445
+ card = self.__inputfiledata.BulkDataSection.CreateCard(card_type, bdfFileObject, rawContent, superElemntId)
446
+ card.CardType = card_type
447
+ card.FieldsFormat = "SMALL"
448
+
423
449
  return card
424
450
 
425
451
  class N2PModelInputData(N2PNastranInputData):
@@ -1,15 +1,15 @@
1
1
  """Constants of the NaxToPy package"""
2
2
 
3
3
  # NaxToPy Version
4
- VERSION = "3.2.1"
4
+ VERSION = "3.2.2"
5
5
 
6
6
  # Supported for Naxto:
7
7
  NAXTO_VERSION = '2025R2'
8
- NAXTO_STEP = "1"
9
- NAXTO_ADVANCED_INSTALLER = "2025.2.1"
8
+ NAXTO_STEP = "2"
9
+ NAXTO_ADVANCED_INSTALLER = "2025.2.2"
10
10
 
11
11
  # Assembly version of NaxToModel.dll
12
- VIZZER_COMPATIBILITY = ("5.2.0.1")
12
+ VIZZER_COMPATIBILITY = ("5.2.0.2")
13
13
  """Tuple with the compatible versions of NaxToModel.dll"""
14
14
 
15
15
  # PYTHON EXTERNO ----------------------------------------------------------------------------------
@@ -446,7 +446,7 @@ own information message. Use the following structure as a standard message (I +
446
446
  def I116() -> None:
447
447
  """ Working with the installed naxto libraries
448
448
  """
449
- message = "I116: Working with NaxTo installed libraries (in Program Files\IDAERO)"
449
+ message = r"I116: Working with NaxTo installed libraries (in Program Files\IDAERO)"
450
450
  N2PLog._N2PLog__logger.info(message)
451
451
 
452
452
  @staticmethod
@@ -676,6 +676,14 @@ own information message. Use the following structure as a standard message (I +
676
676
  message = f"W211: The result asked is not available in all the load cases selected"
677
677
  N2PLog._N2PLog__logger.warning(message)
678
678
 
679
+ @staticmethod
680
+ def W212(path) -> None:
681
+ """
682
+ Warning raised when the path for the new N2PCard is not in the include's tree.
683
+ """
684
+ message = f"W212: The path '{path}' for the new N2PCard is not in the include's tree. The card will be added in the launch bdf."
685
+ N2PLog._N2PLog__logger.warning(message)
686
+
679
687
  @staticmethod
680
688
  def W300() -> None:
681
689
  """ Warning raised when there are more dimensions than points in n2p.envelope
@@ -1259,6 +1267,14 @@ own information message. Use the following structure as a standard message (I +
1259
1267
  message = f"E114: THE FILE {file} IS A INPUT TEXT FILE BUT THE SOLVER IS UNKNOWN. SPECIFY THE 'file_type'."
1260
1268
  N2PLog._N2PLog__logger.error(message)
1261
1269
  return message
1270
+
1271
+ @staticmethod
1272
+ def E115() -> str:
1273
+ """ Error raised when a dictionary for filtering is passed but not where the filter is applied
1274
+ """
1275
+ message = f"E115: A DICTIONARY FOR FILTERING IS PASSED BUT NOT WHERE THE FILTER IS APPLIED. 'filter' MUST BE 'ELEMENTS', 'PROPERTIES', 'PARTS' OR 'NODES'"
1276
+ N2PLog._N2PLog__logger.error(message)
1277
+ return message
1262
1278
 
1263
1279
  @staticmethod
1264
1280
  def E201(*args) -> None:
@@ -66,8 +66,9 @@ class N2PModelContent:
66
66
  """
67
67
  # 0 ) Genera el archivo .log y añade los logs de la importación ------------------------------------------------
68
68
  # Configura el logger para que escriba automaticamente los logs ------------------------------------------------
69
- N2PLog._N2PLog__fh.write_buffered_records()
70
- N2PLog._N2PLog__fh.immediate_logging()
69
+ if not N2PLog._N2PLog__fh.immediate:
70
+ N2PLog._N2PLog__fh.write_buffered_records()
71
+ N2PLog._N2PLog__fh.immediate_logging()
71
72
 
72
73
  # 1) Extraer Toda la Informacion Principal de NaxTo ------------------------------------------------------------
73
74
  # Inicializador de atributos
@@ -312,27 +313,48 @@ class N2PModelContent:
312
313
  def __init__(self, keys_list: list):
313
314
  super().__init__()
314
315
  self._hash_to_cs = dict()
316
+ self._collision_counter = {} # Track collision index per hash
317
+
315
318
  for cs_ref in keys_list:
316
319
  if cs_ref.GetN2PCardType() not in CONSTRUCTDICT:
317
320
  continue
318
- # As the C# references can be moved by the CLR garbage collector, a dictionary using the
319
- # hash is used.
321
+
320
322
  hash = RuntimeHelpers.GetHashCode(cs_ref)
321
- self[hash] = None
322
- self._hash_to_cs[hash] = cs_ref
323
-
324
- def __getitem__(self, hash):
325
-
326
- if hash not in self or self.get(hash) is None:
327
- cs_ref = self._hash_to_cs.get(hash)
323
+
324
+ # Create unique key for collisions
325
+ if hash in self._collision_counter:
326
+ self._collision_counter[hash] += 1
327
+ unique_key = (hash, self._collision_counter[hash])
328
+ else:
329
+ self._collision_counter[hash] = 0
330
+ unique_key = (hash, 0)
331
+
332
+ self[unique_key] = None
333
+ self._hash_to_cs[unique_key] = cs_ref
334
+
335
+ def __getitem__(self, key):
336
+ # Handle both (hash, index) and plain hash lookups
337
+ if isinstance(key, tuple):
338
+ hash, index = key
339
+ else:
340
+ hash = key
341
+ index = 0
342
+ key = (hash, 0)
343
+
344
+ if key not in self or self.get(key) is None:
345
+ cs_ref = self._hash_to_cs.get(key)
346
+
347
+ if not cs_ref:
348
+ return None
349
+
328
350
  value = CONSTRUCTDICT.get(cs_ref.GetN2PCardType())
329
351
  if value:
330
- self[hash] = value(cs_ref)
331
- else:
332
- return value
333
- return value(cs_ref)
352
+ constructed = value(cs_ref)
353
+ self[key] = constructed
354
+ return constructed
355
+ return None
334
356
  else:
335
- return self.get(hash)
357
+ return self.get(key)
336
358
 
337
359
  cslistbulkdatacards = self.__vzmodel.NasOptInputReader.BulkDataSection.GetCardDataBaseList()
338
360
  self.__modelinputdata = N2PNastranInputData(
@@ -1427,11 +1449,13 @@ class N2PModelContent:
1427
1449
  for result_file in results_files:
1428
1450
  if os.path.isfile(result_file):
1429
1451
  self.__vzmodel.ImportResults(str(result_file))
1430
- self._import_load_cases()
1431
1452
  N2PLog.Debug.D201(str(result_file))
1432
1453
  else:
1433
1454
  N2PLog.Error.E232(str(result_file))
1434
1455
 
1456
+ self._import_load_cases()
1457
+ self.__LCs_by_ID__ = {lc.ID: lc for lc in self.LoadCases}
1458
+
1435
1459
  # ------------------------------------------------------------------------------------------------------------------
1436
1460
 
1437
1461
  ####################################################################################################################
@@ -2422,7 +2446,7 @@ def load_model(path: str, parallelprocessing: bool = True,
2422
2446
  ("InputFileAbaqus") or binary result file ("Binary").
2423
2447
  filter: str.
2424
2448
  Optional. It specifies what to load in dict_gen (elements, properties, parts or nodes)
2425
- dict_gem: dict.
2449
+ dict_gen: dict.
2426
2450
  Optional. Dictionary that represents what elements/properties/parts/nodes to load. For
2427
2451
  elements and nodes, the dictionary is in the form {Part ID (str): [Elements ID/Nodes ID]}. For parts or
2428
2452
  properties, the dictionary could simply be in the form {Part ID (str) / Property ID (str): []}.
@@ -2451,6 +2475,9 @@ def load_model(path: str, parallelprocessing: bool = True,
2451
2475
  if path.split(".")[-1] in BINARY_EXTENSIONS and file_type == "InputFileNastran":
2452
2476
  N2PLog.Error.E111()
2453
2477
 
2478
+ if dict_gen and not filter:
2479
+ N2PLog.Error.E115()
2480
+
2454
2481
  return N2PModelContent(path, parallelprocessing, file_type, __transform_dict(dict_gen), filter, loadconnectors=loadconnectors)
2455
2482
  # ----------------------------------------------------------------------------------------------------------------------
2456
2483
 
@@ -31,6 +31,7 @@ class DataEntry:
31
31
  self._loadcase: int = None
32
32
  self._loadcase_description: str = "LOAD CASE"
33
33
  self._loadcase_name: str = None
34
+ self._solution_type: int = 101
34
35
  self._increment: int = 1
35
36
  self._increment_description: str = "INCREMENT"
36
37
  self._increment_value: float = 0.0
@@ -38,6 +39,7 @@ class DataEntry:
38
39
  self._section_description: str = "SECTION"
39
40
  self._part: str = None
40
41
  self._data: np.ndarray = None
42
+
41
43
  self._data_input: np.ndarray = None
42
44
  self._data_input_name: str = None
43
45
  self._data_description: str = "Data"
@@ -217,7 +219,15 @@ class DataEntry:
217
219
 
218
220
  return self._loadcase_name
219
221
  #-------------------------------------------------------------------------------------------------------------------
220
-
222
+
223
+ # Method to obtain the Solution Type ------------------------------------------------------------------------------
224
+ @property
225
+ def SolutionType(self) -> int:
226
+ """
227
+ Returns the Solution Type ID (e.g., 101 for Nastran linear static).
228
+ """
229
+ return self._solution_type
230
+ # ------------------------------------------------------------------------------------------------------------------
221
231
 
222
232
 
223
233
  # Setters ----------------------------------------------------------------------------------------------------------
@@ -354,3 +364,12 @@ class DataEntry:
354
364
  N2PLog.Error.E535(value, str)
355
365
  # ------------------------------------------------------------------------------------------------------------------
356
366
 
367
+
368
+ @SolutionType.setter
369
+ def SolutionType(self, value: int) -> None:
370
+ if type(value) == int:
371
+ self._solution_type = value
372
+ else:
373
+ N2PLog.Error.E535(value, int)
374
+ # ------------------------------------------------------------------------------------------------------------------
375
+
@@ -80,10 +80,10 @@ class HDF5_NaxTo:
80
80
 
81
81
  # Method used to create an HDF5 file -------------------------------------------------------------------------------
82
82
  def create_hdf5(self) -> None:
83
-
84
83
  """
85
84
  Method used to create an HDF5 file, either in disk (if the FilePath attribute has been filled in), or in memory
86
- (if the FilePath boolean attribute has not been filled in). This file will have the following default attributes:
85
+ (if the FilePath boolean attribute has not been filled in). This file will have the following default attributes:
86
+
87
87
  - "SOFTWARE", which will always be "NAXTO".
88
88
  - "DESCRIPTION", which will be the FileDescription attribute (if it has been set).
89
89
  - "CREATION_DATE", which will be the exact date when this function is called. Its structure will be
@@ -142,7 +142,7 @@ class HDF5_NaxTo:
142
142
  section = resultsName.require_group(sectionName)
143
143
  firstEntry = dataEntry[0]
144
144
  loadCase.attrs.update({"DESCRIPTION": firstEntry.LoadCaseDescription, "ID": firstEntry.LoadCase,
145
- "SUBTITLE": firstEntry.LoadCaseName, "SOLUTION_TYPE": np.int32(1)})
145
+ "SUBTITLE": firstEntry.LoadCaseName, "SOLUTION_TYPE": np.int32(firstEntry.SolutionType)})
146
146
  increment.attrs.update({"DESCRIPTION": firstEntry.IncrementDescription,
147
147
  "VALUE": firstEntry.IncrementValue, "ID": firstEntry.Increment})
148
148
  resultsName.attrs.update({"DESCRIPTION": firstEntry.ResultsNameDescription,
@@ -100,18 +100,20 @@ class CompositeShell(Property):
100
100
  It is mandatory that NumPlies is set in first place. Other attributes might be set with no order.
101
101
 
102
102
  EXAMPLE
103
- laminate = CompositeShell()
104
- laminate.NumPlies = 6
105
- laminate.PartIDs = '0'
106
- laminate.MatIDs = [(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0')]
107
- laminate.thicknesses = [0.1,0.1,0.1,0.1,0.1,0.1]
108
- laminate.theta = [0,45,0,90,0,-45]
109
- model = n2p.load_model(r"")
110
- laminate.MaterialDict = model.MaterialDict
111
- laminate.simmetry = True
112
-
113
- *** Every given list must have the same length as the number of plies of the laminate. Otherwise, instance will not be created.
103
+
104
+ >>> laminate = CompositeShell()
105
+ >>> laminate.NumPlies = 6
106
+ >>> laminate.PartIDs = '0'
107
+ >>> laminate.MatIDs = [(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0'),(11100000,'0')]
108
+ >>> laminate.thicknesses = [0.1,0.1,0.1,0.1,0.1,0.1]
109
+ >>> laminate.theta = [0,45,0,90,0,-45]
110
+ >>> model = n2p.load_model(r"")
111
+ >>> laminate.MaterialDict = model.MaterialDict
112
+ >>> laminate.simmetry = True
113
+
114
+ .. warning::
114
115
 
116
+ Every given list must have the same length as the number of plies of the laminate. Otherwise, instance will not be created.
115
117
  """
116
118
  __slots__ = (
117
119
  '_n2p_property',
@@ -23,9 +23,9 @@ class N2PCalculatorRFJoints:
23
23
 
24
24
  Example:
25
25
  >>> import NaxToPy as n2p
26
- >>> from NaxToPy.Modules.Fasteners.N2PGetFasteners import N2PGetFasteners
27
- >>> from NaxToPy.Modules.Fasteners.N2PGetLoadFasteners import N2PGetLoadFasteners
28
- >>> from NaxToPy.Modules.Fasteners.Joints.N2PFastenerSystem import N2PFastenerSystem
26
+ >>> from NaxToPy.Modules.static.fasteners.N2PGetFasteners import N2PGetFasteners
27
+ >>> from NaxToPy.Modules.static.fasteners.N2PGetLoadFasteners import N2PGetLoadFasteners
28
+ >>> from NaxToPy.Modules.static.fasteners.N2PFastenerSystem import N2PFastenerSystem
29
29
  >>> from N2PCalculatorRFJoints import N2PCalculatorRFJoints
30
30
  >>> model1 = n2p.get_model(route.fem) # model loaded
31
31
  >>> fasteners = N2PGetFasteners()
@@ -67,9 +67,9 @@ class N2PGetFasteners:
67
67
  The constructor creates an empty N2PGetFasteners instance. Its attributes must be added as properties.
68
68
 
69
69
  Calling example:
70
- >>> import NaxToPy as NP
71
- >>> from NaxToPy.Modules.Fasteners.N2PGetFasteners import N2PGetFasteners
72
- >>> model1 = NP.load_model(r"route.fem") # Model is loaded
70
+ >>> import NaxToPy as n2p
71
+ >>> from NaxToPy.Modules.static.fasteners.N2PGetFasteners import N2PGetFasteners
72
+ >>> model1 = n2p.load_model(r"route.fem") # Model is loaded
73
73
  >>> fasteners = N2PGetFasteners()
74
74
  >>> fasteners.Model = model1 # Compulsory input
75
75
  >>> fasteners.ElementList = model1.get_elements([10, 11, 12, 13, 14]) # Only some joints are to be
@@ -79,10 +79,10 @@ class N2PGetLoadFasteners:
79
79
  The constructor creates an empty N2PGetLoadFasteners instance. Its attributes must be added as properties.
80
80
 
81
81
  Calling example:
82
- >>> import NaxToPy as NP
83
- >>> from NaxToPy.Modules.Fasteners.N2PGetFasteners import N2PGetFasteners
84
- >>> from NaxToPy.Modules.Fasteners.N2PGetLoadFasteners import N2PGetLoadFasteners
85
- >>> model1 = NP.get_model(r"route.fem") # model loaded
82
+ >>> import NaxToPy as n2p
83
+ >>> from NaxToPy.Modules.static.fasteners.N2PGetFasteners import N2PGetFasteners
84
+ >>> from NaxToPy.Modules.static.fasteners.N2PGetLoadFasteners import N2PGetLoadFasteners
85
+ >>> model1 = n2p.get_model(r"route.fem") # model loaded
86
86
  >>> fasteners = N2PGetFasteners()
87
87
  >>> fasteners.Model = model1 # compulsory input
88
88
  >>> fasteners.ElementList = model1.get_elements([10, 11, 12, 13, 14]) # joints to be analysed
@@ -552,7 +552,6 @@ class N2PGetLoadFasteners:
552
552
 
553
553
  # Method used to obtain the load cases' results --------------------------------------------------------------------
554
554
  def get_results(self, loadCaseList: list[N2PLoadCase] = None):
555
-
556
555
  """
557
556
  Method used to obtain the results of the model.
558
557
 
@@ -627,7 +626,6 @@ class N2PGetLoadFasteners:
627
626
 
628
627
  # Method used to obtain the results from a h5 file -----------------------------------------------------------------
629
628
  def get_results_h5(self, loadCaseList: list[N2PLoadCase] = None):
630
-
631
629
  """
632
630
  Method used to obtain the results of the model from a .h5 file and assign them to plates and bolts.
633
631
 
@@ -669,7 +667,6 @@ class N2PGetLoadFasteners:
669
667
 
670
668
  # Method used to obtain the joint's forces -------------------------------------------------------------------------
671
669
  def get_forces(self, loadCaseList: list[N2PLoadCase] = None):
672
-
673
670
  """
674
671
  Method used to obtain the 1D forces of each joint. In order to work, the results attribute must have been
675
672
  previously filled (by having called get_results()). If it has not, an error will occur.
@@ -697,7 +694,6 @@ class N2PGetLoadFasteners:
697
694
 
698
695
  # Method used to obtain the joint's bypass loads -------------------------------------------------------------------
699
696
  def get_bypass_loads(self, loadCaseList: list[N2PLoadCase] = None):
700
-
701
697
  """
702
698
  Method used to obtain the bypass loads of each joint. If an N2PJoint has no diameter, the default diameter is
703
699
  assigned (in case it has been defined by the user). In order to work, the results attribute must have been
@@ -748,7 +744,6 @@ class N2PGetLoadFasteners:
748
744
 
749
745
  # Method used to export the obtained results to a CSV file ---------------------------------------------------------
750
746
  def export_results(self):
751
-
752
747
  """
753
748
  Method used to export the obtained results to a CSV file.
754
749
 
@@ -775,7 +770,6 @@ class N2PGetLoadFasteners:
775
770
 
776
771
  # Method used to obtain the main fastener analysis -----------------------------------------------------------------
777
772
  def get_analysis(self, loadCaseList: list[N2PLoadCase] = None):
778
-
779
773
  """
780
774
  Method used to do the previous analysis and, optionally, export the results.
781
775
 
@@ -802,7 +796,6 @@ class N2PGetLoadFasteners:
802
796
 
803
797
  # Method used to do the entire analysis ----------------------------------------------------------------------------
804
798
  def calculate(self):
805
-
806
799
  """
807
800
  Method used to do all the previous calculations and, optionally, export the results.
808
801
 
@@ -841,7 +834,6 @@ class N2PGetLoadFasteners:
841
834
 
842
835
  # Method used to load results from a .h5 file ----------------------------------------------------------------------
843
836
  def load_h5(self):
844
-
845
837
  """
846
838
  Method used to load the results obtained from a previous N2PGetLoadFastener analysis from a .h5 file.
847
839
 
@@ -885,7 +877,6 @@ class N2PGetLoadFasteners:
885
877
 
886
878
  # Method used to sort plates ---------------------------------------------------------------------------------------
887
879
  def __sort_plates(self, plateList: list[N2PPlate]) -> None:
888
-
889
880
  """
890
881
  Method used to sort plates by its central element's ID, so results are exported in order.
891
882
 
@@ -908,7 +899,6 @@ class N2PGetLoadFasteners:
908
899
 
909
900
  # Method used to export the obtained PAG results as a txt file -----------------------------------------------------
910
901
  def __export_txt(self):
911
-
912
902
  """
913
903
  Method used to export the obtained results, if they are in PAG style, in a txt. It works similarly as the other
914
904
  export options but, in order to follow the same methodology as the one followed in PAG, this method cannot be
@@ -1729,7 +1719,6 @@ class N2PGetLoadFasteners:
1729
1719
 
1730
1720
  # Method used to create the model ----------------------------------------------------------------------------------
1731
1721
  def __create_model(self):
1732
-
1733
1722
  """
1734
1723
  Method used to create a new model and import its results. It fires when the model, joints_list (they may have
1735
1724
  been filled with get_fasteners) and results_files attributes have been filled in. It also assigns certain
@@ -1768,7 +1757,6 @@ class N2PGetLoadFasteners:
1768
1757
 
1769
1758
  # Method used to create the model ----------------------------------------------------------------------------------
1770
1759
  def __create_model_2(self, elementList: list[N2PElement]):
1771
-
1772
1760
  """
1773
1761
  Method used to create a new model and import its results. It fires when the model, joints_list (they may have
1774
1762
  been filled with get_fasteners) and results_files attributes have been filled in. It also assigns certain
@@ -1919,7 +1907,6 @@ class N2PGetLoadFasteners:
1919
1907
  # region OptionalAttributes
1920
1908
 
1921
1909
  class _N2POptionalAttributes:
1922
-
1923
1910
  """
1924
1911
  The _N2POptionalAttributes class is used to save all optional attributes of N2PGetLoadFasteners.
1925
1912
 
@@ -1963,7 +1950,6 @@ class _N2POptionalAttributes:
1963
1950
  "_shear_as_is")
1964
1951
 
1965
1952
  def __init__(self, loads):
1966
-
1967
1953
  """
1968
1954
  The constructor creates an empty _N2POptionalAttributes instance. Its attributes must be added as properties.
1969
1955
 
@@ -2017,7 +2003,6 @@ class _N2POptionalAttributes:
2017
2003
 
2018
2004
  @property
2019
2005
  def AdjacencyLevel(self) -> int:
2020
-
2021
2006
  """
2022
2007
  Property that returns the adjacency_level attribute, that is, the number of times the get_elements_attached()
2023
2008
  function will be called when loading the new model.
@@ -2028,7 +2013,6 @@ class _N2POptionalAttributes:
2028
2013
 
2029
2014
  @property
2030
2015
  def LoadSecondModel(self) -> bool:
2031
-
2032
2016
  """
2033
2017
  Property that returns the load_second_model attribute, that is, whether or not a second model will be loaded
2034
2018
  to obtain results in that model.
@@ -2039,7 +2023,6 @@ class _N2POptionalAttributes:
2039
2023
 
2040
2024
  @property
2041
2025
  def CornerData(self) -> bool:
2042
-
2043
2026
  """
2044
2027
  Property that returns the corner_data attribute, that is, whether or not there are results in the corners.
2045
2028
  """
@@ -2049,7 +2032,6 @@ class _N2POptionalAttributes:
2049
2032
 
2050
2033
  @property
2051
2034
  def MaterialFactorMetal(self) -> float:
2052
-
2053
2035
  """
2054
2036
  Property that returns the material_factor_metal attribute, that is, the material factor used to create the
2055
2037
  bypass box for metallic plates.
@@ -2060,7 +2042,6 @@ class _N2POptionalAttributes:
2060
2042
 
2061
2043
  @property
2062
2044
  def MaterialFactorComposite(self) -> float:
2063
-
2064
2045
  """
2065
2046
  Property that returns the material_factor_composite attribute, that is, the material factor used to create the
2066
2047
  bypass box for composite plates.
@@ -2071,7 +2052,6 @@ class _N2POptionalAttributes:
2071
2052
 
2072
2053
  @property
2073
2054
  def AreaFactor(self) -> float:
2074
-
2075
2055
  """
2076
2056
  Property that returns the area_factor attribute, that is, the area factor used to create the bypass box.
2077
2057
  """
@@ -2081,7 +2061,6 @@ class _N2POptionalAttributes:
2081
2061
 
2082
2062
  @property
2083
2063
  def MaxIterations(self) -> int:
2084
-
2085
2064
  """
2086
2065
  Property that returns the max_iterations attribute, that is, the maximum number of iterations allowed to create
2087
2066
  the bypass boxes.
@@ -2092,7 +2071,6 @@ class _N2POptionalAttributes:
2092
2071
 
2093
2072
  @property
2094
2073
  def ProjectionTolerance(self) -> float:
2095
-
2096
2074
  """
2097
2075
  Property that returns the projection_tolerance attribute, that is, the tolerance used when determining if a
2098
2076
  point lies within an element.
@@ -2103,7 +2081,6 @@ class _N2POptionalAttributes:
2103
2081
 
2104
2082
  @property
2105
2083
  def DefaultDiameter(self) -> float:
2106
-
2107
2084
  """
2108
2085
  Property that returns the default_diameter attribute, that is, the diameter that will be assigned to joints
2109
2086
  with no diameter.
@@ -2114,7 +2091,6 @@ class _N2POptionalAttributes:
2114
2091
 
2115
2092
  @property
2116
2093
  def ExportPrecision(self) -> int:
2117
-
2118
2094
  """
2119
2095
  Property that returns the export_precision atribute, that is, the precision used when exporting the results to
2120
2096
  a HDF5 file. It can be either 4 or 8.
@@ -2125,7 +2101,6 @@ class _N2POptionalAttributes:
2125
2101
 
2126
2102
  @property
2127
2103
  def LoadCaseNumber(self) -> int:
2128
-
2129
2104
  """
2130
2105
  Property that returns the load_case_number attribute, that is, the number of load cases that are analyzed at
2131
2106
  the same time.
@@ -2136,7 +2111,6 @@ class _N2POptionalAttributes:
2136
2111
 
2137
2112
  @property
2138
2113
  def CompressionEqualsZero(self) -> bool:
2139
-
2140
2114
  """
2141
2115
  Property that returns the compression_equals_zero attribute, that is, whether or not the pullthrough force
2142
2116
  will be set to zero when the fastener is compressed.
@@ -2147,7 +2121,6 @@ class _N2POptionalAttributes:
2147
2121
 
2148
2122
  @property
2149
2123
  def PullThroughAsIs(self) -> bool:
2150
-
2151
2124
  """
2152
2125
  Property that returns the pullthrough_as_is attribute, that is, whether or not the pullthrough force will be
2153
2126
  set to the value found in the results files.
@@ -2158,7 +2131,6 @@ class _N2POptionalAttributes:
2158
2131
 
2159
2132
  @property
2160
2133
  def ShearAsIs(self) -> bool:
2161
-
2162
2134
  """
2163
2135
  Property that returns the shear_as_is attribute, that is, whether or not the shear force will be set to the
2164
2136
  value found in the results files or not.