loadpath 0.1.2__tar.gz → 0.1.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 (297) hide show
  1. {loadpath-0.1.2 → loadpath-0.1.3}/PKG-INFO +84 -50
  2. {loadpath-0.1.2 → loadpath-0.1.3}/README.md +83 -49
  3. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/SKILL.md +12 -0
  4. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath.egg-info/PKG-INFO +84 -50
  5. {loadpath-0.1.2 → loadpath-0.1.3}/pyproject.toml +1 -1
  6. {loadpath-0.1.2 → loadpath-0.1.3}/LICENSE +0 -0
  7. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/README.md +0 -0
  8. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/__init__.py +0 -0
  9. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/__main__.py +0 -0
  10. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/am.py +0 -0
  11. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/amgfast.py +0 -0
  12. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/assembly.py +0 -0
  13. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/__init__.py +0 -0
  14. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/beams.py +0 -0
  15. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/cases/ge-bracket.json +0 -0
  16. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/evaluate.py +0 -0
  17. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/mechanisms.py +0 -0
  18. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/problems.py +0 -0
  19. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/reference/bridge-3d.top3d.npz +0 -0
  20. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/reference/cantilever-3d.top3d.npz +0 -0
  21. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/reference/lbracket-2d.top88-ft2.npz +0 -0
  22. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/reference/mbb-2d.top88-ft1.npz +0 -0
  23. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/reference/mbb-2d.top88-ft2.npz +0 -0
  24. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/reference.py +0 -0
  25. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/benchmarks/run.py +0 -0
  26. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/brep.py +0 -0
  27. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/bucklingopt.py +0 -0
  28. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/buildsim.py +0 -0
  29. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/cadimport.py +0 -0
  30. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/calibration.py +0 -0
  31. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/cavities.py +0 -0
  32. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/__init__.py +0 -0
  33. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/dfm.py +0 -0
  34. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/exchanger.py +0 -0
  35. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/fea.py +0 -0
  36. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/fit.py +0 -0
  37. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/networks.py +0 -0
  38. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/opening.py +0 -0
  39. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/checks/sdf_kit.py +0 -0
  40. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/conjugate.py +0 -0
  41. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/constrained.py +0 -0
  42. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/contact.py +0 -0
  43. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/coopt.py +0 -0
  44. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/cores.py +0 -0
  45. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/crease.py +0 -0
  46. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/critic.py +0 -0
  47. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/crosscheck.py +0 -0
  48. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/cutcell.py +0 -0
  49. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/data/lattice_buckling.json +0 -0
  50. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/data/lattice_tensors.json +0 -0
  51. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/data/published_experiments.json +0 -0
  52. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/decimate.py +0 -0
  53. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/delivery.py +0 -0
  54. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/directions.py +0 -0
  55. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/domain.py +0 -0
  56. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/drains.py +0 -0
  57. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/durability.py +0 -0
  58. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/editor.html +0 -0
  59. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/editor.py +0 -0
  60. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/escape.py +0 -0
  61. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/__init__.py +0 -0
  62. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/baselines/coarse.json +0 -0
  63. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/baselines/full.json +0 -0
  64. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/brief_kinds/__init__.py +0 -0
  65. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/brief_kinds/heatx.py +0 -0
  66. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/brief_kinds/lattice.py +0 -0
  67. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/brief_kinds/multimat.py +0 -0
  68. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/assets/bracket.step +0 -0
  69. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/assets/desk_arm.urdf +0 -0
  70. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/assets/elbow-gearbox.stl +0 -0
  71. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/assets/motor-body.stl +0 -0
  72. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/assets/sketch.png +0 -0
  73. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/base-adapter-fdm.json +0 -0
  74. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/bell-crank-lpbf.json +0 -0
  75. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/belt-tensioner-fdm.json +0 -0
  76. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/camera-boom-mjf.json +0 -0
  77. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/camera-mount-pla.json +0 -0
  78. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/coolant-isolator-petg.json +0 -0
  79. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-bearing-bracket-sls.json +0 -0
  80. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-gearbox-forearm-mjf.json +0 -0
  81. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-link-fatigue-fdm.json +0 -0
  82. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-stop-pad-tpu.json +0 -0
  83. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/forearm-fdm.json +0 -0
  84. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/forearm-servo-link-fdm.json +0 -0
  85. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/grip-pad-finger-mm.json +0 -0
  86. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-bracket-creep-fdm.json +0 -0
  87. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-finger-fdm.json +0 -0
  88. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-jaw-fatigue-mjf.json +0 -0
  89. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-palm-fdm.json +0 -0
  90. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/hot-stepper-mount-asa-fdm.json +0 -0
  91. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/hpu-oil-cooler-lpbf.json +0 -0
  92. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/isolated-camera-mount-mm.json +0 -0
  93. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/kart-charge-cooler-lpbf.json +0 -0
  94. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/lighten-step-bracket.json +0 -0
  95. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/nema17-mount-stl.json +0 -0
  96. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/pillow-block-sls.json +0 -0
  97. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/polyjet-fingertip-mm.json +0 -0
  98. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/rod-hook-pla.json +0 -0
  99. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/sensor-arm-resin.json +0 -0
  100. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/shelf-bracket-pla.json +0 -0
  101. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/shoulder-riser-mjf.json +0 -0
  102. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/sketch-clevis.json +0 -0
  103. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/spring-bracket-pacf.json +0 -0
  104. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/tool-flange-ti64.json +0 -0
  105. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/tray-arm-lattice-fdm.json +0 -0
  106. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/turret-fdm.json +0 -0
  107. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/upper-arm-sls.json +0 -0
  108. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/urdf-forearm.json +0 -0
  109. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/wrist-link-mjf.json +0 -0
  110. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs/wrist-yoke-mjf.json +0 -0
  111. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/briefs.py +0 -0
  112. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/arm-link-cast.json +0 -0
  113. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/arm-link-driven.json +0 -0
  114. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/arm-link-sandwich.json +0 -0
  115. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/arm-link.json +0 -0
  116. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/bell-crank.json +0 -0
  117. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/grip-turret.json +0 -0
  118. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/grip-upper-arm.json +0 -0
  119. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/grip-wrist-link-mjf.json +0 -0
  120. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/grip-wrist-yoke.json +0 -0
  121. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/lpbf-intercooler-core.json +0 -0
  122. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/mbb-beam.json +0 -0
  123. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/motor-body.stl +0 -0
  124. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/motor-mount.json +0 -0
  125. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/printed-hook.json +0 -0
  126. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/wall-bracket-fasteners.json +0 -0
  127. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/cases/wall-bracket.json +0 -0
  128. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/corpus.py +0 -0
  129. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/pareto.py +0 -0
  130. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/evals/run.py +0 -0
  131. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/arm-link.json +0 -0
  132. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/bumpered-bracket-compression.json +0 -0
  133. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/bumpered-bracket-lattice.json +0 -0
  134. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/bumpered-bracket.json +0 -0
  135. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/gripper-finger-mm.json +0 -0
  136. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/heat-exchanger-counterflow.json +0 -0
  137. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/heat-exchanger-crossflow-tuned.json +0 -0
  138. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/heat-exchanger-crossflow.json +0 -0
  139. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/pedal-lattice.json +0 -0
  140. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/pressure-plenum.json +0 -0
  141. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/examples/shelf-bracket.json +0 -0
  142. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/exchanger.py +0 -0
  143. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/fasteners.py +0 -0
  144. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/fem.py +0 -0
  145. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/femops.py +0 -0
  146. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/fieldjit.py +0 -0
  147. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/fieldops.py +0 -0
  148. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/fields.py +0 -0
  149. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/fieldtorch.py +0 -0
  150. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/flow.py +0 -0
  151. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/flowtopo.py +0 -0
  152. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/gpu.py +0 -0
  153. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/heatx.py +0 -0
  154. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/heatx_thermal.py +0 -0
  155. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/homogenized.py +0 -0
  156. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/ibrep.py +0 -0
  157. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/impact.py +0 -0
  158. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/infill.py +0 -0
  159. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/interface_library.py +0 -0
  160. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/interlock.py +0 -0
  161. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/isolator.py +0 -0
  162. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/knn.py +0 -0
  163. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice.py +0 -0
  164. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice3mf.py +0 -0
  165. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice_buckling.py +0 -0
  166. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice_grade.py +0 -0
  167. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice_orient.py +0 -0
  168. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice_print.py +0 -0
  169. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/lattice_tensors.py +0 -0
  170. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/latticestep.py +0 -0
  171. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/manufacture.py +0 -0
  172. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/material_library.py +0 -0
  173. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/materials.py +0 -0
  174. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/mcp_server.py +0 -0
  175. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/mechanism.py +0 -0
  176. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/mechanism_nl.py +0 -0
  177. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/meshops.py +0 -0
  178. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/mg.py +0 -0
  179. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/mma.py +0 -0
  180. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/modal.py +0 -0
  181. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/multimat.py +0 -0
  182. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/narrowband.py +0 -0
  183. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/nlkernel.py +0 -0
  184. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/nonlinear.py +0 -0
  185. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/orient.py +0 -0
  186. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/porous.py +0 -0
  187. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/pressure.py +0 -0
  188. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/preview.py +0 -0
  189. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/printcheck.py +0 -0
  190. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/printsetup.py +0 -0
  191. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/processcheck.py +0 -0
  192. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/quick.py +0 -0
  193. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/recall.py +0 -0
  194. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/reconstruct.py +0 -0
  195. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/render.py +0 -0
  196. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/resolved.py +0 -0
  197. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/schema.py +0 -0
  198. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/sdf_kit.py +0 -0
  199. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/selfx.py +0 -0
  200. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/shapes.py +0 -0
  201. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/sharp.py +0 -0
  202. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/simp.py +0 -0
  203. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/sizing.py +0 -0
  204. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/slicer.py +0 -0
  205. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/spec.py +0 -0
  206. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/step.py +0 -0
  207. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/struts.py +0 -0
  208. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/study.py +0 -0
  209. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/tasks.py +0 -0
  210. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/thermal.py +0 -0
  211. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/threemf.py +0 -0
  212. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/tune.py +0 -0
  213. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/validation.py +0 -0
  214. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/verify.py +0 -0
  215. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/viewer.html +0 -0
  216. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/viewer.py +0 -0
  217. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/viscoelastic.py +0 -0
  218. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/voxelprint.py +0 -0
  219. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath/voxels.py +0 -0
  220. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath.egg-info/SOURCES.txt +0 -0
  221. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath.egg-info/dependency_links.txt +0 -0
  222. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath.egg-info/entry_points.txt +0 -0
  223. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath.egg-info/requires.txt +0 -0
  224. {loadpath-0.1.2 → loadpath-0.1.3}/loadpath.egg-info/top_level.txt +0 -0
  225. {loadpath-0.1.2 → loadpath-0.1.3}/setup.cfg +0 -0
  226. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_agent_path.py +0 -0
  227. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_amgfast.py +0 -0
  228. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_assembly.py +0 -0
  229. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_benchmarks.py +0 -0
  230. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_brief_kinds_heatx.py +0 -0
  231. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_brief_kinds_lattice.py +0 -0
  232. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_brief_kinds_multimat.py +0 -0
  233. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_buckling_check.py +0 -0
  234. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_bucklingopt.py +0 -0
  235. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_buildsim.py +0 -0
  236. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_cadimport.py +0 -0
  237. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_calibration.py +0 -0
  238. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_conjugate.py +0 -0
  239. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_contact.py +0 -0
  240. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_coopt.py +0 -0
  241. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_cores.py +0 -0
  242. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_crease.py +0 -0
  243. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_cutcell.py +0 -0
  244. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_dfm.py +0 -0
  245. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_directions.py +0 -0
  246. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_durability.py +0 -0
  247. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_editor.py +0 -0
  248. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_escape.py +0 -0
  249. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_evals.py +0 -0
  250. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_femops.py +0 -0
  251. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_field_materials.py +0 -0
  252. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_fieldjit.py +0 -0
  253. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_fields.py +0 -0
  254. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_fieldtorch.py +0 -0
  255. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_fit.py +0 -0
  256. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_flow.py +0 -0
  257. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_flowtopo.py +0 -0
  258. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_heatx_fixes.py +0 -0
  259. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_heatx_rating.py +0 -0
  260. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_hex8_im.py +0 -0
  261. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_impact.py +0 -0
  262. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_interface.py +0 -0
  263. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_interfaces.py +0 -0
  264. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_interlock.py +0 -0
  265. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_lattice3mf.py +0 -0
  266. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_lattice_print.py +0 -0
  267. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_lattice_tensors.py +0 -0
  268. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_latticestep.py +0 -0
  269. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_loadpath.py +0 -0
  270. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_manufacture.py +0 -0
  271. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_materials.py +0 -0
  272. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_meshops.py +0 -0
  273. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_metal.py +0 -0
  274. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_mg.py +0 -0
  275. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_multimat.py +0 -0
  276. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_multimat_fixes.py +0 -0
  277. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_narrowband.py +0 -0
  278. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_nonlinear.py +0 -0
  279. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_porous.py +0 -0
  280. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_pressure.py +0 -0
  281. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_preview.py +0 -0
  282. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_print.py +0 -0
  283. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_printsetup.py +0 -0
  284. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_process.py +0 -0
  285. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_published_experiments.py +0 -0
  286. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_recall.py +0 -0
  287. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_sharp.py +0 -0
  288. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_sizing.py +0 -0
  289. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_slicer.py +0 -0
  290. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_struts.py +0 -0
  291. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_tetsizing.py +0 -0
  292. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_thermal.py +0 -0
  293. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_threemf_multi.py +0 -0
  294. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_tune.py +0 -0
  295. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_tutorials.py +0 -0
  296. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_voxelprint.py +0 -0
  297. {loadpath-0.1.2 → loadpath-0.1.3}/tests/test_voxels.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: loadpath
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Generative design for printed parts: topology optimization from keep-outs, preserved geometry and loads, verified in real units.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://github.com/connorwhite-online/loadpath
@@ -70,12 +70,12 @@ safety factor, deflection, thinnest member, printability, pass or fail.
70
70
 
71
71
  <table>
72
72
  <tr>
73
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-link-mjf-part.png" height="420"></td>
74
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/grip-wrist-link-mjf.png" height="420"></td>
73
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-link-mjf-part.png" height="420"></td>
74
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/grip-wrist-link-mjf.png" height="420"></td>
75
75
  </tr>
76
76
  <tr>
77
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-yoke-part.png" width="380"></td>
78
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/grip-wrist-yoke.png" width="380"></td>
77
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-yoke-part.png" width="380"></td>
78
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/grip-wrist-yoke.png" width="380"></td>
79
79
  </tr>
80
80
  <tr>
81
81
  <td align="center" colspan="2"><sub>Two robot-arm parts as loadpath delivered them (left) and their stress from a fresh
@@ -100,12 +100,46 @@ Then ask in plain words:
100
100
  > printed on an FDM printer.
101
101
 
102
102
  The agent writes the study, checks it, runs it in the background and reads
103
- the report back. Its guide is [loadpath/SKILL.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/loadpath/SKILL.md) (the
103
+ the report back. Its guide is [loadpath/SKILL.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/loadpath/SKILL.md) (the
104
104
  `loadpath_guide` tool returns it); the tools and the loop are in
105
- [docs/agents.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/agents.md). The server runs locally and nothing
105
+ [docs/agents.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/agents.md). The server runs locally and nothing
106
106
  leaves the machine. Units are millimetres, newtons and megapascals. MIT
107
107
  licensed.
108
108
 
109
+ ## Where it fits
110
+
111
+ A designed part needs a shape, the loads it carries, and a way to make it.
112
+ The open tools each cover one of those:
113
+
114
+ - **Topology optimization codes** (top88, top3d, ToPy, FEniCS scripts) are
115
+ research solvers. They stop at a density field on a grid: no printable
116
+ part, and nothing checks the result.
117
+ - **Script CAD** (CadQuery, build123d, OpenSCAD) and AI CAD tools draw exact
118
+ geometry but don't know the loads.
119
+ - **Commercial generative design** (Fusion, nTop) does the whole job, but
120
+ it's built around a GUI, not an agent.
121
+
122
+ loadpath is the layer in between. Your CAD defines the interfaces; loadpath
123
+ takes those plus the loads, material and process, and returns a watertight
124
+ part checked by an analysis independent of the optimizer, with a JSON report
125
+ an agent can act on. Its STEP output goes back into CAD.
126
+
127
+ Where it is strongest:
128
+
129
+ - **The analysis behind the shape**: buckling, fatigue and creep,
130
+ large-deflection compliant mechanisms, loads of unknown direction, thermal
131
+ loads and print warp, all checked on the delivered mesh.
132
+ - **Implicit modelling**: field graphs, graded and conformal lattices (TPMS,
133
+ strut, Voronoi), blends, and exact STEP of lattice parts.
134
+ - **Process awareness**: FDM, SLS, MJF, resin and powder-bed metal rules,
135
+ plus casting and milling constraints.
136
+ - **Heat exchangers**: lattice-Boltzmann flow and conjugate heat transfer
137
+ for gyroid cores and cold plates.
138
+
139
+ Not yet: draft-angle and machining-time checks for cast and milled parts,
140
+ or a ranked spread of outcomes across materials and processes by cost.
141
+ There is no GUI on purpose; it's a library.
142
+
109
143
  ## What it does
110
144
 
111
145
  - **Topology optimization** on a voxel grid (SIMP with a density filter,
@@ -122,23 +156,23 @@ licensed.
122
156
  clean-outs), plus milling and casting constraints.
123
157
  - **Field modelling**: a part as a graph of implicit fields, so skins,
124
158
  lattices (TPMS and strut) and fillets can be graded by stress or by
125
- distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/fields.md)).
159
+ distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md)).
126
160
  - **Other analyses**: large deflection and buckling, compliant mechanisms,
127
161
  thermal loads, fatigue and creep estimates, lattice crush and impact,
128
162
  vibration, lattice-Boltzmann flow and conjugate heat for heat exchangers
129
163
  and cold plates, and layer-by-layer warp and residual stress
130
- ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/BUILDSIM.md)).
164
+ ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BUILDSIM.md)).
131
165
  - **CAD in and out**: a STEP or STL part becomes a draft study with its
132
- bores and bolt patterns found ([docs/IMPORT.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/IMPORT.md)); results
166
+ bores and bolt patterns found ([docs/IMPORT.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/IMPORT.md)); results
133
167
  export as STL, 3MF, and STEP with exact planes and cylinders at the
134
168
  interfaces; a lattice part (strut cells, TPMS, graded, skinned or open)
135
- goes to STEP lattice and all, as smooth patches on its true surface ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/fields.md#the-lattice-itself-in-the-step-lattice-exact)).
169
+ goes to STEP lattice and all, as smooth patches on its true surface ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md#the-lattice-itself-in-the-step-lattice-exact)).
136
170
  - **Mesh checks without a study** (`loadpath.checks`): wall thickness,
137
171
  overhangs, trapped voids, fluid-network isolation, component fit.
138
172
 
139
173
  ## How much to trust it
140
174
 
141
- Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/VALIDATION.md) before relying on a number.
175
+ Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/VALIDATION.md) before relying on a number.
142
176
  In short:
143
177
 
144
178
  - **The solvers match analytic answers** in the test suite: beam
@@ -163,16 +197,16 @@ In short:
163
197
  ## Case studies
164
198
 
165
199
  Each states the problem, the setup, the numbers against a named baseline,
166
- and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/docs/case-studies/)).
200
+ and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/case-studies/)).
167
201
 
168
202
  | Case study | Result | Baseline |
169
203
  | --- | --- | --- |
170
- | [Eval suite](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/evals.md) | 15 of 15 parts meet their requirements on a fresh analysis of the delivered mesh | Each part's own requirements |
171
- | [GRIP robot arm](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/grip.md) | A load sweep over the arm's URDF found 3 of 5 links below SF 1; the regrown set meets SF 2 and is 18% smaller | GRIP's committed parts, made by an earlier loadpath with hand-written loads |
172
- | [Arm link cores](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/arm-link-cores.md) | 42.2 g box section for FDM, 36.8 g hollow link for SLS, both at 0.5 mm and SF 3 | 54.9 g solid web; 54.2 g free-form topology optimization |
173
- | [Liquid cold plate](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/cold-plate.md) | A die-graded gyroid ties streamline channels; channels filled with a graded gyroid run 7% cooler | Streamline channels and pin fins, equal metal and pressure drop |
174
- | [TPU finger](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/tpu-finger.md) | up to 8 mm of tip curl for a 5 mm pull; a tendon finger grips 8x harder | A linear-model design (2.5 mm, then the solve fails); a plain bar of equal volume |
175
- | [Benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/benchmarks.md) | 1-5% less stiff than top88/top3d at equal material, in 57-60 iterations instead of 130-410 | Ports of top88 and top3d |
204
+ | [Eval suite](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/evals.md) | 15 of 15 parts meet their requirements on a fresh analysis of the delivered mesh | Each part's own requirements |
205
+ | [GRIP robot arm](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/grip.md) | A load sweep over the arm's URDF found 3 of 5 links below SF 1; the regrown set meets SF 2 and is 18% smaller | GRIP's committed parts, made by an earlier loadpath with hand-written loads |
206
+ | [Arm link cores](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/arm-link-cores.md) | 42.2 g box section for FDM, 36.8 g hollow link for SLS, both at 0.5 mm and SF 3 | 54.9 g solid web; 54.2 g free-form topology optimization |
207
+ | [Liquid cold plate](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/cold-plate.md) | A die-graded gyroid ties streamline channels; channels filled with a graded gyroid run 7% cooler | Streamline channels and pin fins, equal metal and pressure drop |
208
+ | [TPU finger](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/tpu-finger.md) | up to 8 mm of tip curl for a 5 mm pull; a tendon finger grips 8x harder | A linear-model design (2.5 mm, then the solve fails); a plain bar of equal volume |
209
+ | [Benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/benchmarks.md) | 1-5% less stiff than top88/top3d at equal material, in 57-60 iterations instead of 130-410 | Ports of top88 and top3d |
176
210
 
177
211
  ## Command line and Python
178
212
 
@@ -191,7 +225,7 @@ numba), `gpu` (PyTorch for large grids on CUDA, Apple Silicon or CPU
191
225
  threads).
192
226
 
193
227
  Studies are validated against a published JSON Schema
194
- ([`schema/`](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/schema/)), and `loadpath check` returns every problem at once
228
+ ([`schema/`](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/schema/)), and `loadpath check` returns every problem at once
195
229
  with its JSON path, so an agent can fix a study in one round trip. Long
196
230
  solves run as background jobs the agent polls. Each finished outcome has an
197
231
  `attention` list of numbers to look at before trusting it, and renders a
@@ -211,51 +245,51 @@ print(best.report["mass"], best.report["safetyFactor"])
211
245
 
212
246
  ## Documentation
213
247
 
214
- - [Quickstart](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/quickstart.md): install to a checked part.
215
- - [Tutorials](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/docs/tutorials/): eleven end-to-end workflows, each run by CI
248
+ - [Quickstart](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/quickstart.md): install to a checked part.
249
+ - [Tutorials](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/tutorials/): eleven end-to-end workflows, each run by CI
216
250
  (an FDM bracket to 3MF, an SLS lattice with drain holes, a metal heat
217
251
  exchanger, an impact bumper, a STEP part round trip, LPBF distortion
218
252
  compensation, and more).
219
- - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/loadpath/README.md): the method, every study field, the
253
+ - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/loadpath/README.md): the method, every study field, the
220
254
  report, the limits.
221
- - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/VALIDATION.md): what each model has been checked
255
+ - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/VALIDATION.md): what each model has been checked
222
256
  against.
223
- - [Case studies](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/docs/case-studies/) and [benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/BENCHMARKS.md).
224
- - Topics: [fields](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/fields.md), [materials](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/materials.md),
225
- [build simulation](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/BUILDSIM.md), [calibration](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/CALIBRATION.md),
226
- [CAD import](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/IMPORT.md), [slicer](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/slicer.md),
227
- [multi-material](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/MULTIMATERIAL.md), [impact](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/IMPACT.md),
228
- [mechanisms](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/MECHANISMS.md).
257
+ - [Case studies](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/case-studies/) and [benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BENCHMARKS.md).
258
+ - Topics: [fields](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md), [materials](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/materials.md),
259
+ [build simulation](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BUILDSIM.md), [calibration](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/CALIBRATION.md),
260
+ [CAD import](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/IMPORT.md), [slicer](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/slicer.md),
261
+ [multi-material](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/MULTIMATERIAL.md), [impact](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/IMPACT.md),
262
+ [mechanisms](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/MECHANISMS.md).
229
263
 
230
264
  <!-- gallery:start -->
231
265
 
232
266
  ## Examples
233
267
 
234
- The eval suite (15/15 passing): robot-arm links, brackets, a bell crank and a hook, each optimized and then checked by a fresh analysis of the delivered mesh. "Under envelope" compares with the design space filled solid, not with a conventionally designed part. These are simulated results; see [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/VALIDATION.md). Blue arrows are loads, red is keep-out. Every view, stress map and number is in [docs/GALLERY.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/GALLERY.md).
268
+ The eval suite (15/15 passing): robot-arm links, brackets, a bell crank and a hook, each optimized and then checked by a fresh analysis of the delivered mesh. "Under envelope" compares with the design space filled solid, not with a conventionally designed part. These are simulated results; see [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/VALIDATION.md). Blue arrows are loads, red is keep-out. Every view, stress map and number is in [docs/GALLERY.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/GALLERY.md).
235
269
 
236
270
  <table>
237
271
  <tr>
238
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/arm-link.png" width="250"><br><b>arm-link</b><br><sub>55.3 g · 56% under envelope · SF 8.92 · pass</sub></td>
239
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/arm-link-cast.png" width="250"><br><b>arm-link-cast</b><br><sub>67.8 g · 46% under envelope · SF 20.11 · pass</sub></td>
240
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/arm-link-driven.png" width="250"><br><b>arm-link-driven</b><br><sub>48.4 g · 61% under envelope · SF 11.17 · pass</sub></td>
272
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/arm-link.png" width="250"><br><b>arm-link</b><br><sub>55.3 g · 56% under envelope · SF 8.92 · pass</sub></td>
273
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/arm-link-cast.png" width="250"><br><b>arm-link-cast</b><br><sub>67.8 g · 46% under envelope · SF 20.11 · pass</sub></td>
274
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/arm-link-driven.png" width="250"><br><b>arm-link-driven</b><br><sub>48.4 g · 61% under envelope · SF 11.17 · pass</sub></td>
241
275
  </tr>
242
276
  <tr>
243
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/bell-crank.png" width="250"><br><b>bell-crank</b><br><sub>23.4 g · 84% under envelope · SF 3.22 · pass</sub></td>
244
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-turret.png" width="250"><br><b>grip-turret</b><br><sub>140.4 g · 91% under envelope · SF 2.85 · pass</sub></td>
245
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-upper-arm.png" width="250"><br><b>grip-upper-arm</b><br><sub>207.7 g · 88% under envelope · SF 7.33 · pass</sub></td>
277
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/bell-crank.png" width="250"><br><b>bell-crank</b><br><sub>23.4 g · 84% under envelope · SF 3.22 · pass</sub></td>
278
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-turret.png" width="250"><br><b>grip-turret</b><br><sub>140.4 g · 91% under envelope · SF 2.85 · pass</sub></td>
279
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-upper-arm.png" width="250"><br><b>grip-upper-arm</b><br><sub>207.7 g · 88% under envelope · SF 7.33 · pass</sub></td>
246
280
  </tr>
247
281
  <tr>
248
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-link-mjf.png" width="250"><br><b>grip-wrist-link-mjf</b><br><sub>40.2 g · 95% under envelope · SF 5.83 · pass</sub></td>
249
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-yoke.png" width="250"><br><b>grip-wrist-yoke</b><br><sub>17.3 g · 93% under envelope · SF 3.88 · pass</sub></td>
250
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/mbb-beam.png" width="250"><br><b>mbb-beam</b><br><sub>13.8 g · 79% under envelope · SF 1.51 · pass</sub></td>
282
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-link-mjf.png" width="250"><br><b>grip-wrist-link-mjf</b><br><sub>40.2 g · 95% under envelope · SF 5.83 · pass</sub></td>
283
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-yoke.png" width="250"><br><b>grip-wrist-yoke</b><br><sub>17.3 g · 93% under envelope · SF 3.88 · pass</sub></td>
284
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/mbb-beam.png" width="250"><br><b>mbb-beam</b><br><sub>13.8 g · 79% under envelope · SF 1.51 · pass</sub></td>
251
285
  </tr>
252
286
  <tr>
253
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/motor-mount.png" width="250"><br><b>motor-mount</b><br><sub>27.6 g · 69% under envelope · SF 3.65 · pass</sub></td>
254
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/printed-hook.png" width="250"><br><b>printed-hook</b><br><sub>24.2 g · 84% under envelope · SF 2.73 · pass</sub></td>
255
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/wall-bracket.png" width="250"><br><b>wall-bracket</b><br><sub>26.9 g · 94% under envelope · SF 2.85 · pass</sub></td>
287
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/motor-mount.png" width="250"><br><b>motor-mount</b><br><sub>27.6 g · 69% under envelope · SF 3.65 · pass</sub></td>
288
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/printed-hook.png" width="250"><br><b>printed-hook</b><br><sub>24.2 g · 84% under envelope · SF 2.73 · pass</sub></td>
289
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/wall-bracket.png" width="250"><br><b>wall-bracket</b><br><sub>26.9 g · 94% under envelope · SF 2.85 · pass</sub></td>
256
290
  </tr>
257
291
  <tr>
258
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/wall-bracket-fasteners.png" width="250"><br><b>wall-bracket-fasteners</b><br><sub>26.5 g · 94% under envelope · SF 2.57 · pass</sub></td>
292
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/wall-bracket-fasteners.png" width="250"><br><b>wall-bracket-fasteners</b><br><sub>26.5 g · 94% under envelope · SF 2.57 · pass</sub></td>
259
293
  </tr>
260
294
  </table>
261
295
 
@@ -263,23 +297,23 @@ Where the load goes: von Mises stress, blue (none) to red (the part's 98th perce
263
297
 
264
298
  <table>
265
299
  <tr>
266
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/bell-crank.png" width="250"><br><sub>bell-crank</sub></td>
267
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/grip-upper-arm.png" width="250"><br><sub>grip-upper-arm</sub></td>
268
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/printed-hook.png" width="250"><br><sub>printed-hook</sub></td>
300
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/bell-crank.png" width="250"><br><sub>bell-crank</sub></td>
301
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/grip-upper-arm.png" width="250"><br><sub>grip-upper-arm</sub></td>
302
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/printed-hook.png" width="250"><br><sub>printed-hook</sub></td>
269
303
  </tr>
270
304
  </table>
271
305
 
272
306
  Two-fluid heat exchangers: two isolated channel networks through one sheet gyroid, with headers that print without support.
273
307
 
274
- ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/heatx/box-crossflow.png)
308
+ ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/heatx/box-crossflow.png)
275
309
 
276
310
  Printed in metal, nothing inside can be supported: the channels end in peaked roofs instead of flat ceilings (red).
277
311
 
278
- ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/heatx/lpbf-ceilings.png)
312
+ ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/heatx/lpbf-ceilings.png)
279
313
 
280
314
  Made another way: the same arm link printed, cast (no undercuts along z), 3-axis milled from both sides with a 6 mm cutter, and with members capped at 6 mm. Each meets SF 3 and 0.5 mm.
281
315
 
282
- ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/manufacturing/arm-link.png)
316
+ ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/manufacturing/arm-link.png)
283
317
 
284
318
  <sub>Rendered 2026-11-03 from `6c97b57` by `python docs/gallery.py`.</sub>
285
319
 
@@ -9,12 +9,12 @@ safety factor, deflection, thinnest member, printability, pass or fail.
9
9
 
10
10
  <table>
11
11
  <tr>
12
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-link-mjf-part.png" height="420"></td>
13
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/grip-wrist-link-mjf.png" height="420"></td>
12
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-link-mjf-part.png" height="420"></td>
13
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/grip-wrist-link-mjf.png" height="420"></td>
14
14
  </tr>
15
15
  <tr>
16
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-yoke-part.png" width="380"></td>
17
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/grip-wrist-yoke.png" width="380"></td>
16
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-yoke-part.png" width="380"></td>
17
+ <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/grip-wrist-yoke.png" width="380"></td>
18
18
  </tr>
19
19
  <tr>
20
20
  <td align="center" colspan="2"><sub>Two robot-arm parts as loadpath delivered them (left) and their stress from a fresh
@@ -39,12 +39,46 @@ Then ask in plain words:
39
39
  > printed on an FDM printer.
40
40
 
41
41
  The agent writes the study, checks it, runs it in the background and reads
42
- the report back. Its guide is [loadpath/SKILL.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/loadpath/SKILL.md) (the
42
+ the report back. Its guide is [loadpath/SKILL.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/loadpath/SKILL.md) (the
43
43
  `loadpath_guide` tool returns it); the tools and the loop are in
44
- [docs/agents.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/agents.md). The server runs locally and nothing
44
+ [docs/agents.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/agents.md). The server runs locally and nothing
45
45
  leaves the machine. Units are millimetres, newtons and megapascals. MIT
46
46
  licensed.
47
47
 
48
+ ## Where it fits
49
+
50
+ A designed part needs a shape, the loads it carries, and a way to make it.
51
+ The open tools each cover one of those:
52
+
53
+ - **Topology optimization codes** (top88, top3d, ToPy, FEniCS scripts) are
54
+ research solvers. They stop at a density field on a grid: no printable
55
+ part, and nothing checks the result.
56
+ - **Script CAD** (CadQuery, build123d, OpenSCAD) and AI CAD tools draw exact
57
+ geometry but don't know the loads.
58
+ - **Commercial generative design** (Fusion, nTop) does the whole job, but
59
+ it's built around a GUI, not an agent.
60
+
61
+ loadpath is the layer in between. Your CAD defines the interfaces; loadpath
62
+ takes those plus the loads, material and process, and returns a watertight
63
+ part checked by an analysis independent of the optimizer, with a JSON report
64
+ an agent can act on. Its STEP output goes back into CAD.
65
+
66
+ Where it is strongest:
67
+
68
+ - **The analysis behind the shape**: buckling, fatigue and creep,
69
+ large-deflection compliant mechanisms, loads of unknown direction, thermal
70
+ loads and print warp, all checked on the delivered mesh.
71
+ - **Implicit modelling**: field graphs, graded and conformal lattices (TPMS,
72
+ strut, Voronoi), blends, and exact STEP of lattice parts.
73
+ - **Process awareness**: FDM, SLS, MJF, resin and powder-bed metal rules,
74
+ plus casting and milling constraints.
75
+ - **Heat exchangers**: lattice-Boltzmann flow and conjugate heat transfer
76
+ for gyroid cores and cold plates.
77
+
78
+ Not yet: draft-angle and machining-time checks for cast and milled parts,
79
+ or a ranked spread of outcomes across materials and processes by cost.
80
+ There is no GUI on purpose; it's a library.
81
+
48
82
  ## What it does
49
83
 
50
84
  - **Topology optimization** on a voxel grid (SIMP with a density filter,
@@ -61,23 +95,23 @@ licensed.
61
95
  clean-outs), plus milling and casting constraints.
62
96
  - **Field modelling**: a part as a graph of implicit fields, so skins,
63
97
  lattices (TPMS and strut) and fillets can be graded by stress or by
64
- distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/fields.md)).
98
+ distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md)).
65
99
  - **Other analyses**: large deflection and buckling, compliant mechanisms,
66
100
  thermal loads, fatigue and creep estimates, lattice crush and impact,
67
101
  vibration, lattice-Boltzmann flow and conjugate heat for heat exchangers
68
102
  and cold plates, and layer-by-layer warp and residual stress
69
- ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/BUILDSIM.md)).
103
+ ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BUILDSIM.md)).
70
104
  - **CAD in and out**: a STEP or STL part becomes a draft study with its
71
- bores and bolt patterns found ([docs/IMPORT.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/IMPORT.md)); results
105
+ bores and bolt patterns found ([docs/IMPORT.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/IMPORT.md)); results
72
106
  export as STL, 3MF, and STEP with exact planes and cylinders at the
73
107
  interfaces; a lattice part (strut cells, TPMS, graded, skinned or open)
74
- goes to STEP lattice and all, as smooth patches on its true surface ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/fields.md#the-lattice-itself-in-the-step-lattice-exact)).
108
+ goes to STEP lattice and all, as smooth patches on its true surface ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md#the-lattice-itself-in-the-step-lattice-exact)).
75
109
  - **Mesh checks without a study** (`loadpath.checks`): wall thickness,
76
110
  overhangs, trapped voids, fluid-network isolation, component fit.
77
111
 
78
112
  ## How much to trust it
79
113
 
80
- Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/VALIDATION.md) before relying on a number.
114
+ Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/VALIDATION.md) before relying on a number.
81
115
  In short:
82
116
 
83
117
  - **The solvers match analytic answers** in the test suite: beam
@@ -102,16 +136,16 @@ In short:
102
136
  ## Case studies
103
137
 
104
138
  Each states the problem, the setup, the numbers against a named baseline,
105
- and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/docs/case-studies/)).
139
+ and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/case-studies/)).
106
140
 
107
141
  | Case study | Result | Baseline |
108
142
  | --- | --- | --- |
109
- | [Eval suite](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/evals.md) | 15 of 15 parts meet their requirements on a fresh analysis of the delivered mesh | Each part's own requirements |
110
- | [GRIP robot arm](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/grip.md) | A load sweep over the arm's URDF found 3 of 5 links below SF 1; the regrown set meets SF 2 and is 18% smaller | GRIP's committed parts, made by an earlier loadpath with hand-written loads |
111
- | [Arm link cores](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/arm-link-cores.md) | 42.2 g box section for FDM, 36.8 g hollow link for SLS, both at 0.5 mm and SF 3 | 54.9 g solid web; 54.2 g free-form topology optimization |
112
- | [Liquid cold plate](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/cold-plate.md) | A die-graded gyroid ties streamline channels; channels filled with a graded gyroid run 7% cooler | Streamline channels and pin fins, equal metal and pressure drop |
113
- | [TPU finger](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/tpu-finger.md) | up to 8 mm of tip curl for a 5 mm pull; a tendon finger grips 8x harder | A linear-model design (2.5 mm, then the solve fails); a plain bar of equal volume |
114
- | [Benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/case-studies/benchmarks.md) | 1-5% less stiff than top88/top3d at equal material, in 57-60 iterations instead of 130-410 | Ports of top88 and top3d |
143
+ | [Eval suite](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/evals.md) | 15 of 15 parts meet their requirements on a fresh analysis of the delivered mesh | Each part's own requirements |
144
+ | [GRIP robot arm](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/grip.md) | A load sweep over the arm's URDF found 3 of 5 links below SF 1; the regrown set meets SF 2 and is 18% smaller | GRIP's committed parts, made by an earlier loadpath with hand-written loads |
145
+ | [Arm link cores](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/arm-link-cores.md) | 42.2 g box section for FDM, 36.8 g hollow link for SLS, both at 0.5 mm and SF 3 | 54.9 g solid web; 54.2 g free-form topology optimization |
146
+ | [Liquid cold plate](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/cold-plate.md) | A die-graded gyroid ties streamline channels; channels filled with a graded gyroid run 7% cooler | Streamline channels and pin fins, equal metal and pressure drop |
147
+ | [TPU finger](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/tpu-finger.md) | up to 8 mm of tip curl for a 5 mm pull; a tendon finger grips 8x harder | A linear-model design (2.5 mm, then the solve fails); a plain bar of equal volume |
148
+ | [Benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/case-studies/benchmarks.md) | 1-5% less stiff than top88/top3d at equal material, in 57-60 iterations instead of 130-410 | Ports of top88 and top3d |
115
149
 
116
150
  ## Command line and Python
117
151
 
@@ -130,7 +164,7 @@ numba), `gpu` (PyTorch for large grids on CUDA, Apple Silicon or CPU
130
164
  threads).
131
165
 
132
166
  Studies are validated against a published JSON Schema
133
- ([`schema/`](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/schema/)), and `loadpath check` returns every problem at once
167
+ ([`schema/`](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/schema/)), and `loadpath check` returns every problem at once
134
168
  with its JSON path, so an agent can fix a study in one round trip. Long
135
169
  solves run as background jobs the agent polls. Each finished outcome has an
136
170
  `attention` list of numbers to look at before trusting it, and renders a
@@ -150,51 +184,51 @@ print(best.report["mass"], best.report["safetyFactor"])
150
184
 
151
185
  ## Documentation
152
186
 
153
- - [Quickstart](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/quickstart.md): install to a checked part.
154
- - [Tutorials](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/docs/tutorials/): eleven end-to-end workflows, each run by CI
187
+ - [Quickstart](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/quickstart.md): install to a checked part.
188
+ - [Tutorials](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/tutorials/): eleven end-to-end workflows, each run by CI
155
189
  (an FDM bracket to 3MF, an SLS lattice with drain holes, a metal heat
156
190
  exchanger, an impact bumper, a STEP part round trip, LPBF distortion
157
191
  compensation, and more).
158
- - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/loadpath/README.md): the method, every study field, the
192
+ - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/loadpath/README.md): the method, every study field, the
159
193
  report, the limits.
160
- - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/VALIDATION.md): what each model has been checked
194
+ - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/VALIDATION.md): what each model has been checked
161
195
  against.
162
- - [Case studies](https://github.com/connorwhite-online/loadpath/tree/v0.1.2/docs/case-studies/) and [benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/BENCHMARKS.md).
163
- - Topics: [fields](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/fields.md), [materials](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/materials.md),
164
- [build simulation](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/BUILDSIM.md), [calibration](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/CALIBRATION.md),
165
- [CAD import](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/IMPORT.md), [slicer](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/slicer.md),
166
- [multi-material](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/MULTIMATERIAL.md), [impact](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/IMPACT.md),
167
- [mechanisms](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/MECHANISMS.md).
196
+ - [Case studies](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/case-studies/) and [benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BENCHMARKS.md).
197
+ - Topics: [fields](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md), [materials](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/materials.md),
198
+ [build simulation](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BUILDSIM.md), [calibration](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/CALIBRATION.md),
199
+ [CAD import](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/IMPORT.md), [slicer](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/slicer.md),
200
+ [multi-material](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/MULTIMATERIAL.md), [impact](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/IMPACT.md),
201
+ [mechanisms](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/MECHANISMS.md).
168
202
 
169
203
  <!-- gallery:start -->
170
204
 
171
205
  ## Examples
172
206
 
173
- The eval suite (15/15 passing): robot-arm links, brackets, a bell crank and a hook, each optimized and then checked by a fresh analysis of the delivered mesh. "Under envelope" compares with the design space filled solid, not with a conventionally designed part. These are simulated results; see [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/VALIDATION.md). Blue arrows are loads, red is keep-out. Every view, stress map and number is in [docs/GALLERY.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.2/docs/GALLERY.md).
207
+ The eval suite (15/15 passing): robot-arm links, brackets, a bell crank and a hook, each optimized and then checked by a fresh analysis of the delivered mesh. "Under envelope" compares with the design space filled solid, not with a conventionally designed part. These are simulated results; see [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/VALIDATION.md). Blue arrows are loads, red is keep-out. Every view, stress map and number is in [docs/GALLERY.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/GALLERY.md).
174
208
 
175
209
  <table>
176
210
  <tr>
177
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/arm-link.png" width="250"><br><b>arm-link</b><br><sub>55.3 g · 56% under envelope · SF 8.92 · pass</sub></td>
178
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/arm-link-cast.png" width="250"><br><b>arm-link-cast</b><br><sub>67.8 g · 46% under envelope · SF 20.11 · pass</sub></td>
179
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/arm-link-driven.png" width="250"><br><b>arm-link-driven</b><br><sub>48.4 g · 61% under envelope · SF 11.17 · pass</sub></td>
211
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/arm-link.png" width="250"><br><b>arm-link</b><br><sub>55.3 g · 56% under envelope · SF 8.92 · pass</sub></td>
212
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/arm-link-cast.png" width="250"><br><b>arm-link-cast</b><br><sub>67.8 g · 46% under envelope · SF 20.11 · pass</sub></td>
213
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/arm-link-driven.png" width="250"><br><b>arm-link-driven</b><br><sub>48.4 g · 61% under envelope · SF 11.17 · pass</sub></td>
180
214
  </tr>
181
215
  <tr>
182
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/bell-crank.png" width="250"><br><b>bell-crank</b><br><sub>23.4 g · 84% under envelope · SF 3.22 · pass</sub></td>
183
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-turret.png" width="250"><br><b>grip-turret</b><br><sub>140.4 g · 91% under envelope · SF 2.85 · pass</sub></td>
184
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-upper-arm.png" width="250"><br><b>grip-upper-arm</b><br><sub>207.7 g · 88% under envelope · SF 7.33 · pass</sub></td>
216
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/bell-crank.png" width="250"><br><b>bell-crank</b><br><sub>23.4 g · 84% under envelope · SF 3.22 · pass</sub></td>
217
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-turret.png" width="250"><br><b>grip-turret</b><br><sub>140.4 g · 91% under envelope · SF 2.85 · pass</sub></td>
218
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-upper-arm.png" width="250"><br><b>grip-upper-arm</b><br><sub>207.7 g · 88% under envelope · SF 7.33 · pass</sub></td>
185
219
  </tr>
186
220
  <tr>
187
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-link-mjf.png" width="250"><br><b>grip-wrist-link-mjf</b><br><sub>40.2 g · 95% under envelope · SF 5.83 · pass</sub></td>
188
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/grip-wrist-yoke.png" width="250"><br><b>grip-wrist-yoke</b><br><sub>17.3 g · 93% under envelope · SF 3.88 · pass</sub></td>
189
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/mbb-beam.png" width="250"><br><b>mbb-beam</b><br><sub>13.8 g · 79% under envelope · SF 1.51 · pass</sub></td>
221
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-link-mjf.png" width="250"><br><b>grip-wrist-link-mjf</b><br><sub>40.2 g · 95% under envelope · SF 5.83 · pass</sub></td>
222
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/grip-wrist-yoke.png" width="250"><br><b>grip-wrist-yoke</b><br><sub>17.3 g · 93% under envelope · SF 3.88 · pass</sub></td>
223
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/mbb-beam.png" width="250"><br><b>mbb-beam</b><br><sub>13.8 g · 79% under envelope · SF 1.51 · pass</sub></td>
190
224
  </tr>
191
225
  <tr>
192
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/motor-mount.png" width="250"><br><b>motor-mount</b><br><sub>27.6 g · 69% under envelope · SF 3.65 · pass</sub></td>
193
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/printed-hook.png" width="250"><br><b>printed-hook</b><br><sub>24.2 g · 84% under envelope · SF 2.73 · pass</sub></td>
194
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/wall-bracket.png" width="250"><br><b>wall-bracket</b><br><sub>26.9 g · 94% under envelope · SF 2.85 · pass</sub></td>
226
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/motor-mount.png" width="250"><br><b>motor-mount</b><br><sub>27.6 g · 69% under envelope · SF 3.65 · pass</sub></td>
227
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/printed-hook.png" width="250"><br><b>printed-hook</b><br><sub>24.2 g · 84% under envelope · SF 2.73 · pass</sub></td>
228
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/wall-bracket.png" width="250"><br><b>wall-bracket</b><br><sub>26.9 g · 94% under envelope · SF 2.85 · pass</sub></td>
195
229
  </tr>
196
230
  <tr>
197
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/cases/wall-bracket-fasteners.png" width="250"><br><b>wall-bracket-fasteners</b><br><sub>26.5 g · 94% under envelope · SF 2.57 · pass</sub></td>
231
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/cases/wall-bracket-fasteners.png" width="250"><br><b>wall-bracket-fasteners</b><br><sub>26.5 g · 94% under envelope · SF 2.57 · pass</sub></td>
198
232
  </tr>
199
233
  </table>
200
234
 
@@ -202,23 +236,23 @@ Where the load goes: von Mises stress, blue (none) to red (the part's 98th perce
202
236
 
203
237
  <table>
204
238
  <tr>
205
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/bell-crank.png" width="250"><br><sub>bell-crank</sub></td>
206
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/grip-upper-arm.png" width="250"><br><sub>grip-upper-arm</sub></td>
207
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/stress/printed-hook.png" width="250"><br><sub>printed-hook</sub></td>
239
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/bell-crank.png" width="250"><br><sub>bell-crank</sub></td>
240
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/grip-upper-arm.png" width="250"><br><sub>grip-upper-arm</sub></td>
241
+ <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/stress/printed-hook.png" width="250"><br><sub>printed-hook</sub></td>
208
242
  </tr>
209
243
  </table>
210
244
 
211
245
  Two-fluid heat exchangers: two isolated channel networks through one sheet gyroid, with headers that print without support.
212
246
 
213
- ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/heatx/box-crossflow.png)
247
+ ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/heatx/box-crossflow.png)
214
248
 
215
249
  Printed in metal, nothing inside can be supported: the channels end in peaked roofs instead of flat ceilings (red).
216
250
 
217
- ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/heatx/lpbf-ceilings.png)
251
+ ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/heatx/lpbf-ceilings.png)
218
252
 
219
253
  Made another way: the same arm link printed, cast (no undercuts along z), 3-axis milled from both sides with a 6 mm cutter, and with members capped at 6 mm. Each meets SF 3 and 0.5 mm.
220
254
 
221
- ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.2/docs/images/manufacturing/arm-link.png)
255
+ ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.3/docs/images/manufacturing/arm-link.png)
222
256
 
223
257
  <sub>Rendered 2026-11-03 from `6c97b57` by `python docs/gallery.py`.</sub>
224
258
 
@@ -16,6 +16,18 @@ it, use the CLI below. Start from the nearest example (`loadpath_examples` /
16
16
  `loadpath examples`) rather than a blank page; `loadpath_schema` gives every
17
17
  field. `check` reports every problem at once: fix them all, then check again.
18
18
 
19
+ ## When to use it
20
+
21
+ Use loadpath when the shape should come from the loads: brackets, links,
22
+ mounts and housings around fixed interfaces, lattice-filled or graded parts,
23
+ compliant mechanisms, heat exchangers and cold plates. Draw parts whose shape
24
+ is set by function rather than load (enclosures, cosmetic covers, gears,
25
+ threads) in CAD instead. loadpath doesn't replace CAD: model the interfaces
26
+ there, let loadpath grow the material between them, and bring the result
27
+ back as STEP or STL. Its edge over drawing the part yourself is that every
28
+ result comes with an independent check (safety factor, deflection,
29
+ buckling, printability) you can report to the user.
30
+
19
31
  ## Workflow
20
32
 
21
33
  1. **Model the interfaces exactly** (in build123d, CadQuery, or by hand):