fibernet 4.0.2__tar.gz → 4.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. {fibernet-4.0.2 → fibernet-4.0.4}/CHANGELOG.md +32 -0
  2. {fibernet-4.0.2 → fibernet-4.0.4}/PKG-INFO +3 -3
  3. {fibernet-4.0.2 → fibernet-4.0.4}/README.md +2 -2
  4. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/__init__.py +1 -1
  5. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/accelerated.py +91 -73
  6. {fibernet-4.0.2 → fibernet-4.0.4}/pyproject.toml +1 -1
  7. {fibernet-4.0.2 → fibernet-4.0.4}/CONTRIBUTING.md +0 -0
  8. {fibernet-4.0.2 → fibernet-4.0.4}/LICENSE +0 -0
  9. {fibernet-4.0.2 → fibernet-4.0.4}/MANIFEST.in +0 -0
  10. {fibernet-4.0.2 → fibernet-4.0.4}/docs/api/index.rst +0 -0
  11. {fibernet-4.0.2 → fibernet-4.0.4}/docs/changelog.rst +0 -0
  12. {fibernet-4.0.2 → fibernet-4.0.4}/docs/conf.py +0 -0
  13. {fibernet-4.0.2 → fibernet-4.0.4}/docs/contributing.rst +0 -0
  14. {fibernet-4.0.2 → fibernet-4.0.4}/docs/getting_started.rst +0 -0
  15. {fibernet-4.0.2 → fibernet-4.0.4}/docs/index.rst +0 -0
  16. {fibernet-4.0.2 → fibernet-4.0.4}/docs/quickstart.rst +0 -0
  17. {fibernet-4.0.2 → fibernet-4.0.4}/docs/tutorials.rst +0 -0
  18. {fibernet-4.0.2 → fibernet-4.0.4}/examples/01_mechanical_analysis.py +0 -0
  19. {fibernet-4.0.2 → fibernet-4.0.4}/examples/02_structure_comparison.py +0 -0
  20. {fibernet-4.0.2 → fibernet-4.0.4}/examples/03_thermal_analysis.py +0 -0
  21. {fibernet-4.0.2 → fibernet-4.0.4}/examples/04_buckling_analysis.py +0 -0
  22. {fibernet-4.0.2 → fibernet-4.0.4}/examples/05_chiral_braided_structures.py +0 -0
  23. {fibernet-4.0.2 → fibernet-4.0.4}/examples/06_uncertainty_quantification.py +0 -0
  24. {fibernet-4.0.2 → fibernet-4.0.4}/examples/07_electromagnetic_analysis.py +0 -0
  25. {fibernet-4.0.2 → fibernet-4.0.4}/examples/08_fatigue_analysis.py +0 -0
  26. {fibernet-4.0.2 → fibernet-4.0.4}/examples/09_creep_analysis.py +0 -0
  27. {fibernet-4.0.2 → fibernet-4.0.4}/examples/10_diffusion_transport.py +0 -0
  28. {fibernet-4.0.2 → fibernet-4.0.4}/examples/11_parameter_sweep.py +0 -0
  29. {fibernet-4.0.2 → fibernet-4.0.4}/examples/12_topology_analysis.py +0 -0
  30. {fibernet-4.0.2 → fibernet-4.0.4}/examples/13_publication_workflow.py +0 -0
  31. {fibernet-4.0.2 → fibernet-4.0.4}/examples/14_advanced_analysis.py +0 -0
  32. {fibernet-4.0.2 → fibernet-4.0.4}/examples/15_ml_property_prediction.py +0 -0
  33. {fibernet-4.0.2 → fibernet-4.0.4}/examples/16_fiber_bundles.py +0 -0
  34. {fibernet-4.0.2 → fibernet-4.0.4}/examples/17_composite_laminates.py +0 -0
  35. {fibernet-4.0.2 → fibernet-4.0.4}/examples/18_pyvista_visualization.py +0 -0
  36. {fibernet-4.0.2 → fibernet-4.0.4}/examples/19_optimization.py +0 -0
  37. {fibernet-4.0.2 → fibernet-4.0.4}/examples/__init__.py +0 -0
  38. {fibernet-4.0.2 → fibernet-4.0.4}/examples/advanced_generators.py +0 -0
  39. {fibernet-4.0.2 → fibernet-4.0.4}/examples/comprehensive_demo.py +0 -0
  40. {fibernet-4.0.2 → fibernet-4.0.4}/examples/full_workflow.py +0 -0
  41. {fibernet-4.0.2 → fibernet-4.0.4}/examples/integration_examples.py +0 -0
  42. {fibernet-4.0.2 → fibernet-4.0.4}/examples/ml_example.py +0 -0
  43. {fibernet-4.0.2 → fibernet-4.0.4}/examples/nonlinear_mechanics.py +0 -0
  44. {fibernet-4.0.2 → fibernet-4.0.4}/examples/research_case_study.py +0 -0
  45. {fibernet-4.0.2 → fibernet-4.0.4}/examples/transformations.py +0 -0
  46. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/__init__.py +0 -0
  47. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/advanced.py +0 -0
  48. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/comparison.py +0 -0
  49. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/homogenization.py +0 -0
  50. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/morphology.py +0 -0
  51. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/networkx_integration.py +0 -0
  52. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/percolation.py +0 -0
  53. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/properties.py +0 -0
  54. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/spatial.py +0 -0
  55. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/statistics.py +0 -0
  56. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/stress_strain.py +0 -0
  57. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/_archived/topology.py +0 -0
  58. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/graph_features.py +0 -0
  59. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/analysis/graph_features_3d.py +0 -0
  60. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/api.py +0 -0
  61. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/__init__.py +0 -0
  62. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/copy_utils.py +0 -0
  63. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/crosslinks.py +0 -0
  64. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/fiber.py +0 -0
  65. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/material.py +0 -0
  66. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/network.py +0 -0
  67. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/pbc.py +0 -0
  68. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/structure_graph.py +0 -0
  69. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/tiling.py +0 -0
  70. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/transform.py +0 -0
  71. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/core/transforms.py +0 -0
  72. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/doe.py +0 -0
  73. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/easy.py +0 -0
  74. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/examples/__init__.py +0 -0
  75. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/examples/basic_usage.py +0 -0
  76. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/__init__.py +0 -0
  77. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/_fixes.py +0 -0
  78. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/_graph_builder.py +0 -0
  79. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/advanced.py +0 -0
  80. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/bundles.py +0 -0
  81. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/chiral.py +0 -0
  82. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/curved.py +0 -0
  83. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/disordered.py +0 -0
  84. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/field_guided.py +0 -0
  85. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/fractal.py +0 -0
  86. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/gradient.py +0 -0
  87. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/hierarchical.py +0 -0
  88. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/laminates.py +0 -0
  89. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/metamaterials.py +0 -0
  90. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/ordered.py +0 -0
  91. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/pattern.py +0 -0
  92. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/regular.py +0 -0
  93. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/specialized.py +0 -0
  94. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/tpms.py +0 -0
  95. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/unified.py +0 -0
  96. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/variants.py +0 -0
  97. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/woven.py +0 -0
  98. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/gen/zigzag.py +0 -0
  99. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/graph/__init__.py +0 -0
  100. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/graph/io.py +0 -0
  101. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/graph/weld.py +0 -0
  102. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/__init__.py +0 -0
  103. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/lammps_integration.py +0 -0
  104. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/mdanalysis_integration.py +0 -0
  105. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/networkx_integration.py +0 -0
  106. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/integrations/ovito_integration.py +0 -0
  107. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/__init__.py +0 -0
  108. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/fea_export.py +0 -0
  109. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/gmsh.py +0 -0
  110. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/lammps.py +0 -0
  111. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/mesh_export.py +0 -0
  112. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/pandas_io.py +0 -0
  113. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/pdb.py +0 -0
  114. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/vtk.py +0 -0
  115. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/io/xyz.py +0 -0
  116. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/materials.py +0 -0
  117. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/__init__.py +0 -0
  118. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/dataset.py +0 -0
  119. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/dataset_v2.py +0 -0
  120. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/graph_neural_network.py +0 -0
  121. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/_archived/predictor.py +0 -0
  122. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/features.py +0 -0
  123. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/ml/utils.py +0 -0
  124. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/py.typed +0 -0
  125. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/pyvista_viz.py +0 -0
  126. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/rl/__init__.py +0 -0
  127. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/rl/parametric.py +0 -0
  128. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/rl/utils.py +0 -0
  129. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/scripts/validate_3d_units.py +0 -0
  130. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/scripts/validate_3d_v2.py +0 -0
  131. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/__init__.py +0 -0
  132. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/acoustic.py +0 -0
  133. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/buckling_analysis.py +0 -0
  134. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/coupled.py +0 -0
  135. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/coupling.py +0 -0
  136. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/creep.py +0 -0
  137. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/cte.py +0 -0
  138. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/damage.py +0 -0
  139. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/diffusion.py +0 -0
  140. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/dma.py +0 -0
  141. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/dynamics.py +0 -0
  142. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/electromagnetic.py +0 -0
  143. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fatigue.py +0 -0
  144. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fluid.py +0 -0
  145. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fracture.py +0 -0
  146. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/fracture_mechanics.py +0 -0
  147. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/incremental_fem.py +0 -0
  148. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/mechanical.py +0 -0
  149. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/molecular_dynamics.py +0 -0
  150. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/multiscale.py +0 -0
  151. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/nonlinear.py +0 -0
  152. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/optimization.py +0 -0
  153. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/periodic.py +0 -0
  154. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/permeability.py +0 -0
  155. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/rheology.py +0 -0
  156. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/rl_environment.py +0 -0
  157. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/thermal.py +0 -0
  158. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/uncertainty.py +0 -0
  159. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/validation.py +0 -0
  160. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived/viscoelastic.py +0 -0
  161. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived_fem/__init__.py +0 -0
  162. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_archived_fem/taichi_fem.py +0 -0
  163. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/_fem_archive.py +0 -0
  164. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/fem.py +0 -0
  165. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/sim/rl_env.py +0 -0
  166. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/trimesh_integration.py +0 -0
  167. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/units.py +0 -0
  168. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/__init__.py +0 -0
  169. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/batch.py +0 -0
  170. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/config.py +0 -0
  171. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/ensemble.py +0 -0
  172. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/exceptions.py +0 -0
  173. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/geometry.py +0 -0
  174. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/io.py +0 -0
  175. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/parametric.py +0 -0
  176. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/units.py +0 -0
  177. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/utils/validation.py +0 -0
  178. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/version.py +0 -0
  179. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/visualization.py +0 -0
  180. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/__init__.py +0 -0
  181. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/advanced.py +0 -0
  182. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/animate.py +0 -0
  183. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/graph_plot.py +0 -0
  184. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/plot2d.py +0 -0
  185. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/plotly_viz.py +0 -0
  186. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/render.py +0 -0
  187. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/render3d.py +0 -0
  188. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/renderer.py +0 -0
  189. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/showcase.py +0 -0
  190. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/showcase_renderer.py +0 -0
  191. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet/viz/visualization.py +0 -0
  192. {fibernet-4.0.2 → fibernet-4.0.4}/fibernet.egg-info/SOURCES.txt +0 -0
  193. {fibernet-4.0.2 → fibernet-4.0.4}/requirements-dev.txt +0 -0
  194. {fibernet-4.0.2 → fibernet-4.0.4}/requirements.txt +0 -0
  195. {fibernet-4.0.2 → fibernet-4.0.4}/setup.cfg +0 -0
  196. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_accelerated.py +0 -0
  197. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_acoustic.py +0 -0
  198. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_advanced.py +0 -0
  199. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_advanced_statistics.py +0 -0
  200. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_api.py +0 -0
  201. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_benchmark.py +0 -0
  202. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_buckling_analysis.py +0 -0
  203. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_bundles.py +0 -0
  204. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_comparison.py +0 -0
  205. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_copy.py +0 -0
  206. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_coupled.py +0 -0
  207. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_creep.py +0 -0
  208. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_cte.py +0 -0
  209. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_curved.py +0 -0
  210. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_damage.py +0 -0
  211. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_diffusion.py +0 -0
  212. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_dma.py +0 -0
  213. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_dynamics.py +0 -0
  214. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_edge_cases.py +0 -0
  215. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_effective_properties.py +0 -0
  216. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_electromagnetic.py +0 -0
  217. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_ensemble.py +0 -0
  218. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fatigue.py +0 -0
  219. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fea_export.py +0 -0
  220. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_field_guided.py +0 -0
  221. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fluid_acoustic.py +0 -0
  222. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fractal.py +0 -0
  223. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_fracture_mechanics.py +0 -0
  224. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_generators.py +0 -0
  225. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_gnn.py +0 -0
  226. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_gradient.py +0 -0
  227. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_graph_api.py +0 -0
  228. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_graph_neural_network.py +0 -0
  229. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_homogenization.py +0 -0
  230. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_incremental_fem.py +0 -0
  231. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_integration.py +0 -0
  232. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_integration_v3.py +0 -0
  233. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_integrations.py +0 -0
  234. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_io.py +0 -0
  235. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_laminates.py +0 -0
  236. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_mesh_export.py +0 -0
  237. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_metamaterial_workflow.py +0 -0
  238. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_metamaterials.py +0 -0
  239. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_ml.py +0 -0
  240. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_molecular_dynamics.py +0 -0
  241. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_multiscale.py +0 -0
  242. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_nonlinear.py +0 -0
  243. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_optimization.py +0 -0
  244. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_pandas_io.py +0 -0
  245. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_parametric.py +0 -0
  246. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_pbc.py +0 -0
  247. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_percolation.py +0 -0
  248. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_periodic.py +0 -0
  249. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_permeability.py +0 -0
  250. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_pyvista.py +0 -0
  251. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_rl_environment.py +0 -0
  252. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_simulation.py +0 -0
  253. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_specialized.py +0 -0
  254. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_stress_strain.py +0 -0
  255. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_taichi_fem.py +0 -0
  256. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_topology.py +0 -0
  257. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_tpms.py +0 -0
  258. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_transforms.py +0 -0
  259. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_trimesh.py +0 -0
  260. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_uncertainty.py +0 -0
  261. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_validation.py +0 -0
  262. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_viscoelastic.py +0 -0
  263. {fibernet-4.0.2 → fibernet-4.0.4}/tests/_archived/test_visualization.py +0 -0
  264. {fibernet-4.0.2 → fibernet-4.0.4}/tests/conftest.py +0 -0
  265. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_3d_units.py +0 -0
  266. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_config.py +0 -0
  267. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_core.py +0 -0
  268. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_crosslinks.py +0 -0
  269. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_doe.py +0 -0
  270. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_materials.py +0 -0
  271. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_ml_rl_utils.py +0 -0
  272. {fibernet-4.0.2 → fibernet-4.0.4}/tests/test_units.py +0 -0
@@ -1,3 +1,35 @@
1
+ ## [4.0.4] - 2026-07-17
2
+
3
+ ### Fixed
4
+ - **Critical: Progressive slowdown during batch simulation (kernel recompilation)**
5
+ - Moved `@ti.kernel def substep()` out of `dynamics()` method body
6
+ - Kernel now compiled once per `(dim, num_nodes, num_edges)` and cached alongside fields
7
+ - Before: Each `dynamics()` call recompiled the kernel → Taichi LLVM accumulated modules → progressive slowdown
8
+ - After: Kernel cached → constant per-structure time across hundreds of calls
9
+ - Test: 50 structures, first-10 avg = 6.60s, last-10 avg = 7.09s (ratio 1.07x — no slowdown)
10
+
11
+ ### Technical Details
12
+ - File: `fibernet/sim/accelerated.py`
13
+ - Change: Kernel definition moved inside the `_field_cache` allocation block, stored as `cached['substep']`
14
+ - Impact: Eliminates ~0.5-1s kernel compilation overhead per call after the first
15
+ - Combined with 4.0.2 (vectorized save) and 4.0.3 (field cache): total ~16x speedup from original
16
+
17
+ ## [4.0.3] - 2026-07-17
18
+
19
+ ### Fixed
20
+ - **Critical: Taichi SNode exhaustion causing simulation hang at ~128 structures**
21
+ - Added `_field_cache` to `TaichiEngine` class
22
+ - Reuses Taichi fields across calls with same `(dim, num_nodes, num_edges)`
23
+ - Before: Each `dynamics()` call allocated 14 Taichi fields → SNode limit (~1024) hit at ~128 calls → process hangs indefinitely
24
+ - After: Fields cached and reused → tested 150+ structures without hang
25
+ - Memory usage reduced significantly (no field accumulation)
26
+
27
+ ### Technical Details
28
+ - File: `fibernet/sim/accelerated.py`
29
+ - Change: Added class-level `_field_cache` dict keyed by `(dim, num_nodes, num_edges)`
30
+ - Impact: Fixes critical hang bug, improves memory efficiency
31
+ - Test: Successfully ran 150 structures sequentially (previously hung at #128)
32
+
1
33
  ## [4.0.2] - 2026-07-16
2
34
 
3
35
  ### Performance
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fibernet
3
- Version: 4.0.2
3
+ Version: 4.0.4
4
4
  Summary: A comprehensive fiber network generation, simulation, and ML toolkit for materials science research
5
5
  Author: FiberNet Contributors
6
6
  License-Expression: MIT
@@ -86,7 +86,7 @@ Dynamic: license-file
86
86
 
87
87
  ---
88
88
 
89
- [![PyPI version](https://img.shields.io/pypi/v/fibernet.svg?logo=pypi&logoColor=white&label=PyPI)](https://pypi.org/project/fibernet/4.0.2/)
89
+ [![PyPI version](https://img.shields.io/pypi/v/fibernet.svg?logo=pypi&logoColor=white&label=PyPI)](https://pypi.org/project/fibernet/4.0.3/)
90
90
  [![Python](https://img.shields.io/badge/Python-3.9%2B-blue?logo=python&logoColor=white)](https://www.python.org/)
91
91
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
92
92
  [![Downloads](https://img.shields.io/pypi/dm/fibernet.svg?label=Downloads&color=brightgreen)](https://pypi.org/project/fibernet/)
@@ -626,4 +626,4 @@ python3 tutorials/v4_tutorial/test_pipeline.py --full
626
626
 
627
627
  ---
628
628
 
629
- *FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.2/) | [GitHub](https://github.com/GellmanSparrowS/fibernet)*
629
+ *FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.3/) | [GitHub](https://github.com/GellmanSparrowS/fibernet)*
@@ -7,7 +7,7 @@
7
7
 
8
8
  ---
9
9
 
10
- [![PyPI version](https://img.shields.io/pypi/v/fibernet.svg?logo=pypi&logoColor=white&label=PyPI)](https://pypi.org/project/fibernet/4.0.2/)
10
+ [![PyPI version](https://img.shields.io/pypi/v/fibernet.svg?logo=pypi&logoColor=white&label=PyPI)](https://pypi.org/project/fibernet/4.0.3/)
11
11
  [![Python](https://img.shields.io/badge/Python-3.9%2B-blue?logo=python&logoColor=white)](https://www.python.org/)
12
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
13
13
  [![Downloads](https://img.shields.io/pypi/dm/fibernet.svg?label=Downloads&color=brightgreen)](https://pypi.org/project/fibernet/)
@@ -547,4 +547,4 @@ python3 tutorials/v4_tutorial/test_pipeline.py --full
547
547
 
548
548
  ---
549
549
 
550
- *FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.2/) | [GitHub](https://github.com/GellmanSparrowS/fibernet)*
550
+ *FiberNet v4.0.0 | [PyPI](https://pypi.org/project/fibernet/4.0.3/) | [GitHub](https://github.com/GellmanSparrowS/fibernet)*
@@ -33,7 +33,7 @@ Parametric Structure Generation (for RL)
33
33
  >>> internal = g.get_internal_nodes() # Nodes available for RL actions
34
34
  """
35
35
 
36
- __version__ = "4.0.2"
36
+ __version__ = "4.0.4"
37
37
 
38
38
  # --- Core ---
39
39
  from fibernet.core.structure_graph import StructureGraph, SNode, SEdge
@@ -266,6 +266,10 @@ class TaichiEngine:
266
266
  Explicit Verlet integration with damping.
267
267
  """
268
268
 
269
+ # Cache Taichi fields and kernels to avoid SNode exhaustion
270
+ # Key: (dim, num_nodes, num_edges)
271
+ _field_cache = {}
272
+
269
273
  def __init__(self, arch: str = "cpu", num_threads: int = 4):
270
274
  _ensure_taichi(arch, num_threads)
271
275
 
@@ -395,16 +399,94 @@ class TaichiEngine:
395
399
  else:
396
400
  stiff_np = np.full(num_edges, stiffness)
397
401
 
398
- # Taichi fields (allocated once)
399
- ti_pos = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
400
- ti_vel = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
401
- ti_edges = ti.Vector.field(2, dtype=ti.i32, shape=num_edges)
402
- ti_L0 = ti.field(dtype=ti.f64, shape=num_edges)
403
- ti_k = ti.field(dtype=ti.f64, shape=num_edges)
404
- ti_fixed = ti.field(dtype=ti.i32, shape=num_nodes)
405
- ti_ext = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
406
- ti_pos0 = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
402
+ # Taichi fields and kernel (cached to avoid SNode exhaustion and kernel recompilation)
403
+ cache_key = (dim, num_nodes, num_edges)
404
+ if cache_key not in TaichiEngine._field_cache:
405
+ # Allocate fields once
406
+ ti_pos = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
407
+ ti_vel = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
408
+ ti_edges = ti.Vector.field(2, dtype=ti.i32, shape=num_edges)
409
+ ti_L0 = ti.field(dtype=ti.f64, shape=num_edges)
410
+ ti_k = ti.field(dtype=ti.f64, shape=num_edges)
411
+ ti_fixed = ti.field(dtype=ti.i32, shape=num_nodes)
412
+ ti_ext = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
413
+ ti_pos0 = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
414
+ ti_sched = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
415
+ ti_sched_mask = ti.field(dtype=ti.i32, shape=num_nodes)
416
+ ti_dt = ti.field(dtype=ti.f64, shape=())
417
+ ti_dashpot = ti.field(dtype=ti.f64, shape=())
418
+ ti_drag = ti.field(dtype=ti.f64, shape=())
419
+ ti_ramp = ti.field(dtype=ti.f64, shape=())
420
+
421
+ # Compile kernel once (closure captures fields + constants)
422
+ @ti.kernel
423
+ def _cached_substep():
424
+ _dt = ti_dt[None]
425
+ _dash = ti_dashpot[None]
426
+ _drag = ti_drag[None]
427
+ _ramp = ti_ramp[None]
428
+
429
+ for e in range(num_edges):
430
+ ia = ti_edges[e][0]
431
+ ib = ti_edges[e][1]
432
+ d = ti_pos[ia] - ti_pos[ib]
433
+ dist = d.norm() + 1e-6
434
+ dir_ = d / dist
435
+ f_spring = -ti_k[e] * dir_ * (dist / ti_L0[e] - 1.0)
436
+ rel_v = ti_vel[ia] - ti_vel[ib]
437
+ f_damp = -_dash * rel_v.dot(dir_) * dir_ * ti_L0[e]
438
+ f_total = f_spring + f_damp
439
+ for k in ti.static(range(dim)):
440
+ ti.atomic_add(ti_vel[ia][k], f_total[k] * _dt)
441
+ ti.atomic_add(ti_vel[ib][k], -f_total[k] * _dt)
407
442
 
443
+ for i in range(num_nodes):
444
+ for k in ti.static(range(dim)):
445
+ ti_vel[i][k] += ti_ext[i][k] * _dt
446
+ ti_vel[i] *= ti.exp(-_drag * _dt)
447
+ for k in ti.static(range(dim)):
448
+ ti_pos[i][k] += ti_vel[i][k] * _dt
449
+
450
+ for i in range(num_nodes):
451
+ if ti_fixed[i] == 1:
452
+ for k in ti.static(range(dim)):
453
+ ti_pos[i][k] = ti_pos0[i][k]
454
+ ti_vel[i][k] = 0.0
455
+
456
+ for i in range(num_nodes):
457
+ if ti_sched_mask[i] == 1:
458
+ for k in ti.static(range(dim)):
459
+ ti_pos[i][k] = ti_pos0[i][k] + ti_sched[i][k] * _ramp
460
+ ti_vel[i][k] = 0.0
461
+
462
+ TaichiEngine._field_cache[cache_key] = {
463
+ 'ti_pos': ti_pos, 'ti_vel': ti_vel, 'ti_edges': ti_edges,
464
+ 'ti_L0': ti_L0, 'ti_k': ti_k, 'ti_fixed': ti_fixed,
465
+ 'ti_ext': ti_ext, 'ti_pos0': ti_pos0, 'ti_sched': ti_sched,
466
+ 'ti_sched_mask': ti_sched_mask, 'ti_dt': ti_dt,
467
+ 'ti_dashpot': ti_dashpot, 'ti_drag': ti_drag, 'ti_ramp': ti_ramp,
468
+ 'substep': _cached_substep,
469
+ }
470
+
471
+ # Retrieve cached fields and kernel
472
+ cached = TaichiEngine._field_cache[cache_key]
473
+ ti_pos = cached['ti_pos']
474
+ ti_vel = cached['ti_vel']
475
+ ti_edges = cached['ti_edges']
476
+ ti_L0 = cached['ti_L0']
477
+ ti_k = cached['ti_k']
478
+ ti_fixed = cached['ti_fixed']
479
+ ti_ext = cached['ti_ext']
480
+ ti_pos0 = cached['ti_pos0']
481
+ ti_sched = cached['ti_sched']
482
+ ti_sched_mask = cached['ti_sched_mask']
483
+ ti_dt = cached['ti_dt']
484
+ ti_dashpot = cached['ti_dashpot']
485
+ ti_drag = cached['ti_drag']
486
+ ti_ramp = cached['ti_ramp']
487
+ substep = cached['substep']
488
+
489
+ # Reset field data (always, even on cache hit)
408
490
  ti_pos0.from_numpy(pos_orig.astype(np.float64))
409
491
  ti_pos.from_numpy(pos_orig.astype(np.float64))
410
492
  ti_vel.from_numpy(np.zeros_like(pos_orig))
@@ -430,73 +512,9 @@ class TaichiEngine:
430
512
  sched_mask = np.zeros(num_nodes, dtype=np.int32)
431
513
  for ni in schedule_nodes:
432
514
  sched_mask[ni] = 1
433
- ti_sched = ti.Vector.field(dim, dtype=ti.f64, shape=num_nodes)
434
515
  ti_sched.from_numpy(schedule_targets.astype(np.float64))
435
- ti_sched_mask = ti.field(dtype=ti.i32, shape=num_nodes)
436
516
  ti_sched_mask.from_numpy(sched_mask)
437
517
 
438
- # Parameter fields
439
- ti_dt = ti.field(dtype=ti.f64, shape=())
440
- ti_dashpot = ti.field(dtype=ti.f64, shape=())
441
- ti_drag = ti.field(dtype=ti.f64, shape=())
442
- ti_ramp = ti.field(dtype=ti.f64, shape=())
443
-
444
- @ti.kernel
445
- def substep():
446
- _dt = ti_dt[None]
447
- _dash = ti_dashpot[None]
448
- _drag = ti_drag[None]
449
- _ramp = ti_ramp[None]
450
-
451
- # Spring + dashpot forces
452
- for e in range(num_edges):
453
- ia = ti_edges[e][0]
454
- ib = ti_edges[e][1]
455
- d = ti_pos[ia] - ti_pos[ib]
456
- dist = d.norm() + 1e-6
457
- dir_ = d / dist
458
-
459
- # Spring force: F = -k * dir * (dist/rest - 1)
460
- f_spring = -ti_k[e] * dir_ * (dist / ti_L0[e] - 1.0)
461
-
462
- # Dashpot: F_damp = -damp * (vi-vj).dot(dir) * dir * rest
463
- rel_v = ti_vel[ia] - ti_vel[ib]
464
- f_damp = -_dash * rel_v.dot(dir_) * dir_ * ti_L0[e]
465
-
466
- f_total = f_spring + f_damp
467
-
468
- for k in ti.static(range(dim)):
469
- ti.atomic_add(ti_vel[ia][k], f_total[k] * _dt)
470
- ti.atomic_add(ti_vel[ib][k], -f_total[k] * _dt)
471
-
472
- # Euler step + air drag + external force
473
- for i in range(num_nodes):
474
- # External force
475
- for k in ti.static(range(dim)):
476
- ti_vel[i][k] += ti_ext[i][k] * _dt
477
-
478
- # Air drag
479
- ti_vel[i] *= ti.exp(-_drag * _dt)
480
-
481
- # Position update
482
- for k in ti.static(range(dim)):
483
- ti_pos[i][k] += ti_vel[i][k] * _dt
484
-
485
- # Constraints: fixed nodes
486
- for i in range(num_nodes):
487
- if ti_fixed[i] == 1:
488
- for k in ti.static(range(dim)):
489
- ti_pos[i][k] = ti_pos0[i][k]
490
- ti_vel[i][k] = 0.0
491
-
492
- # Constraints: schedule nodes (ramped displacement)
493
- for i in range(num_nodes):
494
- if ti_sched_mask[i] == 1:
495
- for k in ti.static(range(dim)):
496
- ti_pos[i][k] = ti_pos0[i][k] + ti_sched[i][k] * _ramp
497
- ti_vel[i][k] = 0.0
498
-
499
-
500
518
  # Run loop
501
519
  ti_dt[None] = dt
502
520
  ti_dashpot[None] = dashpot
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fibernet"
7
- version = "4.0.2"
7
+ version = "4.0.4"
8
8
  description = "A comprehensive fiber network generation, simulation, and ML toolkit for materials science research"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes