loadpath 0.1.1__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.1 → loadpath-0.1.3}/PKG-INFO +89 -54
  2. {loadpath-0.1.1 → loadpath-0.1.3}/README.md +88 -53
  3. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/SKILL.md +12 -0
  4. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath.egg-info/PKG-INFO +89 -54
  5. {loadpath-0.1.1 → loadpath-0.1.3}/pyproject.toml +1 -1
  6. {loadpath-0.1.1 → loadpath-0.1.3}/LICENSE +0 -0
  7. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/README.md +0 -0
  8. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/__init__.py +0 -0
  9. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/__main__.py +0 -0
  10. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/am.py +0 -0
  11. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/amgfast.py +0 -0
  12. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/assembly.py +0 -0
  13. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/__init__.py +0 -0
  14. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/beams.py +0 -0
  15. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/cases/ge-bracket.json +0 -0
  16. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/evaluate.py +0 -0
  17. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/mechanisms.py +0 -0
  18. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/problems.py +0 -0
  19. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/reference/bridge-3d.top3d.npz +0 -0
  20. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/reference/cantilever-3d.top3d.npz +0 -0
  21. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/reference/lbracket-2d.top88-ft2.npz +0 -0
  22. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/reference/mbb-2d.top88-ft1.npz +0 -0
  23. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/reference/mbb-2d.top88-ft2.npz +0 -0
  24. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/reference.py +0 -0
  25. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/benchmarks/run.py +0 -0
  26. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/brep.py +0 -0
  27. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/bucklingopt.py +0 -0
  28. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/buildsim.py +0 -0
  29. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/cadimport.py +0 -0
  30. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/calibration.py +0 -0
  31. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/cavities.py +0 -0
  32. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/__init__.py +0 -0
  33. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/dfm.py +0 -0
  34. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/exchanger.py +0 -0
  35. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/fea.py +0 -0
  36. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/fit.py +0 -0
  37. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/networks.py +0 -0
  38. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/opening.py +0 -0
  39. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/checks/sdf_kit.py +0 -0
  40. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/conjugate.py +0 -0
  41. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/constrained.py +0 -0
  42. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/contact.py +0 -0
  43. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/coopt.py +0 -0
  44. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/cores.py +0 -0
  45. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/crease.py +0 -0
  46. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/critic.py +0 -0
  47. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/crosscheck.py +0 -0
  48. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/cutcell.py +0 -0
  49. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/data/lattice_buckling.json +0 -0
  50. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/data/lattice_tensors.json +0 -0
  51. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/data/published_experiments.json +0 -0
  52. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/decimate.py +0 -0
  53. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/delivery.py +0 -0
  54. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/directions.py +0 -0
  55. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/domain.py +0 -0
  56. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/drains.py +0 -0
  57. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/durability.py +0 -0
  58. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/editor.html +0 -0
  59. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/editor.py +0 -0
  60. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/escape.py +0 -0
  61. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/__init__.py +0 -0
  62. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/baselines/coarse.json +0 -0
  63. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/baselines/full.json +0 -0
  64. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/brief_kinds/__init__.py +0 -0
  65. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/brief_kinds/heatx.py +0 -0
  66. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/brief_kinds/lattice.py +0 -0
  67. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/brief_kinds/multimat.py +0 -0
  68. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/assets/bracket.step +0 -0
  69. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/assets/desk_arm.urdf +0 -0
  70. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/assets/elbow-gearbox.stl +0 -0
  71. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/assets/motor-body.stl +0 -0
  72. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/assets/sketch.png +0 -0
  73. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/base-adapter-fdm.json +0 -0
  74. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/bell-crank-lpbf.json +0 -0
  75. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/belt-tensioner-fdm.json +0 -0
  76. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/camera-boom-mjf.json +0 -0
  77. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/camera-mount-pla.json +0 -0
  78. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/coolant-isolator-petg.json +0 -0
  79. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-bearing-bracket-sls.json +0 -0
  80. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-gearbox-forearm-mjf.json +0 -0
  81. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-link-fatigue-fdm.json +0 -0
  82. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/elbow-stop-pad-tpu.json +0 -0
  83. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/forearm-fdm.json +0 -0
  84. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/forearm-servo-link-fdm.json +0 -0
  85. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/grip-pad-finger-mm.json +0 -0
  86. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-bracket-creep-fdm.json +0 -0
  87. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-finger-fdm.json +0 -0
  88. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-jaw-fatigue-mjf.json +0 -0
  89. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/gripper-palm-fdm.json +0 -0
  90. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/hot-stepper-mount-asa-fdm.json +0 -0
  91. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/hpu-oil-cooler-lpbf.json +0 -0
  92. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/isolated-camera-mount-mm.json +0 -0
  93. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/kart-charge-cooler-lpbf.json +0 -0
  94. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/lighten-step-bracket.json +0 -0
  95. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/nema17-mount-stl.json +0 -0
  96. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/pillow-block-sls.json +0 -0
  97. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/polyjet-fingertip-mm.json +0 -0
  98. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/rod-hook-pla.json +0 -0
  99. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/sensor-arm-resin.json +0 -0
  100. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/shelf-bracket-pla.json +0 -0
  101. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/shoulder-riser-mjf.json +0 -0
  102. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/sketch-clevis.json +0 -0
  103. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/spring-bracket-pacf.json +0 -0
  104. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/tool-flange-ti64.json +0 -0
  105. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/tray-arm-lattice-fdm.json +0 -0
  106. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/turret-fdm.json +0 -0
  107. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/upper-arm-sls.json +0 -0
  108. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/urdf-forearm.json +0 -0
  109. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/wrist-link-mjf.json +0 -0
  110. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs/wrist-yoke-mjf.json +0 -0
  111. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/briefs.py +0 -0
  112. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/arm-link-cast.json +0 -0
  113. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/arm-link-driven.json +0 -0
  114. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/arm-link-sandwich.json +0 -0
  115. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/arm-link.json +0 -0
  116. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/bell-crank.json +0 -0
  117. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/grip-turret.json +0 -0
  118. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/grip-upper-arm.json +0 -0
  119. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/grip-wrist-link-mjf.json +0 -0
  120. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/grip-wrist-yoke.json +0 -0
  121. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/lpbf-intercooler-core.json +0 -0
  122. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/mbb-beam.json +0 -0
  123. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/motor-body.stl +0 -0
  124. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/motor-mount.json +0 -0
  125. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/printed-hook.json +0 -0
  126. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/wall-bracket-fasteners.json +0 -0
  127. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/cases/wall-bracket.json +0 -0
  128. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/corpus.py +0 -0
  129. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/pareto.py +0 -0
  130. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/evals/run.py +0 -0
  131. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/arm-link.json +0 -0
  132. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/bumpered-bracket-compression.json +0 -0
  133. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/bumpered-bracket-lattice.json +0 -0
  134. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/bumpered-bracket.json +0 -0
  135. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/gripper-finger-mm.json +0 -0
  136. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/heat-exchanger-counterflow.json +0 -0
  137. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/heat-exchanger-crossflow-tuned.json +0 -0
  138. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/heat-exchanger-crossflow.json +0 -0
  139. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/pedal-lattice.json +0 -0
  140. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/pressure-plenum.json +0 -0
  141. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/examples/shelf-bracket.json +0 -0
  142. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/exchanger.py +0 -0
  143. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/fasteners.py +0 -0
  144. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/fem.py +0 -0
  145. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/femops.py +0 -0
  146. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/fieldjit.py +0 -0
  147. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/fieldops.py +0 -0
  148. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/fields.py +0 -0
  149. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/fieldtorch.py +0 -0
  150. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/flow.py +0 -0
  151. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/flowtopo.py +0 -0
  152. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/gpu.py +0 -0
  153. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/heatx.py +0 -0
  154. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/heatx_thermal.py +0 -0
  155. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/homogenized.py +0 -0
  156. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/ibrep.py +0 -0
  157. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/impact.py +0 -0
  158. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/infill.py +0 -0
  159. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/interface_library.py +0 -0
  160. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/interlock.py +0 -0
  161. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/isolator.py +0 -0
  162. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/knn.py +0 -0
  163. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice.py +0 -0
  164. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice3mf.py +0 -0
  165. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice_buckling.py +0 -0
  166. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice_grade.py +0 -0
  167. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice_orient.py +0 -0
  168. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice_print.py +0 -0
  169. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/lattice_tensors.py +0 -0
  170. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/latticestep.py +0 -0
  171. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/manufacture.py +0 -0
  172. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/material_library.py +0 -0
  173. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/materials.py +0 -0
  174. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/mcp_server.py +0 -0
  175. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/mechanism.py +0 -0
  176. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/mechanism_nl.py +0 -0
  177. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/meshops.py +0 -0
  178. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/mg.py +0 -0
  179. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/mma.py +0 -0
  180. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/modal.py +0 -0
  181. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/multimat.py +0 -0
  182. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/narrowband.py +0 -0
  183. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/nlkernel.py +0 -0
  184. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/nonlinear.py +0 -0
  185. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/orient.py +0 -0
  186. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/porous.py +0 -0
  187. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/pressure.py +0 -0
  188. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/preview.py +0 -0
  189. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/printcheck.py +0 -0
  190. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/printsetup.py +0 -0
  191. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/processcheck.py +0 -0
  192. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/quick.py +0 -0
  193. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/recall.py +0 -0
  194. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/reconstruct.py +0 -0
  195. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/render.py +0 -0
  196. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/resolved.py +0 -0
  197. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/schema.py +0 -0
  198. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/sdf_kit.py +0 -0
  199. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/selfx.py +0 -0
  200. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/shapes.py +0 -0
  201. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/sharp.py +0 -0
  202. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/simp.py +0 -0
  203. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/sizing.py +0 -0
  204. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/slicer.py +0 -0
  205. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/spec.py +0 -0
  206. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/step.py +0 -0
  207. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/struts.py +0 -0
  208. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/study.py +0 -0
  209. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/tasks.py +0 -0
  210. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/thermal.py +0 -0
  211. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/threemf.py +0 -0
  212. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/tune.py +0 -0
  213. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/validation.py +0 -0
  214. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/verify.py +0 -0
  215. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/viewer.html +0 -0
  216. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/viewer.py +0 -0
  217. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/viscoelastic.py +0 -0
  218. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/voxelprint.py +0 -0
  219. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath/voxels.py +0 -0
  220. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath.egg-info/SOURCES.txt +0 -0
  221. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath.egg-info/dependency_links.txt +0 -0
  222. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath.egg-info/entry_points.txt +0 -0
  223. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath.egg-info/requires.txt +0 -0
  224. {loadpath-0.1.1 → loadpath-0.1.3}/loadpath.egg-info/top_level.txt +0 -0
  225. {loadpath-0.1.1 → loadpath-0.1.3}/setup.cfg +0 -0
  226. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_agent_path.py +0 -0
  227. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_amgfast.py +0 -0
  228. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_assembly.py +0 -0
  229. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_benchmarks.py +0 -0
  230. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_brief_kinds_heatx.py +0 -0
  231. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_brief_kinds_lattice.py +0 -0
  232. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_brief_kinds_multimat.py +0 -0
  233. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_buckling_check.py +0 -0
  234. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_bucklingopt.py +0 -0
  235. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_buildsim.py +0 -0
  236. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_cadimport.py +0 -0
  237. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_calibration.py +0 -0
  238. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_conjugate.py +0 -0
  239. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_contact.py +0 -0
  240. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_coopt.py +0 -0
  241. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_cores.py +0 -0
  242. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_crease.py +0 -0
  243. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_cutcell.py +0 -0
  244. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_dfm.py +0 -0
  245. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_directions.py +0 -0
  246. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_durability.py +0 -0
  247. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_editor.py +0 -0
  248. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_escape.py +0 -0
  249. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_evals.py +0 -0
  250. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_femops.py +0 -0
  251. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_field_materials.py +0 -0
  252. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_fieldjit.py +0 -0
  253. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_fields.py +0 -0
  254. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_fieldtorch.py +0 -0
  255. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_fit.py +0 -0
  256. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_flow.py +0 -0
  257. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_flowtopo.py +0 -0
  258. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_heatx_fixes.py +0 -0
  259. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_heatx_rating.py +0 -0
  260. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_hex8_im.py +0 -0
  261. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_impact.py +0 -0
  262. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_interface.py +0 -0
  263. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_interfaces.py +0 -0
  264. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_interlock.py +0 -0
  265. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_lattice3mf.py +0 -0
  266. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_lattice_print.py +0 -0
  267. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_lattice_tensors.py +0 -0
  268. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_latticestep.py +0 -0
  269. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_loadpath.py +0 -0
  270. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_manufacture.py +0 -0
  271. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_materials.py +0 -0
  272. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_meshops.py +0 -0
  273. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_metal.py +0 -0
  274. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_mg.py +0 -0
  275. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_multimat.py +0 -0
  276. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_multimat_fixes.py +0 -0
  277. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_narrowband.py +0 -0
  278. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_nonlinear.py +0 -0
  279. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_porous.py +0 -0
  280. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_pressure.py +0 -0
  281. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_preview.py +0 -0
  282. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_print.py +0 -0
  283. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_printsetup.py +0 -0
  284. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_process.py +0 -0
  285. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_published_experiments.py +0 -0
  286. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_recall.py +0 -0
  287. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_sharp.py +0 -0
  288. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_sizing.py +0 -0
  289. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_slicer.py +0 -0
  290. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_struts.py +0 -0
  291. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_tetsizing.py +0 -0
  292. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_thermal.py +0 -0
  293. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_threemf_multi.py +0 -0
  294. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_tune.py +0 -0
  295. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_tutorials.py +0 -0
  296. {loadpath-0.1.1 → loadpath-0.1.3}/tests/test_voxelprint.py +0 -0
  297. {loadpath-0.1.1 → 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.1
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,18 +70,19 @@ 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.1/docs/images/cases/printed-hook.png" width="380"></td>
74
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/printed-hook.png" width="380"></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.1/docs/images/cases/bell-crank.png" width="380"></td>
78
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/bell-crank.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
- <td align="center" colspan="2"><sub>Left, the part loadpath delivered (blue: load, red: kept bore). Right, its
82
- stress from a fresh analysis of that mesh, blue (none) to red (the part's 98th percentile), on the shape bent by
83
- the worst load case. Top: a 300 N wall hook printed upright without supports, 24.2 g, SF 2.73. Bottom: a 500 N
84
- aluminium bell crank (LPBF), 23.4 g, SF 3.22. More in <a href="#examples">Examples</a>.</sub></td>
81
+ <td align="center" colspan="2"><sub>Two robot-arm parts as loadpath delivered them (left) and their stress from a fresh
82
+ analysis of that mesh (right), blue (none) to red (the part's 98th percentile), on the shape bent by the worst
83
+ load case. Top: a wrist link between two servos, MJF nylon, 40.2 g, safety factor 5.8. Bottom: a servo cradle
84
+ held only at its eight screw bosses, glass-filled SLS nylon, 17.3 g, safety factor 3.9. More in
85
+ <a href="#examples">Examples</a>.</sub></td>
85
86
  </tr>
86
87
  </table>
87
88
 
@@ -99,12 +100,46 @@ Then ask in plain words:
99
100
  > printed on an FDM printer.
100
101
 
101
102
  The agent writes the study, checks it, runs it in the background and reads
102
- the report back. Its guide is [loadpath/SKILL.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
103
104
  `loadpath_guide` tool returns it); the tools and the loop are in
104
- [docs/agents.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
105
106
  leaves the machine. Units are millimetres, newtons and megapascals. MIT
106
107
  licensed.
107
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
+
108
143
  ## What it does
109
144
 
110
145
  - **Topology optimization** on a voxel grid (SIMP with a density filter,
@@ -121,23 +156,23 @@ licensed.
121
156
  clean-outs), plus milling and casting constraints.
122
157
  - **Field modelling**: a part as a graph of implicit fields, so skins,
123
158
  lattices (TPMS and strut) and fillets can be graded by stress or by
124
- distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/fields.md)).
159
+ distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md)).
125
160
  - **Other analyses**: large deflection and buckling, compliant mechanisms,
126
161
  thermal loads, fatigue and creep estimates, lattice crush and impact,
127
162
  vibration, lattice-Boltzmann flow and conjugate heat for heat exchangers
128
163
  and cold plates, and layer-by-layer warp and residual stress
129
- ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/BUILDSIM.md)).
164
+ ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BUILDSIM.md)).
130
165
  - **CAD in and out**: a STEP or STL part becomes a draft study with its
131
- bores and bolt patterns found ([docs/IMPORT.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
132
167
  export as STL, 3MF, and STEP with exact planes and cylinders at the
133
168
  interfaces; a lattice part (strut cells, TPMS, graded, skinned or open)
134
- 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.1/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)).
135
170
  - **Mesh checks without a study** (`loadpath.checks`): wall thickness,
136
171
  overhangs, trapped voids, fluid-network isolation, component fit.
137
172
 
138
173
  ## How much to trust it
139
174
 
140
- Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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.
141
176
  In short:
142
177
 
143
178
  - **The solvers match analytic answers** in the test suite: beam
@@ -162,16 +197,16 @@ In short:
162
197
  ## Case studies
163
198
 
164
199
  Each states the problem, the setup, the numbers against a named baseline,
165
- and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/docs/case-studies/)).
200
+ and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/case-studies/)).
166
201
 
167
202
  | Case study | Result | Baseline |
168
203
  | --- | --- | --- |
169
- | [Eval suite](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
170
- | [GRIP robot arm](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
171
- | [Arm link cores](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
172
- | [Liquid cold plate](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
173
- | [TPU finger](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
174
- | [Benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
175
210
 
176
211
  ## Command line and Python
177
212
 
@@ -190,7 +225,7 @@ numba), `gpu` (PyTorch for large grids on CUDA, Apple Silicon or CPU
190
225
  threads).
191
226
 
192
227
  Studies are validated against a published JSON Schema
193
- ([`schema/`](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/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
194
229
  with its JSON path, so an agent can fix a study in one round trip. Long
195
230
  solves run as background jobs the agent polls. Each finished outcome has an
196
231
  `attention` list of numbers to look at before trusting it, and renders a
@@ -210,51 +245,51 @@ print(best.report["mass"], best.report["safetyFactor"])
210
245
 
211
246
  ## Documentation
212
247
 
213
- - [Quickstart](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/quickstart.md): install to a checked part.
214
- - [Tutorials](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/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
215
250
  (an FDM bracket to 3MF, an SLS lattice with drain holes, a metal heat
216
251
  exchanger, an impact bumper, a STEP part round trip, LPBF distortion
217
252
  compensation, and more).
218
- - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
219
254
  report, the limits.
220
- - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
221
256
  against.
222
- - [Case studies](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/docs/case-studies/) and [benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/BENCHMARKS.md).
223
- - Topics: [fields](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/fields.md), [materials](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/materials.md),
224
- [build simulation](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/BUILDSIM.md), [calibration](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/CALIBRATION.md),
225
- [CAD import](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/IMPORT.md), [slicer](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/slicer.md),
226
- [multi-material](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/MULTIMATERIAL.md), [impact](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/IMPACT.md),
227
- [mechanisms](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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).
228
263
 
229
264
  <!-- gallery:start -->
230
265
 
231
266
  ## Examples
232
267
 
233
- 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.1/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.1/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).
234
269
 
235
270
  <table>
236
271
  <tr>
237
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
238
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
239
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
240
275
  </tr>
241
276
  <tr>
242
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
243
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
244
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
245
280
  </tr>
246
281
  <tr>
247
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
248
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
249
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
250
285
  </tr>
251
286
  <tr>
252
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
253
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
254
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
255
290
  </tr>
256
291
  <tr>
257
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
258
293
  </tr>
259
294
  </table>
260
295
 
@@ -262,23 +297,23 @@ Where the load goes: von Mises stress, blue (none) to red (the part's 98th perce
262
297
 
263
298
  <table>
264
299
  <tr>
265
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/bell-crank.png" width="250"><br><sub>bell-crank</sub></td>
266
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/grip-upper-arm.png" width="250"><br><sub>grip-upper-arm</sub></td>
267
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
268
303
  </tr>
269
304
  </table>
270
305
 
271
306
  Two-fluid heat exchangers: two isolated channel networks through one sheet gyroid, with headers that print without support.
272
307
 
273
- ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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)
274
309
 
275
310
  Printed in metal, nothing inside can be supported: the channels end in peaked roofs instead of flat ceilings (red).
276
311
 
277
- ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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)
278
313
 
279
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.
280
315
 
281
- ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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)
282
317
 
283
318
  <sub>Rendered 2026-11-03 from `6c97b57` by `python docs/gallery.py`.</sub>
284
319
 
@@ -9,18 +9,19 @@ 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.1/docs/images/cases/printed-hook.png" width="380"></td>
13
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/printed-hook.png" width="380"></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.1/docs/images/cases/bell-crank.png" width="380"></td>
17
- <td align="center" width="50%"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/bell-crank.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
- <td align="center" colspan="2"><sub>Left, the part loadpath delivered (blue: load, red: kept bore). Right, its
21
- stress from a fresh analysis of that mesh, blue (none) to red (the part's 98th percentile), on the shape bent by
22
- the worst load case. Top: a 300 N wall hook printed upright without supports, 24.2 g, SF 2.73. Bottom: a 500 N
23
- aluminium bell crank (LPBF), 23.4 g, SF 3.22. More in <a href="#examples">Examples</a>.</sub></td>
20
+ <td align="center" colspan="2"><sub>Two robot-arm parts as loadpath delivered them (left) and their stress from a fresh
21
+ analysis of that mesh (right), blue (none) to red (the part's 98th percentile), on the shape bent by the worst
22
+ load case. Top: a wrist link between two servos, MJF nylon, 40.2 g, safety factor 5.8. Bottom: a servo cradle
23
+ held only at its eight screw bosses, glass-filled SLS nylon, 17.3 g, safety factor 3.9. More in
24
+ <a href="#examples">Examples</a>.</sub></td>
24
25
  </tr>
25
26
  </table>
26
27
 
@@ -38,12 +39,46 @@ Then ask in plain words:
38
39
  > printed on an FDM printer.
39
40
 
40
41
  The agent writes the study, checks it, runs it in the background and reads
41
- the report back. Its guide is [loadpath/SKILL.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
42
43
  `loadpath_guide` tool returns it); the tools and the loop are in
43
- [docs/agents.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
44
45
  leaves the machine. Units are millimetres, newtons and megapascals. MIT
45
46
  licensed.
46
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
+
47
82
  ## What it does
48
83
 
49
84
  - **Topology optimization** on a voxel grid (SIMP with a density filter,
@@ -60,23 +95,23 @@ licensed.
60
95
  clean-outs), plus milling and casting constraints.
61
96
  - **Field modelling**: a part as a graph of implicit fields, so skins,
62
97
  lattices (TPMS and strut) and fillets can be graded by stress or by
63
- distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/fields.md)).
98
+ distance ([docs/fields.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/fields.md)).
64
99
  - **Other analyses**: large deflection and buckling, compliant mechanisms,
65
100
  thermal loads, fatigue and creep estimates, lattice crush and impact,
66
101
  vibration, lattice-Boltzmann flow and conjugate heat for heat exchangers
67
102
  and cold plates, and layer-by-layer warp and residual stress
68
- ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/BUILDSIM.md)).
103
+ ([docs/BUILDSIM.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.3/docs/BUILDSIM.md)).
69
104
  - **CAD in and out**: a STEP or STL part becomes a draft study with its
70
- bores and bolt patterns found ([docs/IMPORT.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
71
106
  export as STL, 3MF, and STEP with exact planes and cylinders at the
72
107
  interfaces; a lattice part (strut cells, TPMS, graded, skinned or open)
73
- 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.1/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)).
74
109
  - **Mesh checks without a study** (`loadpath.checks`): wall thickness,
75
110
  overhangs, trapped voids, fluid-network isolation, component fit.
76
111
 
77
112
  ## How much to trust it
78
113
 
79
- Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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.
80
115
  In short:
81
116
 
82
117
  - **The solvers match analytic answers** in the test suite: beam
@@ -101,16 +136,16 @@ In short:
101
136
  ## Case studies
102
137
 
103
138
  Each states the problem, the setup, the numbers against a named baseline,
104
- and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/docs/case-studies/)).
139
+ and the limitations ([docs/case-studies/](https://github.com/connorwhite-online/loadpath/tree/v0.1.3/docs/case-studies/)).
105
140
 
106
141
  | Case study | Result | Baseline |
107
142
  | --- | --- | --- |
108
- | [Eval suite](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
109
- | [GRIP robot arm](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
110
- | [Arm link cores](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
111
- | [Liquid cold plate](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
112
- | [TPU finger](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
113
- | [Benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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 |
114
149
 
115
150
  ## Command line and Python
116
151
 
@@ -129,7 +164,7 @@ numba), `gpu` (PyTorch for large grids on CUDA, Apple Silicon or CPU
129
164
  threads).
130
165
 
131
166
  Studies are validated against a published JSON Schema
132
- ([`schema/`](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/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
133
168
  with its JSON path, so an agent can fix a study in one round trip. Long
134
169
  solves run as background jobs the agent polls. Each finished outcome has an
135
170
  `attention` list of numbers to look at before trusting it, and renders a
@@ -149,51 +184,51 @@ print(best.report["mass"], best.report["safetyFactor"])
149
184
 
150
185
  ## Documentation
151
186
 
152
- - [Quickstart](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/quickstart.md): install to a checked part.
153
- - [Tutorials](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/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
154
189
  (an FDM bracket to 3MF, an SLS lattice with drain holes, a metal heat
155
190
  exchanger, an impact bumper, a STEP part round trip, LPBF distortion
156
191
  compensation, and more).
157
- - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
158
193
  report, the limits.
159
- - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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
160
195
  against.
161
- - [Case studies](https://github.com/connorwhite-online/loadpath/tree/v0.1.1/docs/case-studies/) and [benchmarks](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/BENCHMARKS.md).
162
- - Topics: [fields](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/fields.md), [materials](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/materials.md),
163
- [build simulation](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/BUILDSIM.md), [calibration](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/CALIBRATION.md),
164
- [CAD import](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/IMPORT.md), [slicer](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/slicer.md),
165
- [multi-material](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/MULTIMATERIAL.md), [impact](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/IMPACT.md),
166
- [mechanisms](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/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).
167
202
 
168
203
  <!-- gallery:start -->
169
204
 
170
205
  ## Examples
171
206
 
172
- 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.1/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.1/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).
173
208
 
174
209
  <table>
175
210
  <tr>
176
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
177
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
178
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
179
214
  </tr>
180
215
  <tr>
181
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
182
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
183
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
184
219
  </tr>
185
220
  <tr>
186
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
187
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
188
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
189
224
  </tr>
190
225
  <tr>
191
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
192
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
193
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
194
229
  </tr>
195
230
  <tr>
196
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
197
232
  </tr>
198
233
  </table>
199
234
 
@@ -201,23 +236,23 @@ Where the load goes: von Mises stress, blue (none) to red (the part's 98th perce
201
236
 
202
237
  <table>
203
238
  <tr>
204
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/bell-crank.png" width="250"><br><sub>bell-crank</sub></td>
205
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/stress/grip-upper-arm.png" width="250"><br><sub>grip-upper-arm</sub></td>
206
- <td align="center" valign="top"><img src="https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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>
207
242
  </tr>
208
243
  </table>
209
244
 
210
245
  Two-fluid heat exchangers: two isolated channel networks through one sheet gyroid, with headers that print without support.
211
246
 
212
- ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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)
213
248
 
214
249
  Printed in metal, nothing inside can be supported: the channels end in peaked roofs instead of flat ceilings (red).
215
250
 
216
- ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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)
217
252
 
218
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.
219
254
 
220
- ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/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)
221
256
 
222
257
  <sub>Rendered 2026-11-03 from `6c97b57` by `python docs/gallery.py`.</sub>
223
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):