NaxToPy 3.2.2__tar.gz → 3.2.3__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.2/src/NaxToPy.egg-info → naxtopy-3.2.3}/PKG-INFO +12 -4
  2. {naxtopy-3.2.2 → naxtopy-3.2.3}/README.md +9 -1
  3. {naxtopy-3.2.2 → naxtopy-3.2.3}/pyproject.toml +3 -3
  4. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PNastranInputData.py +93 -51
  5. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Constants/Constants.py +4 -4
  6. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/N2PModelContent.py +31 -33
  7. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PBolt.py +1 -1
  8. {naxtopy-3.2.2 → naxtopy-3.2.3/src/NaxToPy.egg-info}/PKG-INFO +12 -4
  9. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy.egg-info/SOURCES.txt +0 -2
  10. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy.egg-info/requires.txt +2 -2
  11. naxtopy-3.2.2/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Backupy.py +0 -2000
  12. naxtopy-3.2.2/src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Vectorisation.py +0 -2742
  13. {naxtopy-3.2.2 → naxtopy-3.2.3}/LICENSE +0 -0
  14. {naxtopy-3.2.2 → naxtopy-3.2.3}/setup.cfg +0 -0
  15. {naxtopy-3.2.2 → naxtopy-3.2.3}/setup.py +0 -0
  16. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntity.py +0 -0
  17. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityElement.py +0 -0
  18. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityNode.py +0 -0
  19. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/N2PEntityShell.py +0 -0
  20. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQEntities/__init__.py +0 -0
  21. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeyword.py +0 -0
  22. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordBEAMSECTION.py +0 -0
  23. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordCOUPLING.py +0 -0
  24. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDENSITY.py +0 -0
  25. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTING.py +0 -0
  26. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordDISTRIBUTINGCOUPLING.py +0 -0
  27. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELASTIC.py +0 -0
  28. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELEMENT.py +0 -0
  29. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordELSET.py +0 -0
  30. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDINSTANCE.py +0 -0
  31. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordENDPART.py +0 -0
  32. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordINSTANCE.py +0 -0
  33. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATIC.py +0 -0
  34. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordKINEMATICCOUPLING.py +0 -0
  35. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordMATERIAL.py +0 -0
  36. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNODE.py +0 -0
  37. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordNSET.py +0 -0
  38. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordORIENTATION.py +0 -0
  39. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPART.py +0 -0
  40. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordPLASTIC.py +0 -0
  41. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSHELLSECTION.py +0 -0
  42. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSOLIDSECTION.py +0 -0
  43. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/N2PKeywordSURFACE.py +0 -0
  44. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ABQKeywords/__init__.py +0 -0
  45. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/AllClasses.py +0 -0
  46. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PAbaqusInputData.py +0 -0
  47. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PComponent.py +0 -0
  48. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PConnector.py +0 -0
  49. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PCoord.py +0 -0
  50. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PElement.py +0 -0
  51. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PFreeBody.py +0 -0
  52. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PIncrement.py +0 -0
  53. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PLoadCase.py +0 -0
  54. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PMaterial.py +0 -0
  55. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PNode.py +0 -0
  56. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PProperty.py +0 -0
  57. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PReport.py +0 -0
  58. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PResult.py +0 -0
  59. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PSection.py +0 -0
  60. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/N2PSet.py +0 -0
  61. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/ProgresBar.py +0 -0
  62. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Classes/__init__.py +0 -0
  63. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Constants/__init__.py +0 -0
  64. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Constants/librerias.py +0 -0
  65. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/N2PColors.py +0 -0
  66. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/N2PFileHandler.py +0 -0
  67. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/N2PLog.py +0 -0
  68. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Errors/__init__.py +0 -0
  69. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Reference_Finder/__Reference_Finder.py +0 -0
  70. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/Reference_Finder/__init__.py +0 -0
  71. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/_AuxFunc/_NetToPython.py +0 -0
  72. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/_AuxFunc/__init__.py +0 -0
  73. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Core/__init__.py +0 -0
  74. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/__init__.py +0 -0
  75. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/__init__.py +0 -0
  76. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/data_input_hdf5.py +0 -0
  77. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/hdf5.py +0 -0
  78. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/material.py +0 -0
  79. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/model_processor.py +0 -0
  80. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/common/property.py +0 -0
  81. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/envelope/N2PEnvelope.py +0 -0
  82. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/envelope/__init__.py +0 -0
  83. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/__init__.py +0 -0
  84. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/__init__.py +0 -0
  85. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/core_shear_crimping_airbus.py +0 -0
  86. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/dimpling_airbus.py +0 -0
  87. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/airbus/wrinkling_airbus.py +0 -0
  88. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/bruhn/__init__.py +0 -0
  89. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/__init__.py +0 -0
  90. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/core_shear_crimping_cmh.py +0 -0
  91. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/dimpling_cmh.py +0 -0
  92. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/cmh/wrinkling_cmh.py +0 -0
  93. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/esdu/__init__.py +0 -0
  94. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hsb/__init__.py +0 -0
  95. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hsb/wrinkling_hsb.py +0 -0
  96. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/__init__.py +0 -0
  97. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/crimping_hypersizer.py +0 -0
  98. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/dimpling_hypersizer.py +0 -0
  99. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/hypersizer/wrinkling_hypersizer.py +0 -0
  100. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/nasa/__init__.py +0 -0
  101. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/handbooks/nasa/wrinkling_nasa.py +0 -0
  102. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/n2ptoexe/N2PtoEXE.py +0 -0
  103. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/n2ptoexe/__init__.py +0 -0
  104. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/numericaltools/N2PCoefficientsFinder.py +0 -0
  105. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/numericaltools/__init__.py +0 -0
  106. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/__init__.py +0 -0
  107. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/__init__.py +0 -0
  108. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/delamination/N2PEdgeDelamination.py +0 -0
  109. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/delamination/__init__.py +0 -0
  110. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py +0 -0
  111. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/failure_analysis/__init__.py +0 -0
  112. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/sandwich/N2PSandwich.py +0 -0
  113. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/composite/sandwich/__init__.py +0 -0
  114. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PCalculatorRFJoints.py +0 -0
  115. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PCompRF.py +0 -0
  116. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PFastenerAnalysis.py +0 -0
  117. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PGetFasteners.py +0 -0
  118. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PGetLoadFasteners.py +0 -0
  119. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PMetalRF.py +0 -0
  120. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PRivetRF.py +0 -0
  121. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/N2PUpdateFastener.py +0 -0
  122. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetAttachments.py +0 -0
  123. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PGetResults.py +0 -0
  124. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PInterpolation.py +0 -0
  125. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PLoadModel.py +0 -0
  126. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/N2PRotation.py +0 -0
  127. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/Functions/__init__.py +0 -0
  128. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/Core/__init__.py +0 -0
  129. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysis/__init__.py +0 -0
  130. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Check/Validation.py +0 -0
  131. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/AR1DElement.py +0 -0
  132. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARAttachment.py +0 -0
  133. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARBolt.py +0 -0
  134. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlate.py +0 -0
  135. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/ARPlateElements.py +0 -0
  136. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Classes/__init__.py +0 -0
  137. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARAuxiliarFunctions.py +0 -0
  138. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARBilinearInterpolation.py +0 -0
  139. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARConfigurationInput.py +0 -0
  140. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARDerivedLoadCases.py +0 -0
  141. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARFileInputRivetsIDs.py +0 -0
  142. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetAttachments.py +0 -0
  143. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARGetBolts.py +0 -0
  144. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARReadResultsFromFile.py +0 -0
  145. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARResults.py +0 -0
  146. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARRotation.py +0 -0
  147. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/ARSerialize.py +0 -0
  148. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/Functions/__init__.py +0 -0
  149. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/Core/__init__.py +0 -0
  150. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/_N2PFastenerAnalysisDeprecated/__init__.py +0 -0
  151. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/__init__.py +0 -0
  152. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PAttachment.py +0 -0
  153. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PFastenerSystem.py +0 -0
  154. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PJoint.py +0 -0
  155. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PJointAnalysisParameters.py +0 -0
  156. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/N2PPlate.py +0 -0
  157. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/fasteners/joints/__init__.py +0 -0
  158. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/metallic/__init__.py +0 -0
  159. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/metallic/neuber/N2PNeuber.py +0 -0
  160. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/Modules/static/metallic/neuber/__init__.py +0 -0
  161. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/NaxToPy.ico +0 -0
  162. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/__init__.py +0 -0
  163. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy/user_functions.txt +0 -0
  164. {naxtopy-3.2.2 → naxtopy-3.2.3}/src/NaxToPy.egg-info/dependency_links.txt +0 -0
  165. {naxtopy-3.2.2 → naxtopy-3.2.3}/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.2
3
+ Version: 3.2.3
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
@@ -18,9 +18,9 @@ Requires-Python: >=3.9
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: pythonnet>=3.0.4
21
- Requires-Dist: numpy>=1.26.0
21
+ Requires-Dist: numpy>=1.25.1
22
22
  Requires-Dist: setuptools>=67.8.0
23
- Requires-Dist: h5py>=3.12.1
23
+ Requires-Dist: h5py>=3.8.0
24
24
  Dynamic: download-url
25
25
  Dynamic: home-page
26
26
  Dynamic: license-file
@@ -292,7 +292,15 @@ is redundant. The coordinate system will prevail.
292
292
  1. BugFix: Logs message are not printed double when the buffer is called several times.
293
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
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.
295
+ 4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly read from a bdf file.
296
+
297
+ ### v.3.2.3
298
+ 1. Refactor: lower minimum required versions of NumPy and HDF5.
299
+ - numpy >= 1.25.1
300
+ - h5py >= 3.8.0
301
+ 2. Feat: Now is possible to read Nastran and Optistruct **SET**s. They are loaded as `N2Set`.
302
+ 3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
303
+ 4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
296
304
 
297
305
  # Documentation
298
306
 
@@ -265,7 +265,15 @@ is redundant. The coordinate system will prevail.
265
265
  1. BugFix: Logs message are not printed double when the buffer is called several times.
266
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
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.
268
+ 4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly read from a bdf file.
269
+
270
+ ### v.3.2.3
271
+ 1. Refactor: lower minimum required versions of NumPy and HDF5.
272
+ - numpy >= 1.25.1
273
+ - h5py >= 3.8.0
274
+ 2. Feat: Now is possible to read Nastran and Optistruct **SET**s. They are loaded as `N2Set`.
275
+ 3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
276
+ 4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
269
277
 
270
278
  # Documentation
271
279
 
@@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "NaxToPy"
7
- version = "3.2.2"
7
+ version = "3.2.3"
8
8
  license = {text = "MIT"}
9
9
  authors = [ { name = "Idaero Solutions", email = "manuel.sanchez@idaerosolutions.com" }, ]
10
10
  requires-python = ">=3.9"
11
11
  dependencies = ["pythonnet>=3.0.4",
12
- "numpy>=1.26.0",
12
+ "numpy>=1.25.1",
13
13
  "setuptools>=67.8.0",
14
- "h5py>=3.12.1"]
14
+ "h5py>=3.8.0"]
15
15
  description = "Package for postprocessing FEM results in Python"
16
16
  readme = "README.md"
17
17
  classifiers = ["Intended Audience :: Science/Research",
@@ -6,60 +6,86 @@ from typing import Union, overload, Literal
6
6
 
7
7
  from NaxToPy.Core.Errors.N2PLog import N2PLog
8
8
 
9
+ from typing import Union
10
+
9
11
  class _LazyList(list):
10
12
  """
11
13
  A lazy list connected to a LazyDict. The items are lazily instantiated
12
- from the LazyDict when accessed. It is immutable
14
+ from the LazyDict when accessed. It is immutable.
13
15
  """
14
16
  def __init__(self, lazy_dict):
15
- super().__init__([None] * len(lazy_dict)) # Initialize list with placeholders
17
+ # Extract the C# object references (not the tuple keys!)
18
+ self._cs_refs = []
19
+ for hash_code, cs_list in lazy_dict._hash_to_cs_list.items():
20
+ self._cs_refs.extend(cs_list)
21
+
22
+ super().__init__([None] * len(self._cs_refs)) # Initialize with placeholders
16
23
  self._lazy_dict = lazy_dict
17
- self.keys = list(lazy_dict.keys()) # Extract keys from the LazyDict
18
24
 
19
25
  def __getitem__(self, index: Union[slice, int]):
20
- if isinstance(index, int):
21
- if not (0 <= index < len(self.keys)):
22
- raise IndexError("list index out of range")
26
+ if isinstance(index, slice):
27
+ # Handle slice: load each item in the slice range
28
+ indices = range(*index.indices(len(self._cs_refs)))
29
+ return [self._load_item(i) for i in indices]
23
30
  else:
24
- if index.stop > len(self.keys):
25
- raise IndexError("list slice stop out of range")
26
-
27
- # Get the key corresponding to the index
28
- key = self.keys[index]
31
+ # Handle single index
32
+ if not (-len(self._cs_refs) <= index < len(self._cs_refs)):
33
+ raise IndexError("list index out of range")
34
+
35
+ # Normalize negative indices
36
+ if index < 0:
37
+ index = len(self._cs_refs) + index
38
+
39
+ return self._load_item(index)
40
+
41
+ def __iter__(self):
42
+ """Override iterator to trigger lazy loading."""
43
+ for i in range(len(self._cs_refs)):
44
+ yield self._load_item(i)
45
+
46
+ def _load_item(self, index: int):
47
+ """Load and cache a single item at the given index."""
29
48
  value = super().__getitem__(index)
30
-
49
+
31
50
  if value is None:
32
- # Trigger the LazyDict to create the value
33
- value = self._lazy_dict[key]
51
+ # Get the C# object reference and use it to access LazyDict
52
+ cs_ref = self._cs_refs[index]
53
+ value = self._lazy_dict[cs_ref] # Pass C# object
34
54
  # Update the list with the created value
35
55
  super().__setitem__(index, value)
36
-
56
+
37
57
  return value
38
-
58
+
59
+ # Make it truly immutable by blocking mutations
39
60
  def __setitem__(self, index, value):
40
- raise TypeError("ListBulkDataCards is immutable")
41
-
61
+ raise TypeError("_LazyList is immutable")
62
+
63
+ def __delitem__(self, index):
64
+ raise TypeError("_LazyList is immutable")
65
+
42
66
  def append(self, value):
43
- raise TypeError("ListBulkDataCards is immutable")
44
-
67
+ raise TypeError("_LazyList is immutable")
68
+
45
69
  def extend(self, iterable):
46
- raise TypeError("ListBulkDataCards is immutable")
47
-
70
+ raise TypeError("_LazyList is immutable")
71
+
48
72
  def insert(self, index, value):
49
- raise TypeError("ListBulkDataCards is immutable")
50
-
51
- def pop(self, index=-1):
52
- raise TypeError("ListBulkDataCards is immutable")
53
-
73
+ raise TypeError("_LazyList is immutable")
74
+
54
75
  def remove(self, value):
55
- raise TypeError("ListBulkDataCards is immutable")
56
-
76
+ raise TypeError("_LazyList is immutable")
77
+
78
+ def pop(self, index=-1):
79
+ raise TypeError("_LazyList is immutable")
80
+
57
81
  def clear(self):
58
- raise TypeError("ListBulkDataCards is immutable")
82
+ raise TypeError("_LazyList is immutable")
59
83
 
60
- def __iter__(self):
61
- for index in range(len(self.keys)):
62
- yield self[index] # Trigger lazy evaluation for each item
84
+ def sort(self, **kwargs):
85
+ raise TypeError("_LazyList is immutable")
86
+
87
+ def reverse(self):
88
+ raise TypeError("_LazyList is immutable")
63
89
 
64
90
 
65
91
  class IndexTrackingList(list):
@@ -298,30 +324,44 @@ class N2PNastranInputData:
298
324
  # self.__listcomments = [N2PInputDataNas(i) for i in self.__inputfiledata.StructuredInfo.ModelComments]
299
325
  # return self.__listcomments
300
326
 
301
- def find_cards(self, superElements: int,
327
+ def find_cards(self,
302
328
  category: Literal["GRID", "ELEMENT", "CONNECTOR", "PROPERTY", "MATERIAL", "COORDINATESYSTEM", "LOAD", "CONSTRAINT"],
303
- cardTypes: list[str] = None, filters: dict[str, object] = None) -> list [N2PCard]:
304
- """Searches for cards based on specified criteria:
305
-
306
- - superElements (mandatory): integer number of 8 bits (1 byte)
307
- - category (mandatory): Element, property, material, etc
308
- - cardTypes (optional): Specific type of card: CQUAD4, PBEAM, COORD2R
309
- - filters (optional): Each category has common fields. It is possible to filter acordinf to those fields.
329
+ cardTypes: list[str] = None, filters: dict[str, object] = None, superElements: int = None) -> list [N2PCard]:
330
+ """Searches for cards based on specified criteria.
331
+
332
+ Args:
333
+ category: Card category to search. Valid values: GRID, ELEMENT,
334
+ CONNECTOR, PROPERTY, MATERIAL, COORDINATESYSTEM, LOAD, CONSTRAINT.
335
+ cardTypes: Specific card types to filter by (e.g., CQUAD4, PBEAM, COORD2R).
336
+ If None, all card types within the category are returned.
337
+ filters: Dictionary of field-value pairs to filter results. Available
338
+ fields depend on the category:
310
339
  - GRID: "ID", "CP", "CD", "PS", "SEID", "X1", "X2", "X3"
311
- - ELEMENT: "EID, "PID", "NodeArray"
340
+ - ELEMENT: "EID", "PID", "NodeArray"
312
341
  - CONNECTOR:
313
342
  - PROPERTY: "PID"
314
343
  - MATERIAL: "MID"
315
344
  - COORDINATESYSTEM: "CoordinateSystemIds", "ReferenceSystemId"
316
345
  - LOAD:
317
346
  - CONSTRAINT:
318
-
319
- Example:
320
-
321
- >>> grids = model.ModelInputData.find_cards(0, "GRID")
322
- >>> cuads = model.ModelInputData.find_cards(0, "ELEMENT", ["CQUAD4"])
323
- >>> pshell_3 = model.ModelInputData.find_cards(0, "PROPERTY", ["PSHELL"], {"PID": 3})
324
- >>> grids_cp10 = model.ModelInputData.find_cards(0, "GRID", None, {"CP": 10})
347
+ superElements: Superelement (part) ID to search within. Use 0 for the
348
+ global model. If None, searches across all superelements.
349
+
350
+ Returns:
351
+ List of N2PCard objects matching the specified criteria.
352
+
353
+ Examples:
354
+ >>> # Get all grids from global model
355
+ >>> grids = model.ModelInputData.find_cards("GRID", superElements=0)
356
+
357
+ >>> # Get all CQUAD4 elements from global model
358
+ >>> quads = model.ModelInputData.find_cards("ELEMENT", ["CQUAD4"], superElements=0)
359
+
360
+ >>> # Get PSHELL property with PID=3
361
+ >>> pshell_3 = model.ModelInputData.find_cards("PROPERTY", ["PSHELL"], {"PID": 3}, superElements=0)
362
+
363
+ >>> # Get all grids with CP=10 across all superelements
364
+ >>> grids_cp10 = model.ModelInputData.find_cards("GRID", filters={"CP": 10})
325
365
  """
326
366
  # Convert superElements (part id) to System.Byte[] (or None)
327
367
  if not superElements and superElements != 0:
@@ -368,7 +408,7 @@ class N2PNastranInputData:
368
408
 
369
409
  cs_result = self.__inputfiledata.BulkDataSection.FindCards(part, category, cardTypes, filter_names, filter_values)
370
410
 
371
- return [self.__dictcardscston2p[RuntimeHelpers.GetHashCode(i)] for i in cs_result]
411
+ return [self.__dictcardscston2p[i] for i in cs_result]
372
412
 
373
413
 
374
414
  def print_include_hierarchy(self) -> None:
@@ -13361,5 +13401,7 @@ CONSTRUCTDICT = {
13361
13401
  "SPCD_NASTRAN": SPCDNAS,
13362
13402
  "SPC1": SPC1,
13363
13403
  "SPCADD": SPCADD,
13364
- "UNSUPPORTED": N2PCard
13404
+ "UNSUPPORTED": N2PCard,
13405
+ "FIELD_MAPPING_ERROR_NASTRAN": N2PCard,
13406
+ "FIELD_MAPPING_ERROR_OPTISTRUCT": N2PCard
13365
13407
  }
@@ -1,15 +1,15 @@
1
1
  """Constants of the NaxToPy package"""
2
2
 
3
3
  # NaxToPy Version
4
- VERSION = "3.2.2"
4
+ VERSION = "3.2.3"
5
5
 
6
6
  # Supported for Naxto:
7
7
  NAXTO_VERSION = '2025R2'
8
- NAXTO_STEP = "2"
9
- NAXTO_ADVANCED_INSTALLER = "2025.2.2"
8
+ NAXTO_STEP = "3"
9
+ NAXTO_ADVANCED_INSTALLER = "2025.2.3"
10
10
 
11
11
  # Assembly version of NaxToModel.dll
12
- VIZZER_COMPATIBILITY = ("5.2.0.2")
12
+ VIZZER_COMPATIBILITY = ("5.2.0.3")
13
13
  """Tuple with the compatible versions of NaxToModel.dll"""
14
14
 
15
15
  # PYTHON EXTERNO ----------------------------------------------------------------------------------
@@ -312,49 +312,47 @@ class N2PModelContent:
312
312
 
313
313
  def __init__(self, keys_list: list):
314
314
  super().__init__()
315
- self._hash_to_cs = dict()
316
- self._collision_counter = {} # Track collision index per hash
315
+ self._hash_to_cs_list = {} # hash -> list of C# objects
317
316
 
318
317
  for cs_ref in keys_list:
319
318
  if cs_ref.GetN2PCardType() not in CONSTRUCTDICT:
320
319
  continue
321
320
 
322
- hash = RuntimeHelpers.GetHashCode(cs_ref)
321
+ hash_code = RuntimeHelpers.GetHashCode(cs_ref)
323
322
 
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)
323
+ if hash_code not in self._hash_to_cs_list:
324
+ self._hash_to_cs_list[hash_code] = []
331
325
 
326
+ self._hash_to_cs_list[hash_code].append(cs_ref)
327
+ # Store with unique tuple key
328
+ unique_key = (hash_code, len(self._hash_to_cs_list[hash_code]) - 1)
332
329
  self[unique_key] = None
333
- self._hash_to_cs[unique_key] = cs_ref
334
330
 
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)
331
+ def __getitem__(self, cs_key):
332
+ hash_code = RuntimeHelpers.GetHashCode(cs_key)
343
333
 
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
-
350
- value = CONSTRUCTDICT.get(cs_ref.GetN2PCardType())
351
- if value:
352
- constructed = value(cs_ref)
353
- self[key] = constructed
354
- return constructed
355
- return None
356
- else:
357
- return self.get(key)
334
+ if hash_code not in self._hash_to_cs_list:
335
+ raise KeyError(f"Object not found")
336
+
337
+ # Find the matching C# object by reference equality
338
+ cs_objects = self._hash_to_cs_list[hash_code]
339
+
340
+ for idx, cs_ref in enumerate(cs_objects):
341
+ if System.Object.ReferenceEquals(cs_ref, cs_key): # Checks C# object identity directly
342
+ key = (hash_code, idx)
343
+
344
+ if self.get(key) is None:
345
+ # Lazy construction
346
+ value = CONSTRUCTDICT.get(cs_ref.GetN2PCardType(), CONSTRUCTDICT["UNSUPPORTED"])
347
+ if value:
348
+ constructed = value(cs_ref)
349
+ self[key] = constructed
350
+ return constructed
351
+ return None
352
+ else:
353
+ return self.get(key)
354
+
355
+ raise KeyError(f"Object not found in collision list")
358
356
 
359
357
  cslistbulkdatacards = self.__vzmodel.NasOptInputReader.BulkDataSection.GetCardDataBaseList()
360
358
  self.__modelinputdata = N2PNastranInputData(
@@ -68,7 +68,7 @@ class N2PBolt:
68
68
  self._id: int = int(self.__info__.ID)
69
69
  self._one_dim_elems_id_list: list[int] = list(self.__info__.OneDimElemsIdList)
70
70
 
71
- self._cards: list[N2PCard] = [self.__input_data_father__._N2PNastranInputData__dictcardscston2p[RuntimeHelpers.GetHashCode(i)]
71
+ self._cards: list[N2PCard] = [self.__input_data_father__._N2PNastranInputData__dictcardscston2p[i]
72
72
  for i in self.__info__.Cards if self.__info__.Cards[0] is not None]
73
73
  self._type: str = self.__info__.Type.ToString()
74
74
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: NaxToPy
3
- Version: 3.2.2
3
+ Version: 3.2.3
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
@@ -18,9 +18,9 @@ Requires-Python: >=3.9
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
20
  Requires-Dist: pythonnet>=3.0.4
21
- Requires-Dist: numpy>=1.26.0
21
+ Requires-Dist: numpy>=1.25.1
22
22
  Requires-Dist: setuptools>=67.8.0
23
- Requires-Dist: h5py>=3.12.1
23
+ Requires-Dist: h5py>=3.8.0
24
24
  Dynamic: download-url
25
25
  Dynamic: home-page
26
26
  Dynamic: license-file
@@ -292,7 +292,15 @@ is redundant. The coordinate system will prevail.
292
292
  1. BugFix: Logs message are not printed double when the buffer is called several times.
293
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
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.
295
+ 4. BugFix: MCID in CQUAD4 and CTRIA3 are now correctly read from a bdf file.
296
+
297
+ ### v.3.2.3
298
+ 1. Refactor: lower minimum required versions of NumPy and HDF5.
299
+ - numpy >= 1.25.1
300
+ - h5py >= 3.8.0
301
+ 2. Feat: Now is possible to read Nastran and Optistruct **SET**s. They are loaded as `N2Set`.
302
+ 3. Refactor: Reorder in `N2PNastranInputData.find_cards()` params making superElements optional. `category` is the first argument. `superElements` is now optional (default=None) to allow searching across all superelements by default.
303
+ 4. BugFix: Internal lazy dictionary for N2Cards (reading a Nastran or Optistruct input file) is fixed.
296
304
 
297
305
  # Documentation
298
306
 
@@ -108,8 +108,6 @@ src/NaxToPy/Modules/static/composite/__init__.py
108
108
  src/NaxToPy/Modules/static/composite/delamination/N2PEdgeDelamination.py
109
109
  src/NaxToPy/Modules/static/composite/delamination/__init__.py
110
110
  src/NaxToPy/Modules/static/composite/failure_analysis/N2PCompositeFailure.py
111
- src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Backupy.py
112
- src/NaxToPy/Modules/static/composite/failure_analysis/N2PFailureComposite_Vectorisation.py
113
111
  src/NaxToPy/Modules/static/composite/failure_analysis/__init__.py
114
112
  src/NaxToPy/Modules/static/composite/sandwich/N2PSandwich.py
115
113
  src/NaxToPy/Modules/static/composite/sandwich/__init__.py
@@ -1,4 +1,4 @@
1
1
  pythonnet>=3.0.4
2
- numpy>=1.26.0
2
+ numpy>=1.25.1
3
3
  setuptools>=67.8.0
4
- h5py>=3.12.1
4
+ h5py>=3.8.0