trenchfoot 0.2.4__py3-none-any.whl → 0.2.6__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.

Potentially problematic release.


This version of trenchfoot might be problematic. Click here for more details.

Files changed (42) hide show
  1. trenchfoot/scenarios/S01_straight_vwalls/metrics.json +1 -1
  2. trenchfoot/scenarios/S01_straight_vwalls/preview_oblique.png +0 -0
  3. trenchfoot/scenarios/S01_straight_vwalls/preview_side.png +0 -0
  4. trenchfoot/scenarios/S01_straight_vwalls/preview_top.png +0 -0
  5. trenchfoot/scenarios/S01_straight_vwalls/trench_scene.obj +24 -8
  6. trenchfoot/scenarios/S02_straight_slope_pipe/metrics.json +1 -1
  7. trenchfoot/scenarios/S02_straight_slope_pipe/preview_oblique.png +0 -0
  8. trenchfoot/scenarios/S02_straight_slope_pipe/preview_side.png +0 -0
  9. trenchfoot/scenarios/S02_straight_slope_pipe/preview_top.png +0 -0
  10. trenchfoot/scenarios/S02_straight_slope_pipe/trench_scene.obj +326 -310
  11. trenchfoot/scenarios/S03_L_slope_two_pipes_box/metrics.json +1 -1
  12. trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_oblique.png +0 -0
  13. trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_side.png +0 -0
  14. trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_top.png +0 -0
  15. trenchfoot/scenarios/S03_L_slope_two_pipes_box/trench_scene.obj +644 -628
  16. trenchfoot/scenarios/S04_U_slope_multi_noise/metrics.json +1 -1
  17. trenchfoot/scenarios/S04_U_slope_multi_noise/preview_oblique.png +0 -0
  18. trenchfoot/scenarios/S04_U_slope_multi_noise/preview_side.png +0 -0
  19. trenchfoot/scenarios/S04_U_slope_multi_noise/preview_top.png +0 -0
  20. trenchfoot/scenarios/S04_U_slope_multi_noise/trench_scene.obj +1017 -1001
  21. trenchfoot/scenarios/S05_wide_slope_pair/metrics.json +1 -1
  22. trenchfoot/scenarios/S05_wide_slope_pair/preview_oblique.png +0 -0
  23. trenchfoot/scenarios/S05_wide_slope_pair/preview_side.png +0 -0
  24. trenchfoot/scenarios/S05_wide_slope_pair/preview_top.png +0 -0
  25. trenchfoot/scenarios/S05_wide_slope_pair/trench_scene.obj +644 -628
  26. trenchfoot/scenarios/S06_bumpy_wide_loop/metrics.json +1 -1
  27. trenchfoot/scenarios/S06_bumpy_wide_loop/preview_oblique.png +0 -0
  28. trenchfoot/scenarios/S06_bumpy_wide_loop/preview_side.png +0 -0
  29. trenchfoot/scenarios/S06_bumpy_wide_loop/preview_top.png +0 -0
  30. trenchfoot/scenarios/S06_bumpy_wide_loop/trench_scene.obj +723 -707
  31. trenchfoot/scenarios/S07_circular_well/metrics.json +8 -8
  32. trenchfoot/scenarios/S07_circular_well/preview_oblique.png +0 -0
  33. trenchfoot/scenarios/S07_circular_well/preview_side.png +0 -0
  34. trenchfoot/scenarios/S07_circular_well/preview_top.png +0 -0
  35. trenchfoot/scenarios/S07_circular_well/trench_scene.obj +1894 -1958
  36. trenchfoot/scenarios/SUMMARY.json +26 -312
  37. trenchfoot/trench_scene_generator_v3.py +28 -52
  38. {trenchfoot-0.2.4.dist-info → trenchfoot-0.2.6.dist-info}/METADATA +1 -1
  39. {trenchfoot-0.2.4.dist-info → trenchfoot-0.2.6.dist-info}/RECORD +42 -42
  40. {trenchfoot-0.2.4.dist-info → trenchfoot-0.2.6.dist-info}/WHEEL +0 -0
  41. {trenchfoot-0.2.4.dist-info → trenchfoot-0.2.6.dist-info}/entry_points.txt +0 -0
  42. {trenchfoot-0.2.4.dist-info → trenchfoot-0.2.6.dist-info}/licenses/LICENSE +0 -0
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "out_root": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios",
3
3
  "preview_enabled": true,
4
- "volumetric_requested": true,
5
- "volumetric_available": true,
6
- "mesh_characteristic_length": 0.4,
4
+ "volumetric_requested": false,
5
+ "volumetric_available": false,
6
+ "mesh_characteristic_length": 0.3,
7
7
  "scenarios": [
8
8
  {
9
9
  "name": "S01_straight_vwalls",
@@ -25,8 +25,8 @@
25
25
  "footprint_top": 5.0,
26
26
  "footprint_bottom": 5.0,
27
27
  "trench_from_surface": -1.0,
28
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S01_straight_vwalls/volumetric/trench_volume.msh",
29
- "volumetric_lc": 0.4,
28
+ "volumetric_path": null,
29
+ "volumetric_lc": null,
30
30
  "volumetric_error": null,
31
31
  "pipe_clearances": []
32
32
  },
@@ -50,31 +50,10 @@
50
50
  "footprint_top": 7.199999999999999,
51
51
  "footprint_bottom": 5.039999999999999,
52
52
  "trench_from_surface": -2.484000000000001,
53
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S02_straight_slope_pipe/volumetric/trench_volume.msh",
54
- "volumetric_lc": 0.4,
53
+ "volumetric_path": null,
54
+ "volumetric_lc": null,
55
55
  "volumetric_error": null,
56
- "pipe_clearances": [
57
- {
58
- "pipe_index": 0,
59
- "radius": 0.15,
60
- "length": 5.5938,
61
- "s_center": 0.5,
62
- "axis_margin_poly": 0.0,
63
- "axis_margin_lat": 306897.2031,
64
- "axis_margin_path": 0.0,
65
- "lateral_gap": 0.36,
66
- "lateral_margin": 0.3069,
67
- "min_margin": 0.0,
68
- "clearance": 0.0531,
69
- "warn_threshold": 0.02655,
70
- "clearance_scale": 1.0,
71
- "center_xy": [
72
- 3.0,
73
- 0.0
74
- ],
75
- "offset_u": 0.0
76
- }
77
- ]
56
+ "pipe_clearances": []
78
57
  },
79
58
  {
80
59
  "name": "S03_L_slope_two_pipes_box",
@@ -96,51 +75,10 @@
96
75
  "footprint_top": 11.999999999999995,
97
76
  "footprint_bottom": 8.700070386125077,
98
77
  "trench_from_surface": -5.0179228990454625,
99
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S03_L_slope_two_pipes_box/volumetric/trench_volume.msh",
100
- "volumetric_lc": 0.4,
78
+ "volumetric_path": null,
79
+ "volumetric_lc": null,
101
80
  "volumetric_error": null,
102
- "pipe_clearances": [
103
- {
104
- "pipe_index": 0,
105
- "radius": 0.15,
106
- "length": 5.794099999999999,
107
- "s_center": 0.35,
108
- "axis_margin_poly": 0.0,
109
- "axis_margin_lat": 307047.10295000003,
110
- "axis_margin_path": 0.40000000000000036,
111
- "lateral_gap": 0.36,
112
- "lateral_margin": 0.30705,
113
- "min_margin": 0.0,
114
- "clearance": 0.05295,
115
- "warn_threshold": 0.026475,
116
- "clearance_scale": 1.0,
117
- "center_xy": [
118
- 3.5,
119
- 0.0
120
- ],
121
- "offset_u": 0.0
122
- },
123
- {
124
- "pipe_index": 1,
125
- "radius": 0.1,
126
- "length": 0.4999999999999989,
127
- "s_center": 0.75,
128
- "axis_margin_poly": 0.0,
129
- "axis_margin_lat": 0.11750000000000049,
130
- "axis_margin_path": 2349999.75,
131
- "lateral_gap": 0.21749999999999994,
132
- "lateral_margin": 0.16749999999999993,
133
- "min_margin": 0.0,
134
- "clearance": 0.05,
135
- "warn_threshold": 0.025,
136
- "clearance_scale": 1.0,
137
- "center_xy": [
138
- 5.8,
139
- 1.5
140
- ],
141
- "offset_u": 0.2
142
- }
143
- ]
81
+ "pipe_clearances": []
144
82
  },
145
83
  {
146
84
  "name": "S04_U_slope_multi_noise",
@@ -162,71 +100,10 @@
162
100
  "footprint_top": 22.400000000000006,
163
101
  "footprint_bottom": 12.80127074424757,
164
102
  "trench_from_surface": -11.011702905355754,
165
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S04_U_slope_multi_noise/volumetric/trench_volume.msh",
166
- "volumetric_lc": 0.4,
103
+ "volumetric_path": null,
104
+ "volumetric_lc": null,
167
105
  "volumetric_error": null,
168
- "pipe_clearances": [
169
- {
170
- "pipe_index": 0,
171
- "radius": 0.18,
172
- "length": 4.9122,
173
- "s_center": 0.25,
174
- "axis_margin_poly": 0.0,
175
- "axis_margin_lat": 306097.54389999993,
176
- "axis_margin_path": 1.2999999999999998,
177
- "lateral_gap": 0.36999999999999994,
178
- "lateral_margin": 0.3060999999999999,
179
- "min_margin": 0.0,
180
- "clearance": 0.0639,
181
- "warn_threshold": 0.03195,
182
- "clearance_scale": 1.0,
183
- "center_xy": [
184
- 4.0,
185
- 0.0
186
- ],
187
- "offset_u": 0.0
188
- },
189
- {
190
- "pipe_index": 1,
191
- "radius": 0.1,
192
- "length": 1.0960155108391487,
193
- "s_center": 0.55,
194
- "axis_margin_poly": 0.009099025766972968,
195
- "axis_margin_lat": 0.0,
196
- "axis_margin_path": 9.422197859310744,
197
- "lateral_gap": 0.23749999999999996,
198
- "lateral_margin": 0.18749999999999994,
199
- "min_margin": 0.0,
200
- "clearance": 0.05,
201
- "warn_threshold": 0.025,
202
- "clearance_scale": 1.0,
203
- "center_xy": [
204
- 6.2,
205
- 2.8000000000000007
206
- ],
207
- "offset_u": -0.2
208
- },
209
- {
210
- "pipe_index": 2,
211
- "radius": 0.08,
212
- "length": 0.7792304845413269,
213
- "s_center": 0.75,
214
- "axis_margin_poly": 0.0,
215
- "axis_margin_lat": 0.03762395692965953,
216
- "axis_margin_path": 7.350384757729335,
217
- "lateral_gap": 0.16999999999999993,
218
- "lateral_margin": 0.11999999999999993,
219
- "min_margin": 0.0,
220
- "clearance": 0.05,
221
- "warn_threshold": 0.025,
222
- "clearance_scale": 1.0,
223
- "center_xy": [
224
- 4.0,
225
- 3.75
226
- ],
227
- "offset_u": 0.25
228
- }
229
- ]
106
+ "pipe_clearances": []
230
107
  },
231
108
  {
232
109
  "name": "S05_wide_slope_pair",
@@ -248,51 +125,10 @@
248
125
  "footprint_top": 28.808998594189276,
249
126
  "footprint_bottom": 27.46494373197848,
250
127
  "trench_from_surface": -6.858764294895576,
251
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S05_wide_slope_pair/volumetric/trench_volume.msh",
252
- "volumetric_lc": 0.4,
128
+ "volumetric_path": null,
129
+ "volumetric_lc": null,
253
130
  "volumetric_error": null,
254
- "pipe_clearances": [
255
- {
256
- "pipe_index": 0,
257
- "radius": 0.2,
258
- "length": 5.5,
259
- "s_center": 0.35,
260
- "axis_margin_poly": 1.2515037699201281,
261
- "axis_margin_lat": 2.443115482787669,
262
- "axis_margin_path": 1.2474421281299537,
263
- "lateral_gap": 0.6650630399999999,
264
- "lateral_margin": 0.6017750399999999,
265
- "min_margin": 0.6017750399999999,
266
- "clearance": 0.063288,
267
- "warn_threshold": 0.031644,
268
- "clearance_scale": 0.9,
269
- "center_xy": [
270
- 4.199999999999999,
271
- 0.3
272
- ],
273
- "offset_u": 0.3
274
- },
275
- {
276
- "pipe_index": 1,
277
- "radius": 0.16,
278
- "length": 3.2832310494763,
279
- "s_center": 0.7,
280
- "axis_margin_poly": 0.0,
281
- "axis_margin_lat": 1.9897591587891337,
282
- "axis_margin_path": 1.8556699893868722,
283
- "lateral_gap": 0.601750528,
284
- "lateral_margin": 0.539868928,
285
- "min_margin": 0.0,
286
- "clearance": 0.061881599999999995,
287
- "warn_threshold": 0.030940799999999997,
288
- "clearance_scale": 1.1,
289
- "center_xy": [
290
- 8.399999999999999,
291
- -0.4
292
- ],
293
- "offset_u": -0.4
294
- }
295
- ]
131
+ "pipe_clearances": []
296
132
  },
297
133
  {
298
134
  "name": "S06_bumpy_wide_loop",
@@ -314,51 +150,10 @@
314
150
  "footprint_top": 61.10535782948724,
315
151
  "footprint_bottom": 56.3121473979779,
316
152
  "trench_from_surface": -17.122161702529255,
317
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S06_bumpy_wide_loop/volumetric/trench_volume.msh",
318
- "volumetric_lc": 0.4,
153
+ "volumetric_path": null,
154
+ "volumetric_lc": null,
319
155
  "volumetric_error": null,
320
- "pipe_clearances": [
321
- {
322
- "pipe_index": 0,
323
- "radius": 0.18,
324
- "length": 3.4303356192892736,
325
- "s_center": 0.3,
326
- "axis_margin_poly": 0.9180874031301758,
327
- "axis_margin_lat": 0.0,
328
- "axis_margin_path": 6.590034660321056,
329
- "lateral_gap": 0.69721184,
330
- "lateral_margin": 0.63377984,
331
- "min_margin": 0.0,
332
- "clearance": 0.063432,
333
- "warn_threshold": 0.031716,
334
- "clearance_scale": 1.0,
335
- "center_xy": [
336
- 6.751372594742942,
337
- 0.04861489092728094
338
- ],
339
- "offset_u": 0.35
340
- },
341
- {
342
- "pipe_index": 1,
343
- "radius": 0.14,
344
- "length": 2.2797305056626995,
345
- "s_center": 0.6,
346
- "axis_margin_poly": 0.0,
347
- "axis_margin_lat": 0.4740426451536417,
348
- "axis_margin_path": 10.8869053322154,
349
- "lateral_gap": 0.6299,
350
- "lateral_margin": 0.5874,
351
- "min_margin": 0.0,
352
- "clearance": 0.0425,
353
- "warn_threshold": 0.02125,
354
- "clearance_scale": 0.85,
355
- "center_xy": [
356
- 7.152900088222557,
357
- 5.45
358
- ],
359
- "offset_u": -0.45
360
- }
361
- ]
156
+ "pipe_clearances": []
362
157
  },
363
158
  {
364
159
  "name": "S07_circular_well",
@@ -377,94 +172,13 @@
377
172
  "boxes": 0,
378
173
  "spheres": 1
379
174
  },
380
- "footprint_top": 22.05640516225481,
381
- "footprint_bottom": 18.82403650828919,
382
- "trench_from_surface": -47.27542533827233,
383
- "volumetric_path": "/home/liam/projects/chiark/trenchfoot/packages/trenchfoot/scenarios/S07_circular_well/volumetric/trench_volume.msh",
384
- "volumetric_lc": 0.4,
175
+ "footprint_top": 22.056405162254812,
176
+ "footprint_bottom": 18.826708706545926,
177
+ "trench_from_surface": -19.832030917053125,
178
+ "volumetric_path": null,
179
+ "volumetric_lc": null,
385
180
  "volumetric_error": null,
386
- "pipe_clearances": [
387
- {
388
- "pipe_index": 0,
389
- "radius": 0.2,
390
- "length": 4.0,
391
- "s_center": 0.25,
392
- "axis_margin_poly": null,
393
- "axis_margin_lat": 704798.0,
394
- "axis_margin_path": 0.08221136790945316,
395
- "lateral_gap": 0.7749999999999999,
396
- "lateral_margin": 0.7047999999999999,
397
- "min_margin": 0.08221136790945316,
398
- "clearance": 0.0702,
399
- "warn_threshold": 0.0351,
400
- "clearance_scale": 1.0,
401
- "center_xy": [
402
- 1.0340313980557629e-15,
403
- 1.4999999999999998
404
- ],
405
- "offset_u": 0.0
406
- },
407
- {
408
- "pipe_index": 1,
409
- "radius": 0.15,
410
- "length": 2.085540740431603,
411
- "s_center": 0.5,
412
- "axis_margin_poly": null,
413
- "axis_margin_lat": 0.0,
414
- "axis_margin_path": 5.324263372925678,
415
- "lateral_gap": 0.69,
416
- "lateral_margin": 0.63735,
417
- "min_margin": 0.0,
418
- "clearance": 0.052649999999999995,
419
- "warn_threshold": 0.026324999999999998,
420
- "clearance_scale": 1.0,
421
- "center_xy": [
422
- -1.4004815273327802,
423
- -0.009801714032953731
424
- ],
425
- "offset_u": 0.1
426
- },
427
- {
428
- "pipe_index": 2,
429
- "radius": 0.1,
430
- "length": 1.7551448183364624,
431
- "s_center": 0.75,
432
- "axis_margin_poly": null,
433
- "axis_margin_lat": 0.0,
434
- "axis_margin_path": 3.5272503266506745,
435
- "lateral_gap": 0.66,
436
- "lateral_margin": 0.61,
437
- "min_margin": 0.0,
438
- "clearance": 0.05,
439
- "warn_threshold": 0.025,
440
- "clearance_scale": 1.0,
441
- "center_xy": [
442
- -0.01470257104943662,
443
- -1.6492777090008293
444
- ],
445
- "offset_u": -0.15
446
- },
447
- {
448
- "pipe_index": 3,
449
- "radius": 0.12,
450
- "length": 1.44,
451
- "s_center": 0.0,
452
- "axis_margin_poly": null,
453
- "axis_margin_lat": 0.0,
454
- "axis_margin_path": null,
455
- "lateral_gap": 0.77,
456
- "lateral_margin": 0.72,
457
- "min_margin": 0.0,
458
- "clearance": 0.05,
459
- "warn_threshold": 0.025,
460
- "clearance_scale": 1.0,
461
- "center_xy": [
462
- 1.5,
463
- 0.0
464
- ],
465
- "offset_u": 0.0
466
- }
467
- ]
181
+ "pipe_clearances": []
468
182
  }
469
183
  ]
470
184
  }
@@ -548,62 +548,34 @@ def _ring_from_LR(L: List[np.ndarray], R: List[np.ndarray]) -> np.ndarray:
548
548
  return np.array(L + list(R[::-1]), float)
549
549
 
550
550
 
551
- def _ring_from_LR_with_end_caps(
551
+ def _extend_polyline_ends(
552
552
  L: List[np.ndarray], R: List[np.ndarray],
553
- path_xy: List[Tuple[float, float]], end_extension: float, n_cap_points: int = 5
554
- ) -> np.ndarray:
555
- """Create a ring from L/R offsets with semicircular end caps.
553
+ path_xy: List[Tuple[float, float]], extension: float
554
+ ) -> Tuple[List[np.ndarray], List[np.ndarray]]:
555
+ """Extend L/R offset polylines beyond path endpoints.
556
556
 
557
- Extends the outer boundary past the path endpoints to create ground buffer
558
- at the ends of open trenches.
557
+ Adds extra points at each end that extend the polylines backward (at start)
558
+ and forward (at end) along the path tangent direction.
559
559
  """
560
560
  P = np.array(path_xy, float)
561
561
 
562
- # Get tangent directions at endpoints
562
+ # Tangent directions at endpoints
563
563
  t_start = _normalize(P[1] - P[0])
564
564
  t_end = _normalize(P[-1] - P[-2])
565
565
 
566
- # Start cap: semicircle from R[0] around to L[0], extending in -t_start direction
567
- # Center of cap is at path start, offset backward by end_extension
568
- cap_center_start = P[0] - end_extension * t_start
569
- # Radius is distance from center to L[0] or R[0]
570
- radius_start = np.linalg.norm(np.array(L[0]) - cap_center_start)
566
+ # Extend start: add points before L[0] and R[0]
567
+ L_start_ext = np.array(L[0]) - extension * t_start
568
+ R_start_ext = np.array(R[0]) - extension * t_start
571
569
 
572
- # Generate semicircle points from R[0] to L[0] going around the back
573
- # R[0] is at angle theta_r, L[0] is at angle theta_l
574
- # We go from theta_r counterclockwise to theta_l (the long way around the back)
575
- vec_r = np.array(R[0]) - cap_center_start
576
- vec_l = np.array(L[0]) - cap_center_start
577
- theta_r = np.arctan2(vec_r[1], vec_r[0])
578
- theta_l = np.arctan2(vec_l[1], vec_l[0])
570
+ # Extend end: add points after L[-1] and R[-1]
571
+ L_end_ext = np.array(L[-1]) + extension * t_end
572
+ R_end_ext = np.array(R[-1]) + extension * t_end
579
573
 
580
- # Ensure we go the "back" way (counterclockwise from R to L)
581
- if theta_l > theta_r:
582
- theta_l -= 2 * np.pi
574
+ # Build extended polylines
575
+ L_ext = [L_start_ext] + list(L) + [L_end_ext]
576
+ R_ext = [R_start_ext] + list(R) + [R_end_ext]
583
577
 
584
- angles_start = np.linspace(theta_r, theta_l, n_cap_points + 2)[1:-1] # Exclude endpoints (already have R[0], L[0])
585
- cap_start = [cap_center_start + radius_start * np.array([np.cos(a), np.sin(a)]) for a in angles_start]
586
-
587
- # End cap: semicircle from L[-1] around to R[-1], extending in +t_end direction
588
- cap_center_end = P[-1] + end_extension * t_end
589
- radius_end = np.linalg.norm(np.array(L[-1]) - cap_center_end)
590
-
591
- vec_l_end = np.array(L[-1]) - cap_center_end
592
- vec_r_end = np.array(R[-1]) - cap_center_end
593
- theta_l_end = np.arctan2(vec_l_end[1], vec_l_end[0])
594
- theta_r_end = np.arctan2(vec_r_end[1], vec_r_end[0])
595
-
596
- # Go counterclockwise from L[-1] to R[-1] (the back way)
597
- if theta_r_end > theta_l_end:
598
- theta_r_end -= 2 * np.pi
599
-
600
- angles_end = np.linspace(theta_l_end, theta_r_end, n_cap_points + 2)[1:-1]
601
- cap_end = [cap_center_end + radius_end * np.array([np.cos(a), np.sin(a)]) for a in angles_end]
602
-
603
- # Build the full ring: L + end_cap + R_reversed + start_cap
604
- ring_points = list(L) + cap_end + list(R[::-1]) + cap_start
605
-
606
- return np.array(ring_points, float)
578
+ return L_ext, R_ext
607
579
 
608
580
  def make_trench_from_path_sloped(path_xy: List[Tuple[float,float]], width_top: float, depth: float, wall_slope: float, ground) -> Tuple[Dict,str,str,dict]:
609
581
  # Build top and bottom rings by offsetting centerline
@@ -851,16 +823,20 @@ def make_ground_surface_plane(path_xy: List[Tuple[float,float]], width_top: floa
851
823
 
852
824
  return {"ground_surface": (Vg, tris)}
853
825
  else:
854
- # Open paths: ground forms annulus with end caps extending past trench endpoints
855
- # Inner boundary: the trench opening (same as trench top ring)
826
+ # Open paths: ground forms annulus with flat extensions past trench endpoints
827
+ # Both inner and outer rings are extended by the margin distance to create
828
+ # ground buffer at trench ends. Using the same extension for both ensures
829
+ # the rings have matching topology for proper triangulation.
830
+
831
+ # Inner boundary: trench opening, extended at ends
856
832
  L_inner, R_inner = _offset_polyline(path_xy, half_top)
857
- inner_ring = _ensure_ccw(_ring_from_LR(L_inner, R_inner))
833
+ L_inner_ext, R_inner_ext = _extend_polyline_ends(L_inner, R_inner, path_xy, m)
834
+ inner_ring = _ensure_ccw(_ring_from_LR(L_inner_ext, R_inner_ext))
858
835
 
859
- # Outer boundary: offset by additional margin, with semicircular end caps
836
+ # Outer boundary: offset by margin, also extended at ends
860
837
  L_outer, R_outer = _offset_polyline(path_xy, half_top + m)
861
- outer_ring = _ensure_ccw(_ring_from_LR_with_end_caps(
862
- L_outer, R_outer, path_xy, end_extension=m
863
- ))
838
+ L_outer_ext, R_outer_ext = _extend_polyline_ends(L_outer, R_outer, path_xy, m)
839
+ outer_ring = _ensure_ccw(_ring_from_LR(L_outer_ext, R_outer_ext))
864
840
 
865
841
  # Triangulate the annular region (leaves hole open)
866
842
  combined_xy, tris = _triangulate_annulus(outer_ring, inner_ring)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: trenchfoot
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Synthetic trench scenario generator bundle (surfaces + volumetrics).
5
5
  Author: Liam Moore
6
6
  License-File: LICENSE
@@ -6,73 +6,73 @@ trenchfoot/gmsh_sloped_trench_mesher.py,sha256=D7EL6V0wkE6tvDARmm006yZE6KEzCl25O
6
6
  trenchfoot/plot_mesh.py,sha256=26dOlVfaM1WsUfr_sXVqA7axtY9qjY3WCNM7cUBTS7Q,3810
7
7
  trenchfoot/render_colors.py,sha256=EfldvoshgaZ6iZFk-UDL67-tvwGYaiZFS2NQZBMwhDM,1596
8
8
  trenchfoot/scene_spec_example.json,sha256=UcV25ku422UO0ZZPDrJwrT1zwmjoOIpnBdLuEdh-AZA,1028
9
- trenchfoot/trench_scene_generator_v3.py,sha256=EDG_ChbnDEbLiIU0GsA5IfWmuknQDUTx2DRiL5lEv4k,45665
10
- trenchfoot/scenarios/SUMMARY.json,sha256=PUT7ID4nl5BJ6A0M3MhbOkx5bm2HAy0Gwzq8cc6JBAE,18492
11
- trenchfoot/scenarios/S01_straight_vwalls/metrics.json,sha256=_AoK-WCgTKKdu_zUJL-HiSnsxMJvr6GDxlet7Ojmtk4,691
9
+ trenchfoot/trench_scene_generator_v3.py,sha256=lL_tsQEEKbWBthqsMKA2GQmRyglioKeRtYuHVP81ZIg,44512
10
+ trenchfoot/scenarios/SUMMARY.json,sha256=uylEzgzIqk5pGBfWVchVFnwwIDGBjNTDY_E23L_iakI,9372
11
+ trenchfoot/scenarios/S01_straight_vwalls/metrics.json,sha256=3kDgodQ0X3AlUK9wl-o_6JB1cykk7WlKArN5_kB6VFo,691
12
12
  trenchfoot/scenarios/S01_straight_vwalls/preview.png,sha256=adsx3-6oMu9WaixggXRhuXi_KM-q5s2RNSBLR_stq80,199624
13
- trenchfoot/scenarios/S01_straight_vwalls/preview_oblique.png,sha256=bHALyBDHkywF6pKzOPDvK6VNo6nk7s87SqqHhVAx_YU,121709
14
- trenchfoot/scenarios/S01_straight_vwalls/preview_side.png,sha256=A6nUvAfLky-dqX2SWYSCAzVO7BP7HCq-sfq_ay6AS8M,33157
15
- trenchfoot/scenarios/S01_straight_vwalls/preview_top.png,sha256=qjXvYOvdc_D1tei09VjRzm-0_Da2MCs-6FOc7ClmBo8,33305
13
+ trenchfoot/scenarios/S01_straight_vwalls/preview_oblique.png,sha256=mS6IamQbrYdqPtwAZCnEdr-cetkhlaSWJiLrxtYGJdA,134360
14
+ trenchfoot/scenarios/S01_straight_vwalls/preview_side.png,sha256=ev4KUmit--YeSCHHs95We4R1OzQzRs09TT-HlSL1Fu0,33335
15
+ trenchfoot/scenarios/S01_straight_vwalls/preview_top.png,sha256=rYUctk4KOEQlyCc5mgqMWc4EXiXt4r2MPDRoPlIvZDs,40032
16
16
  trenchfoot/scenarios/S01_straight_vwalls/scene.json,sha256=kbHRC9zMVDGHbuLh2wRsvchfVfcbdDEVvxsMwHHBoHw,343
17
- trenchfoot/scenarios/S01_straight_vwalls/trench_scene.obj,sha256=QeAtXExlXsoGCBT5uDa7fap5YgXfkxN-obAiQTOxpeI,561
17
+ trenchfoot/scenarios/S01_straight_vwalls/trench_scene.obj,sha256=Lmk178HkRqpT4fTMH2cPFn1JwxUfNymoKmEEeLGdJ1M,737
18
18
  trenchfoot/scenarios/S01_straight_vwalls/meshes/trench_scene_culled.obj,sha256=6-usCEpAfhhZcdCxAy7NcXrkBwv-mEh40A6zN50k0Jo,519
19
19
  trenchfoot/scenarios/S01_straight_vwalls/point_clouds/culled/resolution0p050.pth,sha256=w4AKFbud2V0NhAtudGXXheLynAq-NLxUFSPxLczK3T0,1352093
20
20
  trenchfoot/scenarios/S01_straight_vwalls/point_clouds/full/resolution0p050.pth,sha256=w4AKFbud2V0NhAtudGXXheLynAq-NLxUFSPxLczK3T0,1352093
21
21
  trenchfoot/scenarios/S01_straight_vwalls/volumetric/trench_volume.msh,sha256=mpKNhdAPEogyDQrE9IGTgg535ZBNYXiLpIcmvl6QYPA,15007
22
- trenchfoot/scenarios/S02_straight_slope_pipe/metrics.json,sha256=D6Rq9lQ1WXsUPkuYdgB9QkET2k0iX3QLnWEyPknaesk,940
22
+ trenchfoot/scenarios/S02_straight_slope_pipe/metrics.json,sha256=RlJMV4VOXAZDUw7RDJFpsDKnMf9qlK652gOAihMIrAI,940
23
23
  trenchfoot/scenarios/S02_straight_slope_pipe/preview.png,sha256=Aj5XpJMSdRNqnrPzL4oe-d0RjLdFT2V7OFrrZxwlsx8,251134
24
- trenchfoot/scenarios/S02_straight_slope_pipe/preview_oblique.png,sha256=0LqiBa__OrJi8m5sxj9buy6kiU3jdQ_uxDf3DTOGu_w,176300
25
- trenchfoot/scenarios/S02_straight_slope_pipe/preview_side.png,sha256=0b8wYSgRusl1RbilJGdAAi2zz4vZH_BQO31HdyTQvTM,56757
26
- trenchfoot/scenarios/S02_straight_slope_pipe/preview_top.png,sha256=EvTsUFRCSvD6kRqPY64x1sdSn9HMu_1a-J_WOQMrgag,59470
24
+ trenchfoot/scenarios/S02_straight_slope_pipe/preview_oblique.png,sha256=3smrylqFAawK6yafmmJjfo1_rAXJYQeIVOAcEWr17Xo,174348
25
+ trenchfoot/scenarios/S02_straight_slope_pipe/preview_side.png,sha256=Lb85fVi-_M9bj8PEOFe8hlQ9ZXZI6KwuLrqk4NQKF-I,56406
26
+ trenchfoot/scenarios/S02_straight_slope_pipe/preview_top.png,sha256=BGoLqSmBgWlysgArltv08THH5_JYcyEYipNueT37BFw,58363
27
27
  trenchfoot/scenarios/S02_straight_slope_pipe/scene.json,sha256=W1ApzLHEnHQn-7AdWxh2xiEinj6Yb7830sQXNxmmmDw,486
28
- trenchfoot/scenarios/S02_straight_slope_pipe/trench_scene.obj,sha256=7MmtkwmSsJivS5j4O_Bfd1j1Xs27ZGwq1fZJrgKGtcw,333051
28
+ trenchfoot/scenarios/S02_straight_slope_pipe/trench_scene.obj,sha256=AUBGuQ-adAlMbjNCloPQpmEnNRuEbOa82wla9lHidas,333293
29
29
  trenchfoot/scenarios/S02_straight_slope_pipe/meshes/trench_scene_culled.obj,sha256=OOiw80NuCBejzeN3MWAip9Haw8yQsLZEdlMQdDIgEMU,847
30
30
  trenchfoot/scenarios/S02_straight_slope_pipe/point_clouds/culled/resolution0p050.pth,sha256=Ug9hTIsm6iQKRs9cucXJyJpxpSvQ5f2GS1ytZmxi1mE,1623389
31
31
  trenchfoot/scenarios/S02_straight_slope_pipe/point_clouds/full/resolution0p050.pth,sha256=JgIRni8xWKtz2mm0gpSdmavGe-FF71mDervavM4Rqw8,1718877
32
32
  trenchfoot/scenarios/S02_straight_slope_pipe/volumetric/trench_volume.msh,sha256=kNFAqjr7dM-KX4JQV1u5GbHbWWFIfiEur1wV1fJCePA,47084
33
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/metrics.json,sha256=Do1FCPkBfEznb3eop45DjjlgIJlwX9LjzDhDTHfl9c4,1124
33
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/metrics.json,sha256=6BCgighy5tk7unG4DER1FHyGBVSSYxgxPI7XaCq-OGQ,1124
34
34
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview.png,sha256=q0V_2HSLUl2ovWLc4INKV87aLVh3vzqabMyKr8XEWEg,224248
35
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_oblique.png,sha256=dooBp08mEnjQyNhAZQlaJ6YMMnl9CEBAbcUUz3HT8d8,164130
36
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_side.png,sha256=CDROHUpFRgdvdgkY3guWLEkZKyJ-jL2WPmH5QXi4bhg,52200
37
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_top.png,sha256=YKjUA6H3YKRAAz3-Adza5NSrQLrQt0vzLXZCwvtmHYs,51812
35
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_oblique.png,sha256=4UFRyZFuiF1ORqE-XRa8qwGxMaQvy-ioqt5Ol9Y7spA,155752
36
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_side.png,sha256=MW6QGkVIl6ioyVi-6mhVvEaI-mWfqJqGrVLos1KRiwI,51327
37
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/preview_top.png,sha256=hV24b3W6GXQQhuJzAy0NYmhYAqbtWcKhMsVZl_tsymw,47541
38
38
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/scene.json,sha256=10azlgelNGCDG6dyWsAKVviXXZaoYnAMvJxvvj-HyS8,940
39
- trenchfoot/scenarios/S03_L_slope_two_pipes_box/trench_scene.obj,sha256=KkZxHtJaGRSDwkATtwpIoA6J2VpknjQrOdlHj8ZsUIs,655847
39
+ trenchfoot/scenarios/S03_L_slope_two_pipes_box/trench_scene.obj,sha256=BxyEG5t_IwnQt4HDQIUw3YSjxSTJkvHWOS0F_7oCiK4,656109
40
40
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/meshes/trench_scene_culled.obj,sha256=At4lipowr_3MY1rxmcKa479F_mQ-jJDVQJe0yHTrFSc,1835
41
41
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/point_clouds/culled/resolution0p050.pth,sha256=KqbuoZ1tUPDhlnDgmhd-7WBb92TABsEmOzEsB__KtlA,2456029
42
42
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/point_clouds/full/resolution0p050.pth,sha256=4fXvfu0TMO9FJaoqYrW21SCGe3eKuSLkSUl9CdE14rw,2622685
43
43
  trenchfoot/scenarios/S03_L_slope_two_pipes_box/volumetric/trench_volume.msh,sha256=cPgHKHlzPPtWX8H1yaxAYsEgYba3fr2JjfPvgg2a000,87383
44
- trenchfoot/scenarios/S04_U_slope_multi_noise/metrics.json,sha256=mRIbV_Lk0UfgifamGky6WpIsHWZgpfCDJZ-2Cdsfiyg,1294
44
+ trenchfoot/scenarios/S04_U_slope_multi_noise/metrics.json,sha256=OJSwQvFYkT4_Andg0xATHFcbT8JNbCEPTLirpeKrBhs,1294
45
45
  trenchfoot/scenarios/S04_U_slope_multi_noise/preview.png,sha256=ZbLgrL0nRtUX1y77i7b3LCxw4w_j5Ivmmh0i2YzrBDs,238958
46
- trenchfoot/scenarios/S04_U_slope_multi_noise/preview_oblique.png,sha256=2KxDuzcT3Ej910RVDUTAUWD-aj5vgr4LU6Vb6_vPUw4,172384
47
- trenchfoot/scenarios/S04_U_slope_multi_noise/preview_side.png,sha256=M2TsuqEUj_x1iWUw2eaYRAtiW62qsmYn9uS59PhVclY,76544
48
- trenchfoot/scenarios/S04_U_slope_multi_noise/preview_top.png,sha256=510pmJTQBHWsyB18l4hIoHUd70J1yEeljn-nubq2MzU,67892
46
+ trenchfoot/scenarios/S04_U_slope_multi_noise/preview_oblique.png,sha256=23cjuwJsr_iDg4DpcM8gXF-pvBdYr3GB0r7PNblU3xI,164624
47
+ trenchfoot/scenarios/S04_U_slope_multi_noise/preview_side.png,sha256=lBSecGIvTjdRJu-t5JmyS9XB4pLONwPG1NL6El0IT6E,77695
48
+ trenchfoot/scenarios/S04_U_slope_multi_noise/preview_top.png,sha256=06AXZhtgZ_LBSgN2tnlo7Zf7rNl2E_W9W_O18Oy2rec,64172
49
49
  trenchfoot/scenarios/S04_U_slope_multi_noise/scene.json,sha256=ePFijY2uoZt6P5bVW2GSI8GKSA3CUMupIiQ1RnJkLxM,1119
50
- trenchfoot/scenarios/S04_U_slope_multi_noise/trench_scene.obj,sha256=IJuwTxx5Xs4s_8IfF9OorJ_f_AMJATTVWZJytDhOL5U,1188160
50
+ trenchfoot/scenarios/S04_U_slope_multi_noise/trench_scene.obj,sha256=mWmifSfIKrW87eAMUEDQdmjOWjlDj2jnPjI7aJ2QGZg,1188450
51
51
  trenchfoot/scenarios/S04_U_slope_multi_noise/meshes/trench_scene_culled.obj,sha256=ykw_tzhXknXt3DbmSk3cBzbOL91Jm4zxjthp799YkWw,3206
52
52
  trenchfoot/scenarios/S04_U_slope_multi_noise/volumetric/trench_volume.msh,sha256=7KfGkJAlv19rzbaPhzbmy9UWo42Db_4VhAtisn6aMak,144623
53
- trenchfoot/scenarios/S05_wide_slope_pair/metrics.json,sha256=koOpLE6SxamT7mzenj73YbG2I9ca-xFj0WcwenZAHGo,1113
54
- trenchfoot/scenarios/S05_wide_slope_pair/preview_oblique.png,sha256=poBHAotvcDGV9D43D_ZvDk4b4Bt5p45kfjM5jlg9TdM,139451
55
- trenchfoot/scenarios/S05_wide_slope_pair/preview_side.png,sha256=YqBIKLmoNwakWjI6vVrXrJc0huU3dPIyf2-mO5RF6eM,73917
56
- trenchfoot/scenarios/S05_wide_slope_pair/preview_top.png,sha256=VeHyLYWaytKpfm0sPwOgjHi253oejmWFfCSbpZll_yA,57690
53
+ trenchfoot/scenarios/S05_wide_slope_pair/metrics.json,sha256=aQYz9R_5UhuU8OHfRXVrH76bPvtWpAfMnb997FWX_x4,1113
54
+ trenchfoot/scenarios/S05_wide_slope_pair/preview_oblique.png,sha256=Ijdt2T8aKusXpENefS7l3W96bkoy2689NNyl1Mld_-I,140048
55
+ trenchfoot/scenarios/S05_wide_slope_pair/preview_side.png,sha256=c5d_Q50i46rZ8zJRly5n6BJs02Mm9XVWGCwiEJDNxSI,67942
56
+ trenchfoot/scenarios/S05_wide_slope_pair/preview_top.png,sha256=f59EOAR06rcXnMjCviwLZI-if5bl55jbqPn4SvDQDkg,56139
57
57
  trenchfoot/scenarios/S05_wide_slope_pair/scene.json,sha256=5JMFXLxjjkT3_xrmJU7SX3FYSHM2rgL63nehik0c_JY,1030
58
- trenchfoot/scenarios/S05_wide_slope_pair/trench_scene.obj,sha256=alQlzZAZ7zclj2z4drAN0oHx_NEoa9ISvLPd_4ogf6o,691090
58
+ trenchfoot/scenarios/S05_wide_slope_pair/trench_scene.obj,sha256=GqL6MSPOs7mWltMXwgvoVxAReorCgut2Wq_nGyoRa6g,691395
59
59
  trenchfoot/scenarios/S05_wide_slope_pair/volumetric/trench_volume.msh,sha256=pHrj2dJgpSklpxiHHThiZINJQWpUdvkfhUnVBpKASEM,123235
60
- trenchfoot/scenarios/S06_bumpy_wide_loop/metrics.json,sha256=lj_ptCbIJa9Iplq8nROviIiUnwx6l1ToOg-TwHG31K4,1135
61
- trenchfoot/scenarios/S06_bumpy_wide_loop/preview_oblique.png,sha256=6z054QlAdvF4Cy4dSr9BKvT5A4X-DETeac3jQQhokrk,178063
62
- trenchfoot/scenarios/S06_bumpy_wide_loop/preview_side.png,sha256=-17uqFyIZFoEZCPg1gEdWCITnX2HoPFHlWlL8F2AX8c,85737
63
- trenchfoot/scenarios/S06_bumpy_wide_loop/preview_top.png,sha256=Yen_fICekSBLtAJscZ7409o07LRfPrNLqhDGW5a6o5I,84580
60
+ trenchfoot/scenarios/S06_bumpy_wide_loop/metrics.json,sha256=97OpIW7mH_MDMKqV8NubdNJaKe85WCNspSwUEnXWVls,1135
61
+ trenchfoot/scenarios/S06_bumpy_wide_loop/preview_oblique.png,sha256=QKd2cxKN1xsnUZzvZ8KusECgFFGpp_a1EnVw-5EGMic,180714
62
+ trenchfoot/scenarios/S06_bumpy_wide_loop/preview_side.png,sha256=YoRcgzGjHMh6l8YQQJ_qGNBow2favj0QqtKxXbtmV-U,88829
63
+ trenchfoot/scenarios/S06_bumpy_wide_loop/preview_top.png,sha256=CqwNV-iR6TWvJ_yR0LMBhE6UF84KudRyFp9d4WUaSEA,89008
64
64
  trenchfoot/scenarios/S06_bumpy_wide_loop/scene.json,sha256=SzjQgccYU1KRIiXVp-LwnLpf7pLkBotQ9_baHljd46g,1105
65
- trenchfoot/scenarios/S06_bumpy_wide_loop/trench_scene.obj,sha256=7RiSRxvUHrvVnk7-M7YSoOZKKPcMp0DoN_WL9cIbmkU,846803
65
+ trenchfoot/scenarios/S06_bumpy_wide_loop/trench_scene.obj,sha256=wdqTWXK_dQSFPNjkS1aJXSHIqvzJNwXeU_yIahjaXp8,847293
66
66
  trenchfoot/scenarios/S06_bumpy_wide_loop/volumetric/trench_volume.msh,sha256=r8KJMR5TxykP1_oeYbPnsckStGZDZ2-7e8KCAHPBh5I,279971
67
- trenchfoot/scenarios/S07_circular_well/metrics.json,sha256=-dKjI-UIPWrlHXaFqQVydh_sc8fmX808dndzzNyubkg,1386
68
- trenchfoot/scenarios/S07_circular_well/preview_oblique.png,sha256=_jraTOyoKC-PUzz0bT1lfC07Jmy9nmMn6Ymlkr_QDb0,217118
69
- trenchfoot/scenarios/S07_circular_well/preview_side.png,sha256=mA67PfZT79ft1buRoCwnYOqKNjJ863FI1_gU4zZPmlg,92326
70
- trenchfoot/scenarios/S07_circular_well/preview_top.png,sha256=XW7DQLDEYmSV6Lnfo1F-Cep4wh0HEkuE9ae1jCvlzAs,142139
67
+ trenchfoot/scenarios/S07_circular_well/metrics.json,sha256=RLjk54Ho5cRVB-aZ7F2x6PBXkycp4pLKlN3bVgbuagE,1390
68
+ trenchfoot/scenarios/S07_circular_well/preview_oblique.png,sha256=ogcl8HnszT6otoZuRu_P5J_wbzuwA54FL1lOPAEBv3M,201455
69
+ trenchfoot/scenarios/S07_circular_well/preview_side.png,sha256=wg6Blso1DHaswjwgQ8A2wakoAf7Iry-OCWUdFH46ALg,80971
70
+ trenchfoot/scenarios/S07_circular_well/preview_top.png,sha256=X1P0g8kblJLsxOpYiZXKG1uIn4Bt52jvp2spLX-7554,123007
71
71
  trenchfoot/scenarios/S07_circular_well/scene.json,sha256=bvror2YX6aNbsEc25-N7JO3ysH2dTLGyEE6zGzZysXQ,3146
72
- trenchfoot/scenarios/S07_circular_well/trench_scene.obj,sha256=1MAsyGkJ4-tCRXLDWi_7ruumgpCpcl_Ca5poRLtTua0,1619846
72
+ trenchfoot/scenarios/S07_circular_well/trench_scene.obj,sha256=leTTT0i5xE-fvFSzHLNf_JBsU0AN3YqadDx4HmNmFhU,1618101
73
73
  trenchfoot/scenarios/S07_circular_well/volumetric/trench_volume.msh,sha256=dqhtd3SFKj5RLT_BcWIIvVGCbAqvOx7RX25-K7NKX10,615212
74
- trenchfoot-0.2.4.dist-info/METADATA,sha256=6OadSF2ZjBflziGJrQxUQMLNwIy9QDwyr3J03BJneiA,5292
75
- trenchfoot-0.2.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
76
- trenchfoot-0.2.4.dist-info/entry_points.txt,sha256=5TejAGmc4GnNYLn7MhhLtSCNz9240RvzcNaetF4IHfg,119
77
- trenchfoot-0.2.4.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
78
- trenchfoot-0.2.4.dist-info/RECORD,,
74
+ trenchfoot-0.2.6.dist-info/METADATA,sha256=AijPsKWxr7-QImLYBajDcizcl4DSAXOja0piH89jrCA,5292
75
+ trenchfoot-0.2.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
76
+ trenchfoot-0.2.6.dist-info/entry_points.txt,sha256=5TejAGmc4GnNYLn7MhhLtSCNz9240RvzcNaetF4IHfg,119
77
+ trenchfoot-0.2.6.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
78
+ trenchfoot-0.2.6.dist-info/RECORD,,