loadpath 0.1.1__py3-none-any.whl

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 (220) hide show
  1. loadpath/README.md +294 -0
  2. loadpath/SKILL.md +584 -0
  3. loadpath/__init__.py +17 -0
  4. loadpath/__main__.py +1202 -0
  5. loadpath/am.py +316 -0
  6. loadpath/amgfast.py +326 -0
  7. loadpath/assembly.py +985 -0
  8. loadpath/benchmarks/__init__.py +0 -0
  9. loadpath/benchmarks/beams.py +266 -0
  10. loadpath/benchmarks/cases/ge-bracket.json +380 -0
  11. loadpath/benchmarks/evaluate.py +172 -0
  12. loadpath/benchmarks/mechanisms.py +416 -0
  13. loadpath/benchmarks/problems.py +140 -0
  14. loadpath/benchmarks/reference/bridge-3d.top3d.npz +0 -0
  15. loadpath/benchmarks/reference/cantilever-3d.top3d.npz +0 -0
  16. loadpath/benchmarks/reference/lbracket-2d.top88-ft2.npz +0 -0
  17. loadpath/benchmarks/reference/mbb-2d.top88-ft1.npz +0 -0
  18. loadpath/benchmarks/reference/mbb-2d.top88-ft2.npz +0 -0
  19. loadpath/benchmarks/reference.py +138 -0
  20. loadpath/benchmarks/run.py +301 -0
  21. loadpath/brep.py +1470 -0
  22. loadpath/bucklingopt.py +300 -0
  23. loadpath/buildsim.py +1490 -0
  24. loadpath/cadimport.py +904 -0
  25. loadpath/calibration.py +885 -0
  26. loadpath/cavities.py +211 -0
  27. loadpath/checks/__init__.py +0 -0
  28. loadpath/checks/dfm.py +354 -0
  29. loadpath/checks/exchanger.py +7 -0
  30. loadpath/checks/fea.py +212 -0
  31. loadpath/checks/fit.py +475 -0
  32. loadpath/checks/networks.py +260 -0
  33. loadpath/checks/opening.py +67 -0
  34. loadpath/checks/sdf_kit.py +7 -0
  35. loadpath/conjugate.py +267 -0
  36. loadpath/constrained.py +329 -0
  37. loadpath/contact.py +691 -0
  38. loadpath/coopt.py +342 -0
  39. loadpath/cores.py +163 -0
  40. loadpath/crease.py +1138 -0
  41. loadpath/critic.py +212 -0
  42. loadpath/crosscheck.py +1107 -0
  43. loadpath/cutcell.py +510 -0
  44. loadpath/data/lattice_buckling.json +439 -0
  45. loadpath/data/lattice_tensors.json +27449 -0
  46. loadpath/data/published_experiments.json +71 -0
  47. loadpath/decimate.py +177 -0
  48. loadpath/delivery.py +190 -0
  49. loadpath/directions.py +262 -0
  50. loadpath/domain.py +630 -0
  51. loadpath/drains.py +615 -0
  52. loadpath/durability.py +413 -0
  53. loadpath/editor.html +3135 -0
  54. loadpath/editor.py +610 -0
  55. loadpath/escape.py +354 -0
  56. loadpath/evals/__init__.py +0 -0
  57. loadpath/evals/baselines/coarse.json +1543 -0
  58. loadpath/evals/baselines/full.json +1497 -0
  59. loadpath/evals/brief_kinds/__init__.py +1 -0
  60. loadpath/evals/brief_kinds/heatx.py +387 -0
  61. loadpath/evals/brief_kinds/lattice.py +571 -0
  62. loadpath/evals/brief_kinds/multimat.py +593 -0
  63. loadpath/evals/briefs/assets/bracket.step +1201 -0
  64. loadpath/evals/briefs/assets/desk_arm.urdf +22 -0
  65. loadpath/evals/briefs/assets/elbow-gearbox.stl +0 -0
  66. loadpath/evals/briefs/assets/motor-body.stl +0 -0
  67. loadpath/evals/briefs/assets/sketch.png +0 -0
  68. loadpath/evals/briefs/base-adapter-fdm.json +492 -0
  69. loadpath/evals/briefs/bell-crank-lpbf.json +180 -0
  70. loadpath/evals/briefs/belt-tensioner-fdm.json +151 -0
  71. loadpath/evals/briefs/camera-boom-mjf.json +339 -0
  72. loadpath/evals/briefs/camera-mount-pla.json +203 -0
  73. loadpath/evals/briefs/coolant-isolator-petg.json +100 -0
  74. loadpath/evals/briefs/elbow-bearing-bracket-sls.json +300 -0
  75. loadpath/evals/briefs/elbow-gearbox-forearm-mjf.json +558 -0
  76. loadpath/evals/briefs/elbow-link-fatigue-fdm.json +251 -0
  77. loadpath/evals/briefs/elbow-stop-pad-tpu.json +39 -0
  78. loadpath/evals/briefs/forearm-fdm.json +146 -0
  79. loadpath/evals/briefs/forearm-servo-link-fdm.json +327 -0
  80. loadpath/evals/briefs/grip-pad-finger-mm.json +354 -0
  81. loadpath/evals/briefs/gripper-bracket-creep-fdm.json +340 -0
  82. loadpath/evals/briefs/gripper-finger-fdm.json +155 -0
  83. loadpath/evals/briefs/gripper-jaw-fatigue-mjf.json +328 -0
  84. loadpath/evals/briefs/gripper-palm-fdm.json +715 -0
  85. loadpath/evals/briefs/hot-stepper-mount-asa-fdm.json +471 -0
  86. loadpath/evals/briefs/hpu-oil-cooler-lpbf.json +121 -0
  87. loadpath/evals/briefs/isolated-camera-mount-mm.json +675 -0
  88. loadpath/evals/briefs/kart-charge-cooler-lpbf.json +93 -0
  89. loadpath/evals/briefs/lighten-step-bracket.json +220 -0
  90. loadpath/evals/briefs/nema17-mount-stl.json +429 -0
  91. loadpath/evals/briefs/pillow-block-sls.json +220 -0
  92. loadpath/evals/briefs/polyjet-fingertip-mm.json +305 -0
  93. loadpath/evals/briefs/rod-hook-pla.json +154 -0
  94. loadpath/evals/briefs/sensor-arm-resin.json +150 -0
  95. loadpath/evals/briefs/shelf-bracket-pla.json +158 -0
  96. loadpath/evals/briefs/shoulder-riser-mjf.json +487 -0
  97. loadpath/evals/briefs/sketch-clevis.json +229 -0
  98. loadpath/evals/briefs/spring-bracket-pacf.json +294 -0
  99. loadpath/evals/briefs/tool-flange-ti64.json +280 -0
  100. loadpath/evals/briefs/tray-arm-lattice-fdm.json +260 -0
  101. loadpath/evals/briefs/turret-fdm.json +281 -0
  102. loadpath/evals/briefs/upper-arm-sls.json +179 -0
  103. loadpath/evals/briefs/urdf-forearm.json +233 -0
  104. loadpath/evals/briefs/wrist-link-mjf.json +278 -0
  105. loadpath/evals/briefs/wrist-yoke-mjf.json +245 -0
  106. loadpath/evals/briefs.py +393 -0
  107. loadpath/evals/cases/arm-link-cast.json +157 -0
  108. loadpath/evals/cases/arm-link-driven.json +171 -0
  109. loadpath/evals/cases/arm-link-sandwich.json +315 -0
  110. loadpath/evals/cases/arm-link.json +111 -0
  111. loadpath/evals/cases/bell-crank.json +116 -0
  112. loadpath/evals/cases/grip-turret.json +479 -0
  113. loadpath/evals/cases/grip-upper-arm.json +253 -0
  114. loadpath/evals/cases/grip-wrist-link-mjf.json +929 -0
  115. loadpath/evals/cases/grip-wrist-yoke.json +831 -0
  116. loadpath/evals/cases/lpbf-intercooler-core.json +59 -0
  117. loadpath/evals/cases/mbb-beam.json +61 -0
  118. loadpath/evals/cases/motor-body.stl +0 -0
  119. loadpath/evals/cases/motor-mount.json +265 -0
  120. loadpath/evals/cases/printed-hook.json +77 -0
  121. loadpath/evals/cases/wall-bracket-fasteners.json +125 -0
  122. loadpath/evals/cases/wall-bracket.json +126 -0
  123. loadpath/evals/corpus.py +179 -0
  124. loadpath/evals/pareto.py +90 -0
  125. loadpath/evals/run.py +860 -0
  126. loadpath/examples/arm-link.json +25 -0
  127. loadpath/examples/bumpered-bracket-compression.json +225 -0
  128. loadpath/examples/bumpered-bracket-lattice.json +204 -0
  129. loadpath/examples/bumpered-bracket.json +34 -0
  130. loadpath/examples/gripper-finger-mm.json +185 -0
  131. loadpath/examples/heat-exchanger-counterflow.json +21 -0
  132. loadpath/examples/heat-exchanger-crossflow-tuned.json +48 -0
  133. loadpath/examples/heat-exchanger-crossflow.json +20 -0
  134. loadpath/examples/pedal-lattice.json +23 -0
  135. loadpath/examples/pressure-plenum.json +12 -0
  136. loadpath/examples/shelf-bracket.json +27 -0
  137. loadpath/exchanger.py +831 -0
  138. loadpath/fasteners.py +199 -0
  139. loadpath/fem.py +668 -0
  140. loadpath/femops.py +70 -0
  141. loadpath/fieldjit.py +981 -0
  142. loadpath/fieldops.py +119 -0
  143. loadpath/fields.py +3697 -0
  144. loadpath/fieldtorch.py +464 -0
  145. loadpath/flow.py +984 -0
  146. loadpath/flowtopo.py +300 -0
  147. loadpath/gpu.py +521 -0
  148. loadpath/heatx.py +1067 -0
  149. loadpath/heatx_thermal.py +432 -0
  150. loadpath/homogenized.py +886 -0
  151. loadpath/ibrep.py +552 -0
  152. loadpath/impact.py +693 -0
  153. loadpath/infill.py +376 -0
  154. loadpath/interface_library.py +340 -0
  155. loadpath/interlock.py +186 -0
  156. loadpath/isolator.py +149 -0
  157. loadpath/knn.py +204 -0
  158. loadpath/lattice.py +1065 -0
  159. loadpath/lattice3mf.py +760 -0
  160. loadpath/lattice_buckling.py +245 -0
  161. loadpath/lattice_grade.py +325 -0
  162. loadpath/lattice_orient.py +595 -0
  163. loadpath/lattice_print.py +159 -0
  164. loadpath/lattice_tensors.py +558 -0
  165. loadpath/latticestep.py +1210 -0
  166. loadpath/manufacture.py +446 -0
  167. loadpath/material_library.py +489 -0
  168. loadpath/materials.py +144 -0
  169. loadpath/mcp_server.py +786 -0
  170. loadpath/mechanism.py +218 -0
  171. loadpath/mechanism_nl.py +811 -0
  172. loadpath/meshops.py +452 -0
  173. loadpath/mg.py +853 -0
  174. loadpath/mma.py +214 -0
  175. loadpath/modal.py +210 -0
  176. loadpath/multimat.py +1788 -0
  177. loadpath/narrowband.py +418 -0
  178. loadpath/nlkernel.py +241 -0
  179. loadpath/nonlinear.py +1095 -0
  180. loadpath/orient.py +334 -0
  181. loadpath/porous.py +994 -0
  182. loadpath/pressure.py +171 -0
  183. loadpath/preview.py +335 -0
  184. loadpath/printcheck.py +263 -0
  185. loadpath/printsetup.py +207 -0
  186. loadpath/processcheck.py +376 -0
  187. loadpath/quick.py +113 -0
  188. loadpath/recall.py +406 -0
  189. loadpath/reconstruct.py +797 -0
  190. loadpath/render.py +436 -0
  191. loadpath/resolved.py +189 -0
  192. loadpath/schema.py +1701 -0
  193. loadpath/sdf_kit.py +843 -0
  194. loadpath/selfx.py +292 -0
  195. loadpath/shapes.py +584 -0
  196. loadpath/sharp.py +717 -0
  197. loadpath/simp.py +1170 -0
  198. loadpath/sizing.py +312 -0
  199. loadpath/slicer.py +321 -0
  200. loadpath/spec.py +1072 -0
  201. loadpath/step.py +806 -0
  202. loadpath/struts.py +639 -0
  203. loadpath/study.py +1937 -0
  204. loadpath/tasks.py +822 -0
  205. loadpath/thermal.py +1691 -0
  206. loadpath/threemf.py +487 -0
  207. loadpath/tune.py +437 -0
  208. loadpath/validation.py +145 -0
  209. loadpath/verify.py +1215 -0
  210. loadpath/viewer.html +694 -0
  211. loadpath/viewer.py +446 -0
  212. loadpath/viscoelastic.py +106 -0
  213. loadpath/voxelprint.py +582 -0
  214. loadpath/voxels.py +402 -0
  215. loadpath-0.1.1.dist-info/METADATA +319 -0
  216. loadpath-0.1.1.dist-info/RECORD +220 -0
  217. loadpath-0.1.1.dist-info/WHEEL +5 -0
  218. loadpath-0.1.1.dist-info/entry_points.txt +2 -0
  219. loadpath-0.1.1.dist-info/licenses/LICENSE +21 -0
  220. loadpath-0.1.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,319 @@
1
+ Metadata-Version: 2.4
2
+ Name: loadpath
3
+ Version: 0.1.1
4
+ Summary: Generative design for printed parts: topology optimization from keep-outs, preserved geometry and loads, verified in real units.
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/connorwhite-online/loadpath
7
+ Project-URL: Documentation, https://github.com/connorwhite-online/loadpath/tree/main/docs
8
+ Project-URL: Repository, https://github.com/connorwhite-online/loadpath
9
+ Project-URL: Issues, https://github.com/connorwhite-online/loadpath/issues
10
+ Keywords: topology optimization,generative design,3d printing,fea,cad
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Intended Audience :: Manufacturing
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Scientific/Engineering
20
+ Classifier: Topic :: Scientific/Engineering :: Physics
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: numpy>=1.26
25
+ Requires-Dist: scipy>=1.11
26
+ Requires-Dist: pyamg>=5.0
27
+ Requires-Dist: scikit-image>=0.22
28
+ Requires-Dist: trimesh>=4.0
29
+ Requires-Dist: manifold3d>=3.0
30
+ Requires-Dist: rtree>=1.0
31
+ Requires-Dist: numba>=0.59
32
+ Provides-Extra: render
33
+ Requires-Dist: matplotlib>=3.8; extra == "render"
34
+ Requires-Dist: shapely>=2.0; extra == "render"
35
+ Requires-Dist: fast_simplification>=0.1; extra == "render"
36
+ Provides-Extra: mcp
37
+ Requires-Dist: mcp>=2.0; extra == "mcp"
38
+ Requires-Dist: matplotlib>=3.8; extra == "mcp"
39
+ Requires-Dist: shapely>=2.0; extra == "mcp"
40
+ Provides-Extra: gpu
41
+ Requires-Dist: torch>=2.2; extra == "gpu"
42
+ Provides-Extra: flow
43
+ Requires-Dist: numba>=0.59; extra == "flow"
44
+ Provides-Extra: crosscheck
45
+ Requires-Dist: gmsh>=4.11; extra == "crosscheck"
46
+ Requires-Dist: pytetwild>=0.4; extra == "crosscheck"
47
+ Requires-Dist: pyvista>=0.44; extra == "crosscheck"
48
+ Provides-Extra: fast
49
+ Requires-Dist: pypardiso>=0.4; extra == "fast"
50
+ Provides-Extra: critic
51
+ Requires-Dist: anthropic; extra == "critic"
52
+ Requires-Dist: matplotlib>=3.8; extra == "critic"
53
+ Requires-Dist: shapely>=2.0; extra == "critic"
54
+ Provides-Extra: step
55
+ Requires-Dist: cadquery-ocp>=7.7; extra == "step"
56
+ Requires-Dist: embreex>=4.3; extra == "step"
57
+ Provides-Extra: 3mf
58
+ Requires-Dist: lib3mf>=2.4; extra == "3mf"
59
+ Requires-Dist: pillow>=9; extra == "3mf"
60
+ Dynamic: license-file
61
+
62
+ # loadpath
63
+
64
+ Generative design for 3D printed parts (and cast or milled ones), built to be
65
+ driven by coding agents. Tell your agent what a part has to carry and where it
66
+ mounts; loadpath grows the part with topology optimization, meshes it as a
67
+ watertight solid with the interfaces cut exactly, and checks that mesh with a
68
+ fresh finite element analysis. You get an STL, 3MF or STEP and a report: mass,
69
+ safety factor, deflection, thinnest member, printability, pass or fail.
70
+
71
+ <table>
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>
75
+ </tr>
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>
79
+ </tr>
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>
85
+ </tr>
86
+ </table>
87
+
88
+ ## Point your agent at it
89
+
90
+ ```bash
91
+ pip install "loadpath[mcp]"
92
+ claude mcp add loadpath -- loadpath mcp # any MCP client: {"command": "loadpath", "args": ["mcp"]}
93
+ ```
94
+
95
+ Then ask in plain words:
96
+
97
+ > Design a PETG bracket for a 10 kg shelf. It screws to the wall with two
98
+ > M5 bolts 40 mm apart and the shelf sits 60 mm out. Safety factor 2,
99
+ > printed on an FDM printer.
100
+
101
+ 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
+ `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
+ leaves the machine. Units are millimetres, newtons and megapascals. MIT
106
+ licensed.
107
+
108
+ ## What it does
109
+
110
+ - **Topology optimization** on a voxel grid (SIMP with a density filter,
111
+ Heaviside projection and a robust minimum-member formulation), searching
112
+ for the lightest part that meets a safety factor and a deflection limit
113
+ across several load cases. A stress-constrained mode (MMA) is available.
114
+ - **Verification of the delivered mesh**, not the optimizer's density
115
+ field: the STL is analysed again, on a tetrahedral mesh when the
116
+ `crosscheck` extra is installed and on a fine voxel grid otherwise. Keep-out
117
+ intrusion and lost interface geometry are measured with exact booleans.
118
+ - **Process rules** for FDM (overhangs, bridges, layer bond), SLS and MJF
119
+ (trapped powder, escape holes, warp-prone panels), resin (supports, peel,
120
+ suction cups) and powder-bed metal (internal ceilings, powder
121
+ clean-outs), plus milling and casting constraints.
122
+ - **Field modelling**: a part as a graph of implicit fields, so skins,
123
+ 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)).
125
+ - **Other analyses**: large deflection and buckling, compliant mechanisms,
126
+ thermal loads, fatigue and creep estimates, lattice crush and impact,
127
+ vibration, lattice-Boltzmann flow and conjugate heat for heat exchangers
128
+ 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)).
130
+ - **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
132
+ export as STL, 3MF, and STEP with exact planes and cylinders at the
133
+ 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)).
135
+ - **Mesh checks without a study** (`loadpath.checks`): wall thickness,
136
+ overhangs, trapped voids, fluid-network isolation, component fit.
137
+
138
+ ## How much to trust it
139
+
140
+ Read [docs/VALIDATION.md](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/VALIDATION.md) before relying on a number.
141
+ In short:
142
+
143
+ - **The solvers match analytic answers** in the test suite: beam
144
+ deflection within 3-5%, stress at a hole within about 13%, Lamé pressure
145
+ vessels within 5-11%, Poiseuille flow exactly.
146
+ - **The structural check is cross-checked**: CalculiX and loadpath's own
147
+ tetrahedral solver agree within 0.1% on the same mesh. The voxel check
148
+ reads 24-49% higher stress than the tet check, so it errs safe.
149
+ - **The optimizer is benchmarked**: 1-5% less stiff than top88 and top3d at
150
+ equal material on three of their textbook problems, stiffer on the fourth.
151
+ - **Printed lattices match published tests**: against 33 published
152
+ compression tests of printed lattices, the stiffness check has a median
153
+ error of 1.23x (held out) and the strength check stays under the measured
154
+ value on all 33.
155
+ - **Warp prediction is fitted to measured data** (NIST AM-Bench 2018 for
156
+ LPBF IN625, a published ABS study for FDM) and misses other alloys and
157
+ materials by 30-60%.
158
+ - **Everything else is simulation only**, including every part mass and
159
+ safety factor in the case studies. The analysis is linear elastic with
160
+ datasheet material values; printed parts vary with the printer.
161
+
162
+ ## Case studies
163
+
164
+ 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/)).
166
+
167
+ | Case study | Result | Baseline |
168
+ | --- | --- | --- |
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 |
175
+
176
+ ## Command line and Python
177
+
178
+ ```bash
179
+ loadpath examples shelf-bracket > bracket.json
180
+ loadpath check bracket.json # every problem at once, with suggestions
181
+ loadpath run bracket.json --out out/ # optimize, mesh, verify, render
182
+ ```
183
+
184
+ `out/` gets an STL and a render per outcome and `report.json`. Every command
185
+ takes `--quick` for a first look in a minute or two.
186
+
187
+ Optional extras: `crosscheck` (tetrahedral verification; recommended),
188
+ `render`, `step` (STEP in and out, OpenCascade), `flow` (lattice-Boltzmann,
189
+ numba), `gpu` (PyTorch for large grids on CUDA, Apple Silicon or CPU
190
+ threads).
191
+
192
+ 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
194
+ with its JSON path, so an agent can fix a study in one round trip. Long
195
+ solves run as background jobs the agent polls. Each finished outcome has an
196
+ `attention` list of numbers to look at before trusting it, and renders a
197
+ vision model can inspect.
198
+
199
+ From Python:
200
+
201
+ ```python
202
+ from loadpath.spec import study_from_dict
203
+ from loadpath.study import run_study
204
+
205
+ result = run_study(study_from_dict(study))
206
+ best = result.outcomes[result.best]
207
+ best.mesh.export("part.stl")
208
+ print(best.report["mass"], best.report["safetyFactor"])
209
+ ```
210
+
211
+ ## Documentation
212
+
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
215
+ (an FDM bracket to 3MF, an SLS lattice with drain holes, a metal heat
216
+ exchanger, an impact bumper, a STEP part round trip, LPBF distortion
217
+ compensation, and more).
218
+ - [Reference](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/loadpath/README.md): the method, every study field, the
219
+ report, the limits.
220
+ - [Validation](https://github.com/connorwhite-online/loadpath/blob/v0.1.1/docs/VALIDATION.md): what each model has been checked
221
+ 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).
228
+
229
+ <!-- gallery:start -->
230
+
231
+ ## Examples
232
+
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).
234
+
235
+ <table>
236
+ <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>
240
+ </tr>
241
+ <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>
245
+ </tr>
246
+ <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>
250
+ </tr>
251
+ <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>
255
+ </tr>
256
+ <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>
258
+ </tr>
259
+ </table>
260
+
261
+ Where the load goes: von Mises stress, blue (none) to red (the part's 98th percentile), on the part bent by its worst load case:
262
+
263
+ <table>
264
+ <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>
268
+ </tr>
269
+ </table>
270
+
271
+ Two-fluid heat exchangers: two isolated channel networks through one sheet gyroid, with headers that print without support.
272
+
273
+ ![box-crossflow](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/heatx/box-crossflow.png)
274
+
275
+ Printed in metal, nothing inside can be supported: the channels end in peaked roofs instead of flat ceilings (red).
276
+
277
+ ![metal ceilings](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/heatx/lpbf-ceilings.png)
278
+
279
+ 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
+
281
+ ![manufacturing constraints](https://raw.githubusercontent.com/connorwhite-online/loadpath/v0.1.1/docs/images/manufacturing/arm-link.png)
282
+
283
+ <sub>Rendered 2026-11-03 from `6c97b57` by `python docs/gallery.py`.</sub>
284
+
285
+ <!-- gallery:end -->
286
+ ## Limits
287
+
288
+ - Linear elastic, small deflection in the main check; large deflection and
289
+ buckling are separate analyses (`nonlinear.py`), with contact (rigid
290
+ obstacles and self contact, optionally with Coulomb friction) and
291
+ tendons there only.
292
+ - Printed layers are modelled as transversely isotropic stiffness plus a
293
+ tension-across-layers strength check. Interlayer shear is not checked
294
+ separately.
295
+ - Material cards are datasheet values until you calibrate your printer
296
+ (`loadpath calibrate`).
297
+ - Results depend on the grid: mass at a target safety factor moves about
298
+ 5% with small changes of grid size or starting point.
299
+ - Pure Python with NumPy and SciPy. A 40,000-cell study takes a few minutes
300
+ on one laptop core; a safety-factor search runs several of those, and the
301
+ larger eval parts take 15-60 minutes on four cores.
302
+
303
+ ## Tests
304
+
305
+ ```bash
306
+ python tests/run_tests.py && python tests/test_loadpath.py # core
307
+ python tests/test_tutorials.py # every tutorial, quick mode
308
+ python -m loadpath.evals.run --tier coarse --corpus 6 \
309
+ --baseline loadpath/evals/baselines/coarse.json --gate regressions # under 30 min
310
+ python -m loadpath.evals.run --out evals-out/ # full eval suite, hours
311
+ python -m loadpath.benchmarks.run --out bench-out/ # top88 / top3d benchmarks
312
+ python docs/gallery.py --evals evals-out/ # refresh the Examples renders
313
+ ```
314
+
315
+ `.github/workflows/tests.yml` lists the full set CI runs.
316
+
317
+ ## License
318
+
319
+ MIT
@@ -0,0 +1,220 @@
1
+ loadpath/README.md,sha256=KNHIYmS3wnNtmpMiChDuYoeo0NCNVu3jtp7ppQ_gkUQ,20928
2
+ loadpath/SKILL.md,sha256=T17cpUkVI_lGaq01VcaSPGgjhK7PEtwNOXwonsnIwLc,37509
3
+ loadpath/__init__.py,sha256=CeRtHL8jOiGGiq6b-WBEkuM2VLhPXFMJar60D93pimA,897
4
+ loadpath/__main__.py,sha256=HdtgpjjtX2jz_FV3SH5oVRch1T4R6oWaFhrUK14Dazk,65664
5
+ loadpath/am.py,sha256=j4oYmoDCT1KjejhptzPA6G1rMzEfZiW4sbRMMKtidms,13224
6
+ loadpath/amgfast.py,sha256=yBYA3fmmNofPYFcboPlguW3vFDYPDYmvSJEEdE7GduQ,12074
7
+ loadpath/assembly.py,sha256=iuIW2rq1APmFuPNexPdMpBq3I_0FI_MEk-zo485wTls,46638
8
+ loadpath/brep.py,sha256=X4q8lc7mQK_QhqOwZedra7vWerhMnz5Vgpe9PX27BWE,64129
9
+ loadpath/bucklingopt.py,sha256=ZisS1HOK1niVXx7t3ymwbazprDCUNNlai1V0-eZOUvc,12627
10
+ loadpath/buildsim.py,sha256=0nfqC2HBrQlZecqo3TgPOUS_bIPh8rJnXWGASrHTBgI,70657
11
+ loadpath/cadimport.py,sha256=MI5WLSlyRuHg8Skl0cGlWPAPEudW-iltpdEtM-lZGlE,41264
12
+ loadpath/calibration.py,sha256=H_c-lHCqXfx8QOJ1LSH4y3LLoIjEcOj93Zm7lzEVXto,42664
13
+ loadpath/cavities.py,sha256=uGjVZXwTRyUEEdEnt2AVDDiQjd_QAbK8IPfYP9rOYak,9682
14
+ loadpath/conjugate.py,sha256=KeLIqTdcnWGtelw0HZd_qqC6MrCu9gxHnOdWvMuyrHo,11819
15
+ loadpath/constrained.py,sha256=Dj3KJZ9MmSq8OFOdWVr15M3LFdPn_nVI8AEJIi5zk04,15767
16
+ loadpath/contact.py,sha256=web82bqJm9B7bcvkCg3mq1m6rZVaW44F6t-dirS5SIA,34585
17
+ loadpath/coopt.py,sha256=FiFop3B3cn4SabtpqqeDOkKFjDpLQlkwSXZiyIbZ3QU,16562
18
+ loadpath/cores.py,sha256=iG_nfyJ73sBGBWSBNkY226fSc88mTD_mMBuAxWiI4T8,8268
19
+ loadpath/crease.py,sha256=paLhCbCL8XT5Suxqa6eJWtUqDe5xASbD4OTFBjMAneg,48787
20
+ loadpath/critic.py,sha256=T8g3y1nNH6ZpFbpmOk8DuuItj8oBp5I0Yj0auRGvcxI,9297
21
+ loadpath/crosscheck.py,sha256=P2G8QUWxMvXfsRomkQvTnVqejbXNiNRHkdlWExHSv9g,51655
22
+ loadpath/cutcell.py,sha256=Cidw5t7wDELw6Oe5kUZ_nt50kDKss7sG5_YR-7dUasY,24009
23
+ loadpath/decimate.py,sha256=z5OszJwiic1iFsR5X_LsXWARcaMVMNG-98_N6NpVe8Q,8010
24
+ loadpath/delivery.py,sha256=fVZHqAyf6aeggbt6kWADhcrymL0YywZ-InFfDxhId4Y,10697
25
+ loadpath/directions.py,sha256=_ZxGr6X4EoO9EoGBt0utARNnuIA3BqEQNEeYcUgPfIw,10611
26
+ loadpath/domain.py,sha256=AuP42IfvQSvdeLZNtQEWdrNrGN47UAYde9hu9dJ27-I,31318
27
+ loadpath/drains.py,sha256=Yh_eYck3hy0GW82wEZ4sv8Vr6aSWRo0JJ0hl3WWs-I0,29199
28
+ loadpath/durability.py,sha256=rsv3-TqE7XhXLGDiw8WG0KAi7e9dqnE1WfIpP_vKjE0,21319
29
+ loadpath/editor.html,sha256=Ht8rWUr2xqr0WfFZ9jh1F0dMtSRkgFpuISrQRGiBFgI,191080
30
+ loadpath/editor.py,sha256=g2B7KH-_WVgZcl5mS_F4A3AmWDmlj3oc6aMCpB_B8ME,29791
31
+ loadpath/escape.py,sha256=Y7DE6ogNKQ-_w1e_3_4EEDiz9QZZb0T813d1mnHsfiY,16188
32
+ loadpath/exchanger.py,sha256=tNnRxr0mdwpQOO-dt8KwV__3rrRc3IZXV3HLn5-lmH4,42148
33
+ loadpath/fasteners.py,sha256=MyQLlabSkIsaZ2V2w-3GxooJwGCpWqXqMOgQdo1GA_A,10335
34
+ loadpath/fem.py,sha256=0rXxJhrb6UpTGSbrw1lytzJWOl0p5kQV5dWaqT4a3eE,27975
35
+ loadpath/femops.py,sha256=1WVRrZnIVFVW1e42Jp2bWtESSUZe71-knvavSGCjAeQ,2406
36
+ loadpath/fieldjit.py,sha256=dESvSUUopKm2urHXIq2v893qaS5FIKz3K85DgB0-VKc,40167
37
+ loadpath/fieldops.py,sha256=FPn04ty4AgXHzRzCOK7aNSYJs7eJ7s3MsZm6okU2YE0,4710
38
+ loadpath/fields.py,sha256=j7gx816PPefuETaJARdPyr5IKf0HxNNy32tS4RokEaI,174879
39
+ loadpath/fieldtorch.py,sha256=8pVEbHvNmaUN4PVtoG1GC-CQRWSWPMRMM-9MLSn4lTM,20602
40
+ loadpath/flow.py,sha256=Yc2YOulvxk81NxywxpNJmiE28rRPxaFxQ1lFW3kZMfo,45750
41
+ loadpath/flowtopo.py,sha256=R0yOlHsC4RzO3LzO8hW_w-YjizVV4p1NThaEylhH8DA,12908
42
+ loadpath/gpu.py,sha256=69qFRw-ru2iFjNIbvC6iV9rVqZl8HE9Z3rc-1oKCPgc,21728
43
+ loadpath/heatx.py,sha256=GmMSOmg5uTTMrtDsNvr9BUo4uD6PA2tzbbTKH1sBhHI,56253
44
+ loadpath/heatx_thermal.py,sha256=2TAXaYJFN3e8K5q7a7RSQjiWYAhlhGOZC4HF7IHv0H4,20315
45
+ loadpath/homogenized.py,sha256=2h-3FnyFH12Tcw0nIokehIx9rj-ZE6M6j6gUmGpo5_0,45120
46
+ loadpath/ibrep.py,sha256=MDcLF8JZDZv9reQr4C62fCdgrfj0v7wD4MG0wMnCCOU,24436
47
+ loadpath/impact.py,sha256=TjKdJlUGPvBYXxkG7iJeV8Qy-2y5T6EHQNoplOiGgBI,35227
48
+ loadpath/infill.py,sha256=sIfisr3sdP5_GM1yJdPXmQL_55ubCyT344nvTnD7B-o,17658
49
+ loadpath/interface_library.py,sha256=GjX3Sy6Mv_ojr85wVOnBVeUpFda3rDs5NJ-yw18_V3o,19709
50
+ loadpath/interlock.py,sha256=FnJJREIksFbHXkO__ECjY3lNvQib4IF4FK4oFjIzkT0,9118
51
+ loadpath/isolator.py,sha256=t6mS13T25AGMC5PcJSogP_Rt6dBw8Dagn7YjzwXoMNE,6930
52
+ loadpath/knn.py,sha256=hIxH2fMtB7chngRzqAB75wd7_YR_qN4MeYnyNRQBSnA,7576
53
+ loadpath/lattice.py,sha256=Le_8yISveZxirDz50d3rJzyr3fquhnVE4dtkTGt8858,51420
54
+ loadpath/lattice3mf.py,sha256=FJrByNYad10pMg1wxEZeKl1L9qDgMzsAzcp4CKJiPG4,31278
55
+ loadpath/lattice_buckling.py,sha256=Ujdr19fsbRlywFhMFfbtFglPfpux118V7FJLl4-iq8o,10658
56
+ loadpath/lattice_grade.py,sha256=hSBM4Ts5YgoEGMZ6Ctba6sA1ovPYvmk8xGg53Ui9hZA,15601
57
+ loadpath/lattice_orient.py,sha256=yTs5mwO4L0xrnERB0JkY-BEOUgJMQ-N_8CPTouT_erQ,29630
58
+ loadpath/lattice_print.py,sha256=_DGIiSS-lIX9aVB8zzvFLxV2zQZB5G2SKZwxeqN0Yrg,7680
59
+ loadpath/lattice_tensors.py,sha256=zx_YoWi_jjnT7Qdlyj_AX9ho3RdmA8o16oYMXkgte7A,23664
60
+ loadpath/latticestep.py,sha256=7bwDqNY8l9_nH0GqKBKsPhLzur-nyPdovSGkXZRdHi4,54798
61
+ loadpath/manufacture.py,sha256=iheujxNBZ0h0DEkJ1HJfSMr3gs3T-gpH_pqJHufwX8E,19660
62
+ loadpath/material_library.py,sha256=qHZTJY4jwvit71P5UYkolINTFKEA9qIF7RQSBTGsVhc,33227
63
+ loadpath/materials.py,sha256=-vJlWCwc-idJwRXZbZHSSlDTEPpPKpsqu27EVt-df3M,6868
64
+ loadpath/mcp_server.py,sha256=ODdPnR-t7S8Ramnt8bEg4SelCE60foC-GmFl2lr77ps,39283
65
+ loadpath/mechanism.py,sha256=E45TsI_2IPfLOoAlqiX65tAlHzC32xySZ2jj_ZXk7cA,10160
66
+ loadpath/mechanism_nl.py,sha256=nW1x782PKyzEOzXHUZTjOpd5-aSIsbbJFQxHoSv3O58,38511
67
+ loadpath/meshops.py,sha256=JJo-CVy5y6W3xrgsPy46GBqUuNbc-3PU5lILKmSBCgc,16645
68
+ loadpath/mg.py,sha256=EdPyZ6_wMgE2IAavnxF6sH8COHdhn1WFxooffQMSclA,35498
69
+ loadpath/mma.py,sha256=Yx2seYr-_SwaNifrWjgu98MbyGznMXJiZFAjGTroT8k,9234
70
+ loadpath/modal.py,sha256=WraoWCj3JCrLdV9ivDeQoSDppL2-G8Dcq7ytWQLnB1I,9735
71
+ loadpath/multimat.py,sha256=gaQ3nTSyNhhEvmZp61oUgXmUP19oRl6PE_EhiRdw-nY,87015
72
+ loadpath/narrowband.py,sha256=ugyqyQu5qVh_kkElps_HoXZJHQb8TqDp6xh82OGOacU,17066
73
+ loadpath/nlkernel.py,sha256=SAjJxtGcYd0UAC8c8xB3RjyHrodOk7GOuQzKso6AVwA,10941
74
+ loadpath/nonlinear.py,sha256=nMiop68ZkCFEMilibzMpD-lIBlZx5Ja_tua2Y80EuPI,53389
75
+ loadpath/orient.py,sha256=fqk0gc4_jfztdsoQTvN0fhRzYITOKW90BMr2w82k47M,16176
76
+ loadpath/porous.py,sha256=Qbry7dnNkANkHQjEaIA5UQB3RjE5kclHZ5ifQYihgE0,45889
77
+ loadpath/pressure.py,sha256=rt1q4Jr4OYRA9UYNgPod1MUZI-4bw-tG8kSSckkuMow,7173
78
+ loadpath/preview.py,sha256=WUZQc26s2KtIeuo1fW7gAe7TSh9j3nQcOD_JqejVd7U,15718
79
+ loadpath/printcheck.py,sha256=3YGr1bLnjDWc1yS2p9-WUH33T1WBBQRvR5K7x_YK98o,12735
80
+ loadpath/printsetup.py,sha256=3O6t7uWYS3u4LySUZryuMXfwSNnKt9Vnf8SnQZXVtWU,10403
81
+ loadpath/processcheck.py,sha256=Sky4P0EtxNVsZLHGFORfIDuYSjKJMtqImTigKP57Bsg,19702
82
+ loadpath/quick.py,sha256=rJEbIAh0DJ_m06OEwR9qh07ED1s2etSUnn0eduLF4hg,4313
83
+ loadpath/recall.py,sha256=DxupoJBgefppqdm6EQXP3xcVQn_7NoRgK9zZ8xE08jM,17996
84
+ loadpath/reconstruct.py,sha256=0asDtutZmbLzNh2RezXWMuzbZTa4wh1ktwp_G8KqtpE,39365
85
+ loadpath/render.py,sha256=px4dDaQ09Z6Em9vuZB5URIZJJpH2UC2AJA3Bnb4h9p0,20336
86
+ loadpath/resolved.py,sha256=6GFYl9vOvFvvqYm4uxm4K_JnRKnycTePzZKccaPQr0k,9362
87
+ loadpath/schema.py,sha256=Ic1TZIkgAbJNAQ-_0Q_794_UfMGMasfnbJERkc49DtA,129406
88
+ loadpath/sdf_kit.py,sha256=-IATW7_0yuDjJhjHBUK1PEmXBLPbykM5IRqaZ80EwVY,35966
89
+ loadpath/selfx.py,sha256=AmBTkI6T3ktwHFhyjv5ifQ0TpxyJVl1m-OPCVm4TmuA,12235
90
+ loadpath/shapes.py,sha256=e62_7m32ABwr_jqHk0wEMBBbBbL7VNJ365xzgMVbt0Y,23356
91
+ loadpath/sharp.py,sha256=hWg7lSQuBEa1weac_9vJXYqfactjN9EiOokpDUadD10,29725
92
+ loadpath/simp.py,sha256=9ATLo24w-D8cmztnSF_FQX0G48S8xi2gyOBKsdXMlAA,53078
93
+ loadpath/sizing.py,sha256=B4hsiF_cVYwcqoL_ztdmdPH6zpS7eBFuTyX9y3xip-Y,18092
94
+ loadpath/slicer.py,sha256=W_Qf_y__L8V8hqGr8zvyKZu1zAMHO5yn3iHWjMm3OW4,13813
95
+ loadpath/spec.py,sha256=zDUgqHCdtUbN0PQGpXGUUyob8PEdzxe68Kp71t_jR6w,55406
96
+ loadpath/step.py,sha256=_qbRIIHy9t9jQVdb3y88x1hFV34KTk7fWLXaIJ7_MNI,31075
97
+ loadpath/struts.py,sha256=eQk6P7aUfMdv3vwKfI8qP9940CNbqpu6ly6ug2J19WM,27016
98
+ loadpath/study.py,sha256=huIn1alPbTfDXuteqbMgI7YmehAo0DxEBIR-01EeVhA,100217
99
+ loadpath/tasks.py,sha256=US2-GVGjZlZiTCzeUx7PJBjc5MkJK1E8KtOPttgjmjI,42073
100
+ loadpath/thermal.py,sha256=oesOm9Ngyjc7OYIomiMrlXRz6UXqSDkWDKk0brwMDUE,80503
101
+ loadpath/threemf.py,sha256=OfAr1N8oGHdvtleWKKwWMpXXgOhNBOdA3yL6vRrQ-t4,25033
102
+ loadpath/tune.py,sha256=bawq2lHIXBT3Jzkk1VIIngW9AzwSAHsV1V7cjYx5aDI,20342
103
+ loadpath/validation.py,sha256=as0XU1DMluRcvKjQLJhCfVt6HAJlxdj1_CDcOlSObrQ,6503
104
+ loadpath/verify.py,sha256=h2XHpevUfTL2qJ8pELhy1VIE_GeI-OLKnbLLE74N20Y,60662
105
+ loadpath/viewer.html,sha256=UAilDvDEN5nBiL_ZEHcdgQD0XedFRBQwWvoUN2PBCTQ,38241
106
+ loadpath/viewer.py,sha256=1EhIb8h0SNjYtFL9jwE3FasSC9EKY1NAVZskM-JOvwo,20363
107
+ loadpath/viscoelastic.py,sha256=DHo14soKrhE5_-rd1WgsKarOP0KoEplECXBxaHpXuWk,4431
108
+ loadpath/voxelprint.py,sha256=bPG4wLnUyI-Cvwp_HUXuWqFnKZnU66_nOACij-dsABU,25796
109
+ loadpath/voxels.py,sha256=zBU0AU40rh5x_ILM0kSSsv6amv7oee-lrOHsCForbro,18917
110
+ loadpath/benchmarks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
+ loadpath/benchmarks/beams.py,sha256=mXYCJEdgbOCl8nONXpJuVe2Z7hiCXKLCK8AnA618I9M,11778
112
+ loadpath/benchmarks/evaluate.py,sha256=aFlCdA1iakgjSvrmI8ji4YHh5qSiCCYwsw9pylMF5Uc,7537
113
+ loadpath/benchmarks/mechanisms.py,sha256=z1-S_1E4JNonPbwo0KMoya7e0Lpm-vAVpzJV4Qbf51k,18300
114
+ loadpath/benchmarks/problems.py,sha256=9G46BjH3aw7HpLu_gU9GPnSS8gRL-YdqsbFdalNS6u0,6227
115
+ loadpath/benchmarks/reference.py,sha256=aUO_KWEjk95IRb8DBJOjSQTbxT8REu3WH76LXmlmGbg,5484
116
+ loadpath/benchmarks/run.py,sha256=bGpjNmwxfq79eLRQZxuk77-6h6hV7jABrHJZE_FYu84,13169
117
+ loadpath/benchmarks/cases/ge-bracket.json,sha256=Ki9uIMWiwu69ORpiOxH7bI8PtntUX6AGlg8YnNuw-pM,6508
118
+ loadpath/benchmarks/reference/bridge-3d.top3d.npz,sha256=B8c2T7QKjmXHqzZV9Rt_l-z91ReNqQoThD3iNdiTlnY,6288
119
+ loadpath/benchmarks/reference/cantilever-3d.top3d.npz,sha256=g9Fh0owfTaJ5_-blJkfEs3SylHq7cX2L4jlY-TI0J9w,10507
120
+ loadpath/benchmarks/reference/lbracket-2d.top88-ft2.npz,sha256=MPeajfQoicsX3QIl528SdBciJH91ki4GnMRT3g2Sb0U,6128
121
+ loadpath/benchmarks/reference/mbb-2d.top88-ft1.npz,sha256=Y53hZcyPvVtAggty2EMA6cjkXhgYbmYpScQ_vEQmTT0,9944
122
+ loadpath/benchmarks/reference/mbb-2d.top88-ft2.npz,sha256=HtyHE-om3Eb37-VAkwkDpk5jlcU256Fme74_TFS2ICc,6735
123
+ loadpath/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ loadpath/checks/dfm.py,sha256=5KZNDKIhAnUmIf1PqL53j61S9r75LVb8q_FpbtLtpI0,16229
125
+ loadpath/checks/exchanger.py,sha256=1UqkYc1gWIAIo0LT91wZqujyfcwpyELiQmW-fvsGCr0,221
126
+ loadpath/checks/fea.py,sha256=fWKRmkFgExHHT4FxQwFqhqJGOGahOoidHXF0NGAKUrI,9038
127
+ loadpath/checks/fit.py,sha256=hYCf6yl2j58IBGQwNlpZMSEiZAQk8E1fF4rMfNesAjQ,20238
128
+ loadpath/checks/networks.py,sha256=RO-5CUxPdjvARqcYzFZS4CX6x1Czrqp4NEQfSnauvEY,12210
129
+ loadpath/checks/opening.py,sha256=FG3eJLQs81zwCB1_4CFVii1FuOzKKHDl0JQSigQFIU8,2812
130
+ loadpath/checks/sdf_kit.py,sha256=lL6mRLIH4F9Fme121SNVzj5O6QecmmreYgJ2ck9K8O0,215
131
+ loadpath/data/lattice_buckling.json,sha256=VnsrRRpve2Bl8PcFlXcmTzQ_aBGkOrJjAtun0HMz90c,7586
132
+ loadpath/data/lattice_tensors.json,sha256=e6FADvcINLjF5jBs1G-zIf2a-aZNY3SWaTJNuCerAx8,409096
133
+ loadpath/data/published_experiments.json,sha256=aiqKpsKo7v4VpGQA1fN-7wD5ej74hzZQt01HMpGK06U,13857
134
+ loadpath/evals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
+ loadpath/evals/briefs.py,sha256=ny5xTRlUrlYDAT1Zod7v2w6Gc9oUl__sBNyrQVV594U,17587
136
+ loadpath/evals/corpus.py,sha256=m4U2Xz55AEdfvHNVDfHbqkwdB1dsTLbOPOB50UQ-Mmk,8234
137
+ loadpath/evals/pareto.py,sha256=4Hx8WrYday0OORfI0_6YvqKUrGdarTHgS_kKVwxUQ2s,3729
138
+ loadpath/evals/run.py,sha256=gqoOGIC4lKMnJWHiw4SWQgI0eUEQGgWp9IVsTXGfOxU,44054
139
+ loadpath/evals/baselines/coarse.json,sha256=Qmv6fKZ_vrD3SInnB1c16B6eFoNB32kKbjKxIp5ooN8,29783
140
+ loadpath/evals/baselines/full.json,sha256=rsU4c8Mn_2ZFJHHdyF8yV9BDbVmHNMfnbSbJKo2mqLM,28105
141
+ loadpath/evals/brief_kinds/__init__.py,sha256=HHh-ZKyLYa8yLwpZrn_AjWxyZy0OEf0kGO1esyNMCUo,80
142
+ loadpath/evals/brief_kinds/heatx.py,sha256=KTP7ZHRqV9zThfCvRWVGCSEIFIJoJxQDK1NJdJ_Xyh8,19364
143
+ loadpath/evals/brief_kinds/lattice.py,sha256=pfpv3Q1sRTZ8L-aJCh_X2qtkZAia7uoHgM2NpD_d5Ew,26416
144
+ loadpath/evals/brief_kinds/multimat.py,sha256=jKsmm6igWDfTbLIsoWPv1lCAX_Ir_GhrJ--Qtwmo5so,26396
145
+ loadpath/evals/briefs/base-adapter-fdm.json,sha256=1IYkd3Ye62nUR5XMPHTCOPC9OBNuRjOLNqjTYmLBrwU,7573
146
+ loadpath/evals/briefs/bell-crank-lpbf.json,sha256=dt5YzwisvqPvn8oDDTxHC8aCjn87s-IhFFPD63riyRQ,2849
147
+ loadpath/evals/briefs/belt-tensioner-fdm.json,sha256=4bFGunV3Pmh6s1J5zkihiaziXuvZJG64_dEA2BZgxn4,2519
148
+ loadpath/evals/briefs/camera-boom-mjf.json,sha256=VZPgo3TFkVlI9Rv5fIRjoBKA-nA9txSUt-9eVXrCqio,5017
149
+ loadpath/evals/briefs/camera-mount-pla.json,sha256=0Ex3JZoamOc-vzzl0jmF_HLb4cdxwmGMEwcTvIlSomo,3370
150
+ loadpath/evals/briefs/coolant-isolator-petg.json,sha256=PYVXqgmBvBk-jHiKlKbpIp7GCPbe2OcsTvIytNjbpyU,2055
151
+ loadpath/evals/briefs/elbow-bearing-bracket-sls.json,sha256=aYLLsliJkrbIqls0siY3WkUM2aKmc7DgIksS7GjKJsE,4891
152
+ loadpath/evals/briefs/elbow-gearbox-forearm-mjf.json,sha256=MCWcPCYD5Fbv9bE8oaTGQd1_DgWhJACJgCMlkI3qJms,9461
153
+ loadpath/evals/briefs/elbow-link-fatigue-fdm.json,sha256=iwsybIUtAafD1djX2oLgaxUXP53nOT-GEwqprhKcKPA,4465
154
+ loadpath/evals/briefs/elbow-stop-pad-tpu.json,sha256=NNelSwRl8MwWAJN5sNLD2SRghzhVjjsgyp0rt1J0cPg,1179
155
+ loadpath/evals/briefs/forearm-fdm.json,sha256=s8wGvUFIQ-azXYrRylaB_C_81KfO80WVXV-STz8a-rQ,2454
156
+ loadpath/evals/briefs/forearm-servo-link-fdm.json,sha256=fQFxZjwg906_iGOWSzv6b7bdq6eJyK7LtYxpiCGIyWg,5590
157
+ loadpath/evals/briefs/grip-pad-finger-mm.json,sha256=tOMEFHyurSe4blYfCbzGlgeb2h3um6zgBWgD9UWtJ9w,5091
158
+ loadpath/evals/briefs/gripper-bracket-creep-fdm.json,sha256=M17Aj-8y-QujC6bqVNS-vIQPrCPbHaKRcR07f3_5e-s,5721
159
+ loadpath/evals/briefs/gripper-finger-fdm.json,sha256=j_C8S9IaXBtUrBtVFgJqR6brM_7Vxf7Z8dV1GvoSOdw,2629
160
+ loadpath/evals/briefs/gripper-jaw-fatigue-mjf.json,sha256=K6yFtZNDEv2HV1zF5QHUFP3IpVCigW3SBtjzMw1QQ8g,5256
161
+ loadpath/evals/briefs/gripper-palm-fdm.json,sha256=7TdiesISmeR4AaKiNOWmeenEM04nKfonWrd2upbr32o,11221
162
+ loadpath/evals/briefs/hot-stepper-mount-asa-fdm.json,sha256=20u4AZ56eP2MkWWUdjx9mIVG17matvOS2YYKLP6VcyM,7790
163
+ loadpath/evals/briefs/hpu-oil-cooler-lpbf.json,sha256=vptw2QFTxS8pS3TQ5K7fwmZzxMJetHUcLknsRacuQfQ,2386
164
+ loadpath/evals/briefs/isolated-camera-mount-mm.json,sha256=qBz5VehifMYl3dg5IgQoDCNkfE1iQcrsQ2A2dKzob0A,9550
165
+ loadpath/evals/briefs/kart-charge-cooler-lpbf.json,sha256=_8m5i2Fdd0RSxXuBsqEp7r5GVO3nOHLzmiDRpgmP8cY,1918
166
+ loadpath/evals/briefs/lighten-step-bracket.json,sha256=wrnbWnxfYyun4LtzcvUvbJrZw2OZQVf9fWSiGWZAtJs,3286
167
+ loadpath/evals/briefs/nema17-mount-stl.json,sha256=flYlDYKWs4uQOJ-_NMc8wq2EOygwgWnMiGHJfIOvWqA,6323
168
+ loadpath/evals/briefs/pillow-block-sls.json,sha256=CnDoYMwFy87Vs3zXSskf1JDV7WAKZ3laLcUMjgsbhRg,3625
169
+ loadpath/evals/briefs/polyjet-fingertip-mm.json,sha256=TwPyvpIEKkDcRwyL68BsesIhAC0HQHOWVZ93wMcOsmA,4567
170
+ loadpath/evals/briefs/rod-hook-pla.json,sha256=KbHHUlZdZ7qNpkFT7174L8BWMuaNFC8hnzBMUuPSjqk,2599
171
+ loadpath/evals/briefs/sensor-arm-resin.json,sha256=1tEY8y4D6FedeG45npiFsSwsCx40U50RQTuX6-XqrVk,2477
172
+ loadpath/evals/briefs/shelf-bracket-pla.json,sha256=L1uzi28TVZrbCs2YKu1a6MFwZyixFlubqFY2JmtJPgg,2667
173
+ loadpath/evals/briefs/shoulder-riser-mjf.json,sha256=hIer14n0jADVnXdOB-gFo18xw3W9AK-Ff_dAldILPSI,7118
174
+ loadpath/evals/briefs/sketch-clevis.json,sha256=jvIgHzIwcecpXdHEweG1S5q97Fs9KqpCm3JrINzycyM,2976
175
+ loadpath/evals/briefs/spring-bracket-pacf.json,sha256=JYpCKF0y4nj8hCE3tSNTGBLOBxay4RPNMVT0e1_XpRc,4490
176
+ loadpath/evals/briefs/tool-flange-ti64.json,sha256=kj3mOgEOEsrshU4WXhG-koNb_4FzCiXzvLVnmuRMHp4,4567
177
+ loadpath/evals/briefs/tray-arm-lattice-fdm.json,sha256=nvNEOGg--HVA8sy0DAOWf7XtnOUTlSAEo8Do4Mm1FRM,4169
178
+ loadpath/evals/briefs/turret-fdm.json,sha256=MNqjhQ47QMY421djHsZjIC1rjisQXNYWQAM3BU3SLQE,4746
179
+ loadpath/evals/briefs/upper-arm-sls.json,sha256=S4bH4qq9ey3ZWwPISypHzi4C7wcxvYTODoO89yMob5A,3084
180
+ loadpath/evals/briefs/urdf-forearm.json,sha256=IQiygJaNNLYN8vwieDD9u4KRZ26WF8_8weMVc5bF1TQ,3628
181
+ loadpath/evals/briefs/wrist-link-mjf.json,sha256=JRQrTy6rgK8MGJg9pPrWkIpCJwGdospL1H0j8Uw7t-w,4280
182
+ loadpath/evals/briefs/wrist-yoke-mjf.json,sha256=gOFsD7C3_YaD9rxeuveetdLN9RnNIB_b_X_HJsXdPHA,3958
183
+ loadpath/evals/briefs/assets/bracket.step,sha256=UXshvD9m-1FE2a3lfV9evwKntnhjdWRH0cSjA4xzJTM,44916
184
+ loadpath/evals/briefs/assets/desk_arm.urdf,sha256=U8SjQZDrWtDJfNJhD5uGSe4KSR4DK2gijVQ8xGk9eVo,1224
185
+ loadpath/evals/briefs/assets/elbow-gearbox.stl,sha256=8Roa9IhVtk83rTRS6hA3h2ZvFCfykDg-SpEv_YZl0Lo,87084
186
+ loadpath/evals/briefs/assets/motor-body.stl,sha256=GdgTJ2xYb6BpIBGIYZDSiL-M1W0VsRQ7P1WmFVLfYZU,684
187
+ loadpath/evals/briefs/assets/sketch.png,sha256=7gZ0y5OPEz5uKFzE0XhBWZNB3pcgym2RVbkVhw9fO8E,69192
188
+ loadpath/evals/cases/arm-link-cast.json,sha256=xHoCGcFe_IrqG7GG4vPUsz4vxKP92h50IVVfEDEEZr4,2223
189
+ loadpath/evals/cases/arm-link-driven.json,sha256=ji2Xl-lOlW05ZUXCfRyhpxm1GPuMal0yPI8jBwEtPok,3440
190
+ loadpath/evals/cases/arm-link-sandwich.json,sha256=J9Cv-KiSIrD5BO3avnzd-AcGCy8kfy4ANiatdS2tx8g,5584
191
+ loadpath/evals/cases/arm-link.json,sha256=_4cAWsnZbgnsHSUepFfcsuDC2oj6HLnlAShpZnUQeg8,2331
192
+ loadpath/evals/cases/bell-crank.json,sha256=EKi2SPmJ-wkhwJrCT7IGvAKqm1YhjlLlAGJKYjXseJs,2145
193
+ loadpath/evals/cases/grip-turret.json,sha256=SIpzpaw13cEai--tHBhl6Qx7eQaY5KNJfP7NvAg_IJE,6491
194
+ loadpath/evals/cases/grip-upper-arm.json,sha256=UHJlkhm15HOI8MLiP-P4upI3KrHFDyPxEQ36FcPuBKY,5542
195
+ loadpath/evals/cases/grip-wrist-link-mjf.json,sha256=u6ks_jQYGtvq5OUE33ABWr5sqZYbIV28wVff4jAJHJo,15932
196
+ loadpath/evals/cases/grip-wrist-yoke.json,sha256=fNidn8sw5IyCWS2wfcmPtqrMXwDN7-ARddVid_19IoQ,10691
197
+ loadpath/evals/cases/lpbf-intercooler-core.json,sha256=7iUYdHxqGRI_au_rW62Io9K-RQA9uTycWLEM4n_STWA,1216
198
+ loadpath/evals/cases/mbb-beam.json,sha256=TeyTSIqjKUBOZxgtMwiinmcsOcHSdGGGiO5m6enTGUY,1404
199
+ loadpath/evals/cases/motor-body.stl,sha256=GdgTJ2xYb6BpIBGIYZDSiL-M1W0VsRQ7P1WmFVLfYZU,684
200
+ loadpath/evals/cases/motor-mount.json,sha256=V_KZypDm2WJKl-D2iZyvtHI5LaJxcDxL7vUKNvlFpRI,5089
201
+ loadpath/evals/cases/printed-hook.json,sha256=RW-u10tN3gdE8i88PDgK4mzuqLvvDLLEKw5SUqsK6to,1608
202
+ loadpath/evals/cases/wall-bracket-fasteners.json,sha256=UGFrev3SWeU2aZNqEJGyGtwRM35zG5lOV4A6Kf-SKWg,2211
203
+ loadpath/evals/cases/wall-bracket.json,sha256=4nnrtdNsqkdwOwDjGDNzsHSRkRP6vdc-M9lsyU3Ye3M,2684
204
+ loadpath/examples/arm-link.json,sha256=Zg1VeOqwPpIIBfk_ZVojPhkuoBmRaj2f4jEY_-NZZ2Q,1436
205
+ loadpath/examples/bumpered-bracket-compression.json,sha256=hhhw_7LZzq46sTo3-2H-8Vfsq1r-FeBvg1NHOOzqaN0,3700
206
+ loadpath/examples/bumpered-bracket-lattice.json,sha256=VYCSpwqqJG08U5WjLtJStXttcPCYs7WFQpfaKMKU5Ts,3263
207
+ loadpath/examples/bumpered-bracket.json,sha256=LrGiftWU4GKG6DVL9YxiY4Ni8Q3o_A9ifYLJ5zSVyQA,1874
208
+ loadpath/examples/gripper-finger-mm.json,sha256=HLMvLZ-2iCsUFZST_VhdI2I0GzSDevqwnatc81aUJFU,3237
209
+ loadpath/examples/heat-exchanger-counterflow.json,sha256=gSBnkr9pEzkoqAyRSfgv4d7m52VR3_SlJKTj0RsHixo,734
210
+ loadpath/examples/heat-exchanger-crossflow-tuned.json,sha256=OGNj1iPMvBYoxaaSMgOHH8gGp14y07B_p38ImlfZe68,950
211
+ loadpath/examples/heat-exchanger-crossflow.json,sha256=_tH5CUHYdVLVDUkkPhR5TWg2FZXNI35vXqdnP3nMOg4,611
212
+ loadpath/examples/pedal-lattice.json,sha256=ix6MwL-wdBrv0_2L1W7m0S7MLg7GOMn5oCCmlcJ_dtU,1166
213
+ loadpath/examples/pressure-plenum.json,sha256=UJEO6HRaLMWrRp3--ug-gZOxgU-gCEgnT1O56PUT_6I,890
214
+ loadpath/examples/shelf-bracket.json,sha256=hR-gC4lBQQdqyj_6w1EErFX6BnTOb-kGpJrYOlFk8d8,1240
215
+ loadpath-0.1.1.dist-info/licenses/LICENSE,sha256=bpzxpJgoVq4FA36U71FnK82MHuco6ds7YJmDRr6SGfo,1069
216
+ loadpath-0.1.1.dist-info/METADATA,sha256=yLB5Rja1VNhmw5FWHTOFuiHdJhvmAV9_v9xSd7RBJ24,20562
217
+ loadpath-0.1.1.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
218
+ loadpath-0.1.1.dist-info/entry_points.txt,sha256=V3rhLlQmUU_BdQhSLYQfk2tkndSB8Y0DcP_9ReRCn-4,53
219
+ loadpath-0.1.1.dist-info/top_level.txt,sha256=pC2km_RHAmV4iTgiev9U_ZmW-TXK9nW8NugJKKQvw2M,9
220
+ loadpath-0.1.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ loadpath = loadpath.__main__:_main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Connor White
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ loadpath