warp-lang 1.9.0__py3-none-manylinux_2_34_aarch64.whl → 1.10.0__py3-none-manylinux_2_34_aarch64.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 warp-lang might be problematic. Click here for more details.

Files changed (350) hide show
  1. warp/__init__.py +301 -287
  2. warp/__init__.pyi +2302 -307
  3. warp/_src/__init__.py +14 -0
  4. warp/_src/autograd.py +1077 -0
  5. warp/_src/build.py +620 -0
  6. warp/_src/build_dll.py +642 -0
  7. warp/{builtins.py → _src/builtins.py} +1546 -224
  8. warp/_src/codegen.py +4361 -0
  9. warp/{config.py → _src/config.py} +178 -169
  10. warp/_src/constants.py +59 -0
  11. warp/_src/context.py +8352 -0
  12. warp/_src/dlpack.py +464 -0
  13. warp/_src/fabric.py +362 -0
  14. warp/_src/fem/__init__.py +14 -0
  15. warp/_src/fem/adaptivity.py +510 -0
  16. warp/_src/fem/cache.py +689 -0
  17. warp/_src/fem/dirichlet.py +190 -0
  18. warp/{fem → _src/fem}/domain.py +42 -30
  19. warp/_src/fem/field/__init__.py +131 -0
  20. warp/_src/fem/field/field.py +703 -0
  21. warp/{fem → _src/fem}/field/nodal_field.py +32 -15
  22. warp/{fem → _src/fem}/field/restriction.py +3 -1
  23. warp/{fem → _src/fem}/field/virtual.py +55 -27
  24. warp/_src/fem/geometry/__init__.py +32 -0
  25. warp/{fem → _src/fem}/geometry/adaptive_nanogrid.py +79 -163
  26. warp/_src/fem/geometry/closest_point.py +99 -0
  27. warp/{fem → _src/fem}/geometry/deformed_geometry.py +16 -22
  28. warp/{fem → _src/fem}/geometry/element.py +34 -10
  29. warp/{fem → _src/fem}/geometry/geometry.py +50 -20
  30. warp/{fem → _src/fem}/geometry/grid_2d.py +14 -23
  31. warp/{fem → _src/fem}/geometry/grid_3d.py +14 -23
  32. warp/{fem → _src/fem}/geometry/hexmesh.py +42 -63
  33. warp/{fem → _src/fem}/geometry/nanogrid.py +256 -247
  34. warp/{fem → _src/fem}/geometry/partition.py +123 -63
  35. warp/{fem → _src/fem}/geometry/quadmesh.py +28 -45
  36. warp/{fem → _src/fem}/geometry/tetmesh.py +42 -63
  37. warp/{fem → _src/fem}/geometry/trimesh.py +28 -45
  38. warp/{fem → _src/fem}/integrate.py +166 -158
  39. warp/_src/fem/linalg.py +385 -0
  40. warp/_src/fem/operator.py +398 -0
  41. warp/_src/fem/polynomial.py +231 -0
  42. warp/{fem → _src/fem}/quadrature/pic_quadrature.py +17 -20
  43. warp/{fem → _src/fem}/quadrature/quadrature.py +97 -47
  44. warp/_src/fem/space/__init__.py +248 -0
  45. warp/{fem → _src/fem}/space/basis_function_space.py +22 -11
  46. warp/_src/fem/space/basis_space.py +681 -0
  47. warp/{fem → _src/fem}/space/dof_mapper.py +5 -3
  48. warp/{fem → _src/fem}/space/function_space.py +16 -13
  49. warp/{fem → _src/fem}/space/grid_2d_function_space.py +6 -7
  50. warp/{fem → _src/fem}/space/grid_3d_function_space.py +6 -4
  51. warp/{fem → _src/fem}/space/hexmesh_function_space.py +6 -10
  52. warp/{fem → _src/fem}/space/nanogrid_function_space.py +5 -9
  53. warp/{fem → _src/fem}/space/partition.py +119 -60
  54. warp/{fem → _src/fem}/space/quadmesh_function_space.py +6 -10
  55. warp/{fem → _src/fem}/space/restriction.py +68 -33
  56. warp/_src/fem/space/shape/__init__.py +152 -0
  57. warp/{fem → _src/fem}/space/shape/cube_shape_function.py +11 -9
  58. warp/{fem → _src/fem}/space/shape/shape_function.py +10 -9
  59. warp/{fem → _src/fem}/space/shape/square_shape_function.py +8 -6
  60. warp/{fem → _src/fem}/space/shape/tet_shape_function.py +5 -3
  61. warp/{fem → _src/fem}/space/shape/triangle_shape_function.py +5 -3
  62. warp/{fem → _src/fem}/space/tetmesh_function_space.py +5 -9
  63. warp/_src/fem/space/topology.py +461 -0
  64. warp/{fem → _src/fem}/space/trimesh_function_space.py +5 -9
  65. warp/_src/fem/types.py +114 -0
  66. warp/_src/fem/utils.py +488 -0
  67. warp/_src/jax.py +188 -0
  68. warp/_src/jax_experimental/__init__.py +14 -0
  69. warp/_src/jax_experimental/custom_call.py +389 -0
  70. warp/_src/jax_experimental/ffi.py +1286 -0
  71. warp/_src/jax_experimental/xla_ffi.py +658 -0
  72. warp/_src/marching_cubes.py +710 -0
  73. warp/_src/math.py +416 -0
  74. warp/_src/optim/__init__.py +14 -0
  75. warp/_src/optim/adam.py +165 -0
  76. warp/_src/optim/linear.py +1608 -0
  77. warp/_src/optim/sgd.py +114 -0
  78. warp/_src/paddle.py +408 -0
  79. warp/_src/render/__init__.py +14 -0
  80. warp/_src/render/imgui_manager.py +291 -0
  81. warp/_src/render/render_opengl.py +3638 -0
  82. warp/_src/render/render_usd.py +939 -0
  83. warp/_src/render/utils.py +162 -0
  84. warp/_src/sparse.py +2718 -0
  85. warp/_src/tape.py +1208 -0
  86. warp/{thirdparty → _src/thirdparty}/unittest_parallel.py +9 -2
  87. warp/_src/torch.py +393 -0
  88. warp/_src/types.py +5888 -0
  89. warp/_src/utils.py +1695 -0
  90. warp/autograd.py +12 -1054
  91. warp/bin/warp-clang.so +0 -0
  92. warp/bin/warp.so +0 -0
  93. warp/build.py +8 -588
  94. warp/build_dll.py +6 -471
  95. warp/codegen.py +6 -4246
  96. warp/constants.py +6 -39
  97. warp/context.py +12 -7851
  98. warp/dlpack.py +6 -444
  99. warp/examples/distributed/example_jacobi_mpi.py +4 -5
  100. warp/examples/fem/example_adaptive_grid.py +1 -1
  101. warp/examples/fem/example_apic_fluid.py +1 -1
  102. warp/examples/fem/example_burgers.py +8 -8
  103. warp/examples/fem/example_diffusion.py +1 -1
  104. warp/examples/fem/example_distortion_energy.py +1 -1
  105. warp/examples/fem/example_mixed_elasticity.py +2 -2
  106. warp/examples/fem/example_navier_stokes.py +1 -1
  107. warp/examples/fem/example_nonconforming_contact.py +7 -7
  108. warp/examples/fem/example_stokes.py +1 -1
  109. warp/examples/fem/example_stokes_transfer.py +1 -1
  110. warp/examples/fem/utils.py +2 -2
  111. warp/examples/interop/example_jax_callable.py +1 -1
  112. warp/examples/interop/example_jax_ffi_callback.py +1 -1
  113. warp/examples/interop/example_jax_kernel.py +3 -2
  114. warp/examples/tile/example_tile_mcgp.py +191 -0
  115. warp/fabric.py +6 -337
  116. warp/fem/__init__.py +159 -97
  117. warp/fem/adaptivity.py +7 -489
  118. warp/fem/cache.py +9 -648
  119. warp/fem/dirichlet.py +6 -184
  120. warp/fem/field/__init__.py +8 -109
  121. warp/fem/field/field.py +7 -652
  122. warp/fem/geometry/__init__.py +7 -18
  123. warp/fem/geometry/closest_point.py +11 -77
  124. warp/fem/linalg.py +18 -366
  125. warp/fem/operator.py +11 -369
  126. warp/fem/polynomial.py +9 -209
  127. warp/fem/space/__init__.py +5 -211
  128. warp/fem/space/basis_space.py +6 -662
  129. warp/fem/space/shape/__init__.py +41 -118
  130. warp/fem/space/topology.py +6 -437
  131. warp/fem/types.py +6 -81
  132. warp/fem/utils.py +11 -444
  133. warp/jax.py +8 -165
  134. warp/jax_experimental/__init__.py +14 -1
  135. warp/jax_experimental/custom_call.py +8 -342
  136. warp/jax_experimental/ffi.py +17 -853
  137. warp/jax_experimental/xla_ffi.py +5 -596
  138. warp/marching_cubes.py +5 -689
  139. warp/math.py +16 -393
  140. warp/native/array.h +385 -37
  141. warp/native/builtin.h +316 -39
  142. warp/native/bvh.cpp +43 -9
  143. warp/native/bvh.cu +62 -27
  144. warp/native/bvh.h +310 -309
  145. warp/native/clang/clang.cpp +102 -97
  146. warp/native/coloring.cpp +0 -1
  147. warp/native/crt.h +208 -0
  148. warp/native/exports.h +156 -0
  149. warp/native/hashgrid.cu +2 -0
  150. warp/native/intersect.h +24 -1
  151. warp/native/intersect_tri.h +44 -35
  152. warp/native/mat.h +1456 -276
  153. warp/native/mesh.cpp +4 -4
  154. warp/native/mesh.cu +4 -2
  155. warp/native/mesh.h +176 -61
  156. warp/native/quat.h +0 -52
  157. warp/native/scan.cu +2 -0
  158. warp/native/sort.cu +22 -13
  159. warp/native/sort.h +2 -0
  160. warp/native/sparse.cu +7 -3
  161. warp/native/spatial.h +12 -0
  162. warp/native/tile.h +837 -70
  163. warp/native/tile_radix_sort.h +3 -3
  164. warp/native/tile_reduce.h +394 -46
  165. warp/native/tile_scan.h +4 -4
  166. warp/native/vec.h +469 -53
  167. warp/native/version.h +23 -0
  168. warp/native/volume.cpp +1 -1
  169. warp/native/volume.cu +1 -0
  170. warp/native/volume.h +1 -1
  171. warp/native/volume_builder.cu +2 -0
  172. warp/native/warp.cpp +60 -32
  173. warp/native/warp.cu +581 -280
  174. warp/native/warp.h +14 -11
  175. warp/optim/__init__.py +6 -3
  176. warp/optim/adam.py +6 -145
  177. warp/optim/linear.py +14 -1585
  178. warp/optim/sgd.py +6 -94
  179. warp/paddle.py +6 -388
  180. warp/render/__init__.py +8 -4
  181. warp/render/imgui_manager.py +7 -267
  182. warp/render/render_opengl.py +6 -3616
  183. warp/render/render_usd.py +6 -918
  184. warp/render/utils.py +6 -142
  185. warp/sparse.py +37 -2563
  186. warp/tape.py +6 -1188
  187. warp/tests/__main__.py +1 -1
  188. warp/tests/cuda/test_async.py +4 -4
  189. warp/tests/cuda/test_conditional_captures.py +1 -1
  190. warp/tests/cuda/test_multigpu.py +1 -1
  191. warp/tests/cuda/test_streams.py +58 -1
  192. warp/tests/geometry/test_bvh.py +157 -22
  193. warp/tests/geometry/test_hash_grid.py +38 -0
  194. warp/tests/geometry/test_marching_cubes.py +0 -1
  195. warp/tests/geometry/test_mesh.py +5 -3
  196. warp/tests/geometry/test_mesh_query_aabb.py +5 -12
  197. warp/tests/geometry/test_mesh_query_point.py +5 -2
  198. warp/tests/geometry/test_mesh_query_ray.py +15 -3
  199. warp/tests/geometry/test_volume_write.py +5 -5
  200. warp/tests/interop/test_dlpack.py +18 -17
  201. warp/tests/interop/test_jax.py +1382 -79
  202. warp/tests/interop/test_paddle.py +1 -1
  203. warp/tests/test_adam.py +0 -1
  204. warp/tests/test_arithmetic.py +9 -9
  205. warp/tests/test_array.py +580 -100
  206. warp/tests/test_array_reduce.py +3 -3
  207. warp/tests/test_atomic.py +12 -8
  208. warp/tests/test_atomic_bitwise.py +209 -0
  209. warp/tests/test_atomic_cas.py +4 -4
  210. warp/tests/test_bool.py +2 -2
  211. warp/tests/test_builtins_resolution.py +5 -571
  212. warp/tests/test_codegen.py +34 -15
  213. warp/tests/test_conditional.py +1 -1
  214. warp/tests/test_context.py +6 -6
  215. warp/tests/test_copy.py +242 -161
  216. warp/tests/test_ctypes.py +3 -3
  217. warp/tests/test_devices.py +24 -2
  218. warp/tests/test_examples.py +16 -84
  219. warp/tests/test_fabricarray.py +35 -35
  220. warp/tests/test_fast_math.py +0 -2
  221. warp/tests/test_fem.py +60 -14
  222. warp/tests/test_fixedarray.py +3 -3
  223. warp/tests/test_func.py +8 -5
  224. warp/tests/test_generics.py +1 -1
  225. warp/tests/test_indexedarray.py +24 -24
  226. warp/tests/test_intersect.py +39 -9
  227. warp/tests/test_large.py +1 -1
  228. warp/tests/test_lerp.py +3 -1
  229. warp/tests/test_linear_solvers.py +1 -1
  230. warp/tests/test_map.py +49 -4
  231. warp/tests/test_mat.py +52 -62
  232. warp/tests/test_mat_constructors.py +4 -5
  233. warp/tests/test_mat_lite.py +1 -1
  234. warp/tests/test_mat_scalar_ops.py +121 -121
  235. warp/tests/test_math.py +34 -0
  236. warp/tests/test_module_aot.py +4 -4
  237. warp/tests/test_modules_lite.py +28 -2
  238. warp/tests/test_print.py +11 -11
  239. warp/tests/test_quat.py +93 -58
  240. warp/tests/test_runlength_encode.py +1 -1
  241. warp/tests/test_scalar_ops.py +38 -10
  242. warp/tests/test_smoothstep.py +1 -1
  243. warp/tests/test_sparse.py +126 -15
  244. warp/tests/test_spatial.py +105 -87
  245. warp/tests/test_special_values.py +6 -6
  246. warp/tests/test_static.py +7 -7
  247. warp/tests/test_struct.py +13 -2
  248. warp/tests/test_triangle_closest_point.py +48 -1
  249. warp/tests/test_tuple.py +96 -0
  250. warp/tests/test_types.py +82 -9
  251. warp/tests/test_utils.py +52 -52
  252. warp/tests/test_vec.py +29 -29
  253. warp/tests/test_vec_constructors.py +5 -5
  254. warp/tests/test_vec_scalar_ops.py +97 -97
  255. warp/tests/test_version.py +75 -0
  256. warp/tests/tile/test_tile.py +239 -0
  257. warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
  258. warp/tests/tile/test_tile_cholesky.py +7 -4
  259. warp/tests/tile/test_tile_load.py +26 -2
  260. warp/tests/tile/test_tile_mathdx.py +3 -3
  261. warp/tests/tile/test_tile_matmul.py +1 -1
  262. warp/tests/tile/test_tile_mlp.py +2 -4
  263. warp/tests/tile/test_tile_reduce.py +214 -13
  264. warp/tests/unittest_suites.py +6 -14
  265. warp/tests/unittest_utils.py +10 -9
  266. warp/tests/walkthrough_debug.py +3 -1
  267. warp/torch.py +6 -373
  268. warp/types.py +29 -5750
  269. warp/utils.py +10 -1659
  270. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0.dist-info}/METADATA +47 -103
  271. warp_lang-1.10.0.dist-info/RECORD +468 -0
  272. warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
  273. warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
  274. warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
  275. warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
  276. warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
  277. warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
  278. warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
  279. warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
  280. warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
  281. warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
  282. warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
  283. warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
  284. warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
  285. warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
  286. warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
  287. warp/examples/assets/cartpole.urdf +0 -110
  288. warp/examples/assets/crazyflie.usd +0 -0
  289. warp/examples/assets/nv_ant.xml +0 -92
  290. warp/examples/assets/nv_humanoid.xml +0 -183
  291. warp/examples/assets/quadruped.urdf +0 -268
  292. warp/examples/optim/example_bounce.py +0 -266
  293. warp/examples/optim/example_cloth_throw.py +0 -228
  294. warp/examples/optim/example_drone.py +0 -870
  295. warp/examples/optim/example_inverse_kinematics.py +0 -182
  296. warp/examples/optim/example_inverse_kinematics_torch.py +0 -191
  297. warp/examples/optim/example_softbody_properties.py +0 -400
  298. warp/examples/optim/example_spring_cage.py +0 -245
  299. warp/examples/optim/example_trajectory.py +0 -227
  300. warp/examples/sim/example_cartpole.py +0 -143
  301. warp/examples/sim/example_cloth.py +0 -225
  302. warp/examples/sim/example_cloth_self_contact.py +0 -316
  303. warp/examples/sim/example_granular.py +0 -130
  304. warp/examples/sim/example_granular_collision_sdf.py +0 -202
  305. warp/examples/sim/example_jacobian_ik.py +0 -244
  306. warp/examples/sim/example_particle_chain.py +0 -124
  307. warp/examples/sim/example_quadruped.py +0 -203
  308. warp/examples/sim/example_rigid_chain.py +0 -203
  309. warp/examples/sim/example_rigid_contact.py +0 -195
  310. warp/examples/sim/example_rigid_force.py +0 -133
  311. warp/examples/sim/example_rigid_gyroscopic.py +0 -115
  312. warp/examples/sim/example_rigid_soft_contact.py +0 -140
  313. warp/examples/sim/example_soft_body.py +0 -196
  314. warp/examples/tile/example_tile_walker.py +0 -327
  315. warp/sim/__init__.py +0 -74
  316. warp/sim/articulation.py +0 -793
  317. warp/sim/collide.py +0 -2570
  318. warp/sim/graph_coloring.py +0 -307
  319. warp/sim/import_mjcf.py +0 -791
  320. warp/sim/import_snu.py +0 -227
  321. warp/sim/import_urdf.py +0 -579
  322. warp/sim/import_usd.py +0 -898
  323. warp/sim/inertia.py +0 -357
  324. warp/sim/integrator.py +0 -245
  325. warp/sim/integrator_euler.py +0 -2000
  326. warp/sim/integrator_featherstone.py +0 -2101
  327. warp/sim/integrator_vbd.py +0 -2487
  328. warp/sim/integrator_xpbd.py +0 -3295
  329. warp/sim/model.py +0 -4821
  330. warp/sim/particles.py +0 -121
  331. warp/sim/render.py +0 -431
  332. warp/sim/utils.py +0 -431
  333. warp/tests/sim/disabled_kinematics.py +0 -244
  334. warp/tests/sim/test_cloth.py +0 -863
  335. warp/tests/sim/test_collision.py +0 -743
  336. warp/tests/sim/test_coloring.py +0 -347
  337. warp/tests/sim/test_inertia.py +0 -161
  338. warp/tests/sim/test_model.py +0 -226
  339. warp/tests/sim/test_sim_grad.py +0 -287
  340. warp/tests/sim/test_sim_grad_bounce_linear.py +0 -212
  341. warp/tests/sim/test_sim_kinematics.py +0 -98
  342. warp/thirdparty/__init__.py +0 -0
  343. warp_lang-1.9.0.dist-info/RECORD +0 -456
  344. /warp/{fem → _src/fem}/quadrature/__init__.py +0 -0
  345. /warp/{tests/sim → _src/thirdparty}/__init__.py +0 -0
  346. /warp/{thirdparty → _src/thirdparty}/appdirs.py +0 -0
  347. /warp/{thirdparty → _src/thirdparty}/dlpack.py +0 -0
  348. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0.dist-info}/WHEEL +0 -0
  349. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0.dist-info}/licenses/LICENSE.md +0 -0
  350. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0.dist-info}/top_level.txt +0 -0
@@ -16,13 +16,12 @@
16
16
  from typing import Optional
17
17
 
18
18
  import warp as wp
19
- from warp.fem.cache import (
19
+ from warp._src.fem.cache import (
20
20
  TemporaryStore,
21
21
  borrow_temporary,
22
22
  borrow_temporary_like,
23
- cached_arg_value,
24
23
  )
25
- from warp.fem.types import (
24
+ from warp._src.fem.types import (
26
25
  OUTSIDE,
27
26
  Coords,
28
27
  ElementIndex,
@@ -30,9 +29,11 @@ from warp.fem.types import (
30
29
  )
31
30
 
32
31
  from .closest_point import project_on_tet_at_origin, project_on_tri_at_origin
33
- from .element import Tetrahedron, Triangle
32
+ from .element import Element
34
33
  from .geometry import Geometry
35
34
 
35
+ _wp_module_name_ = "warp.fem.geometry.tetmesh"
36
+
36
37
 
37
38
  @wp.struct
38
39
  class TetmeshCellArg:
@@ -108,11 +109,11 @@ class Tetmesh(Geometry):
108
109
  def boundary_side_count(self):
109
110
  return self._boundary_face_indices.shape[0]
110
111
 
111
- def reference_cell(self) -> Tetrahedron:
112
- return Tetrahedron()
112
+ def reference_cell(self) -> Element:
113
+ return Element.TETRAHEDRON
113
114
 
114
- def reference_side(self) -> Triangle:
115
- return Triangle()
115
+ def reference_side(self) -> Element:
116
+ return Element.TRIANGLE
116
117
 
117
118
  @property
118
119
  def tet_edge_indices(self) -> wp.array:
@@ -137,11 +138,6 @@ class Tetmesh(Geometry):
137
138
 
138
139
  # Geometry device interface
139
140
 
140
- def cell_arg_value(self, device) -> CellArg:
141
- args = self.CellArg()
142
- self.fill_cell_arg(args, device)
143
- return args
144
-
145
141
  def fill_cell_arg(self, args: CellArg, device):
146
142
  args.tet_vertex_indices = self.tet_vertex_indices.to(device)
147
143
  args.positions = self.positions.to(device)
@@ -183,12 +179,6 @@ class Tetmesh(Geometry):
183
179
  dist, coords = project_on_tet_at_origin(q, e1, e2, e3)
184
180
  return coords, dist
185
181
 
186
- @cached_arg_value
187
- def side_index_arg_value(self, device) -> SideIndexArg:
188
- args = self.SideIndexArg()
189
- self.fill_side_index_arg(args, device)
190
- return args
191
-
192
182
  def fill_side_index_arg(self, args: SideIndexArg, device):
193
183
  args.boundary_face_indices = self._boundary_face_indices.to(device)
194
184
 
@@ -198,11 +188,6 @@ class Tetmesh(Geometry):
198
188
 
199
189
  return args.boundary_face_indices[boundary_side_index]
200
190
 
201
- def side_arg_value(self, device) -> CellArg:
202
- args = self.SideArg()
203
- self.fill_side_arg(args, device)
204
- return args
205
-
206
191
  def fill_side_arg(self, args: SideArg, device):
207
192
  self.fill_cell_arg(args.cell_arg, device)
208
193
  args.face_vertex_indices = self._face_vertex_indices.to(device)
@@ -325,8 +310,8 @@ class Tetmesh(Geometry):
325
310
  return side_arg.cell_arg
326
311
 
327
312
  def _build_topology(self, temporary_store: TemporaryStore):
328
- from warp.fem.utils import compress_node_indices, host_read_at_index, masked_indices
329
- from warp.utils import array_scan
313
+ from warp._src.fem.utils import compress_node_indices, host_read_at_index, masked_indices
314
+ from warp._src.utils import array_scan
330
315
 
331
316
  device = self.tet_vertex_indices.device
332
317
 
@@ -337,7 +322,7 @@ class Tetmesh(Geometry):
337
322
  self._vertex_tet_indices = vertex_tet_indices.detach()
338
323
 
339
324
  vertex_start_face_count = borrow_temporary(temporary_store, dtype=int, device=device, shape=self.vertex_count())
340
- vertex_start_face_count.array.zero_()
325
+ vertex_start_face_count.zero_()
341
326
  vertex_start_face_offsets = borrow_temporary_like(vertex_start_face_count, temporary_store=temporary_store)
342
327
 
343
328
  vertex_face_other_vs = borrow_temporary(
@@ -350,10 +335,10 @@ class Tetmesh(Geometry):
350
335
  kernel=Tetmesh._count_starting_faces_kernel,
351
336
  device=device,
352
337
  dim=self.cell_count(),
353
- inputs=[self.tet_vertex_indices, vertex_start_face_count.array],
338
+ inputs=[self.tet_vertex_indices, vertex_start_face_count],
354
339
  )
355
340
 
356
- array_scan(in_array=vertex_start_face_count.array, out_array=vertex_start_face_offsets.array, inclusive=False)
341
+ array_scan(in_array=vertex_start_face_count, out_array=vertex_start_face_offsets, inclusive=False)
357
342
 
358
343
  # Count number of unique edges (deduplicate across faces)
359
344
  vertex_unique_face_count = vertex_start_face_count
@@ -365,21 +350,19 @@ class Tetmesh(Geometry):
365
350
  self._vertex_tet_offsets,
366
351
  self._vertex_tet_indices,
367
352
  self.tet_vertex_indices,
368
- vertex_start_face_offsets.array,
369
- vertex_unique_face_count.array,
370
- vertex_face_other_vs.array,
371
- vertex_face_tets.array,
353
+ vertex_start_face_offsets,
354
+ vertex_unique_face_count,
355
+ vertex_face_other_vs,
356
+ vertex_face_tets,
372
357
  ],
373
358
  )
374
359
 
375
360
  vertex_unique_face_offsets = borrow_temporary_like(vertex_start_face_offsets, temporary_store=temporary_store)
376
- array_scan(in_array=vertex_start_face_count.array, out_array=vertex_unique_face_offsets.array, inclusive=False)
361
+ array_scan(in_array=vertex_start_face_count, out_array=vertex_unique_face_offsets, inclusive=False)
377
362
 
378
363
  # Get back edge count to host
379
364
  face_count = int(
380
- host_read_at_index(
381
- vertex_unique_face_offsets.array, self.vertex_count() - 1, temporary_store=temporary_store
382
- )
365
+ host_read_at_index(vertex_unique_face_offsets, self.vertex_count() - 1, temporary_store=temporary_store)
383
366
  )
384
367
 
385
368
  self._face_vertex_indices = wp.empty(shape=(face_count,), dtype=wp.vec3i, device=device)
@@ -393,14 +376,14 @@ class Tetmesh(Geometry):
393
376
  device=device,
394
377
  dim=self.vertex_count(),
395
378
  inputs=[
396
- vertex_start_face_offsets.array,
397
- vertex_unique_face_offsets.array,
398
- vertex_unique_face_count.array,
399
- vertex_face_other_vs.array,
400
- vertex_face_tets.array,
379
+ vertex_start_face_offsets,
380
+ vertex_unique_face_offsets,
381
+ vertex_unique_face_count,
382
+ vertex_face_other_vs,
383
+ vertex_face_tets,
401
384
  self._face_vertex_indices,
402
385
  self._face_tet_indices,
403
- boundary_mask.array,
386
+ boundary_mask,
404
387
  ],
405
388
  )
406
389
 
@@ -418,17 +401,17 @@ class Tetmesh(Geometry):
418
401
  inputs=[self._face_vertex_indices, self._face_tet_indices, self.tet_vertex_indices, self.positions],
419
402
  )
420
403
 
421
- boundary_face_indices, _ = masked_indices(boundary_mask.array)
404
+ boundary_face_indices, _ = masked_indices(boundary_mask)
422
405
  self._boundary_face_indices = boundary_face_indices.detach()
423
406
 
424
407
  def _compute_tet_edges(self, temporary_store: Optional[TemporaryStore] = None):
425
- from warp.fem.utils import host_read_at_index
426
- from warp.utils import array_scan
408
+ from warp._src.fem.utils import host_read_at_index
409
+ from warp._src.utils import array_scan
427
410
 
428
411
  device = self.tet_vertex_indices.device
429
412
 
430
413
  vertex_start_edge_count = borrow_temporary(temporary_store, dtype=int, device=device, shape=self.vertex_count())
431
- vertex_start_edge_count.array.zero_()
414
+ vertex_start_edge_count.zero_()
432
415
  vertex_start_edge_offsets = borrow_temporary_like(vertex_start_edge_count, temporary_store=temporary_store)
433
416
 
434
417
  vertex_edge_ends = borrow_temporary(temporary_store, dtype=int, device=device, shape=(6 * self.cell_count()))
@@ -438,10 +421,10 @@ class Tetmesh(Geometry):
438
421
  kernel=Tetmesh._count_starting_edges_kernel,
439
422
  device=device,
440
423
  dim=self.cell_count(),
441
- inputs=[self.tet_vertex_indices, vertex_start_edge_count.array],
424
+ inputs=[self.tet_vertex_indices, vertex_start_edge_count],
442
425
  )
443
426
 
444
- array_scan(in_array=vertex_start_edge_count.array, out_array=vertex_start_edge_offsets.array, inclusive=False)
427
+ array_scan(in_array=vertex_start_edge_count, out_array=vertex_start_edge_offsets, inclusive=False)
445
428
 
446
429
  # Count number of unique edges (deduplicate across faces)
447
430
  vertex_unique_edge_count = vertex_start_edge_count
@@ -453,22 +436,18 @@ class Tetmesh(Geometry):
453
436
  self._vertex_tet_offsets,
454
437
  self._vertex_tet_indices,
455
438
  self.tet_vertex_indices,
456
- vertex_start_edge_offsets.array,
457
- vertex_unique_edge_count.array,
458
- vertex_edge_ends.array,
439
+ vertex_start_edge_offsets,
440
+ vertex_unique_edge_count,
441
+ vertex_edge_ends,
459
442
  ],
460
443
  )
461
444
 
462
- vertex_unique_edge_offsets = borrow_temporary_like(
463
- vertex_start_edge_offsets.array, temporary_store=temporary_store
464
- )
465
- array_scan(in_array=vertex_start_edge_count.array, out_array=vertex_unique_edge_offsets.array, inclusive=False)
445
+ vertex_unique_edge_offsets = borrow_temporary_like(vertex_start_edge_offsets, temporary_store=temporary_store)
446
+ array_scan(in_array=vertex_start_edge_count, out_array=vertex_unique_edge_offsets, inclusive=False)
466
447
 
467
448
  # Get back edge count to host
468
449
  self._edge_count = int(
469
- host_read_at_index(
470
- vertex_unique_edge_offsets.array, self.vertex_count() - 1, temporary_store=temporary_store
471
- )
450
+ host_read_at_index(vertex_unique_edge_offsets, self.vertex_count() - 1, temporary_store=temporary_store)
472
451
  )
473
452
 
474
453
  self._tet_edge_indices = wp.empty(
@@ -484,10 +463,10 @@ class Tetmesh(Geometry):
484
463
  self._vertex_tet_offsets,
485
464
  self._vertex_tet_indices,
486
465
  self.tet_vertex_indices,
487
- vertex_start_edge_offsets.array,
488
- vertex_unique_edge_offsets.array,
489
- vertex_unique_edge_count.array,
490
- vertex_edge_ends.array,
466
+ vertex_start_edge_offsets,
467
+ vertex_unique_edge_offsets,
468
+ vertex_unique_edge_count,
469
+ vertex_edge_ends,
491
470
  self._tet_edge_indices,
492
471
  ],
493
472
  )
@@ -16,13 +16,12 @@
16
16
  from typing import Any, Optional
17
17
 
18
18
  import warp as wp
19
- from warp.fem.cache import (
19
+ from warp._src.fem.cache import (
20
20
  TemporaryStore,
21
21
  borrow_temporary,
22
22
  borrow_temporary_like,
23
- cached_arg_value,
24
23
  )
25
- from warp.fem.types import (
24
+ from warp._src.fem.types import (
26
25
  OUTSIDE,
27
26
  Coords,
28
27
  ElementIndex,
@@ -30,9 +29,11 @@ from warp.fem.types import (
30
29
  )
31
30
 
32
31
  from .closest_point import project_on_seg_at_origin, project_on_tri_at_origin
33
- from .element import LinearEdge, Triangle
32
+ from .element import Element
34
33
  from .geometry import Geometry
35
34
 
35
+ _wp_module_name_ = "warp.fem.geometry.trimesh"
36
+
36
37
 
37
38
  @wp.struct
38
39
  class TrimeshCellArg:
@@ -103,11 +104,11 @@ class Trimesh(Geometry):
103
104
  def boundary_side_count(self):
104
105
  return self._boundary_edge_indices.shape[0]
105
106
 
106
- def reference_cell(self) -> Triangle:
107
- return Triangle()
107
+ def reference_cell(self) -> Element:
108
+ return Element.TRIANGLE
108
109
 
109
- def reference_side(self) -> LinearEdge:
110
- return LinearEdge()
110
+ def reference_side(self) -> Element:
111
+ return Element.LINE_SEGMENT
111
112
 
112
113
  @property
113
114
  def edge_tri_indices(self) -> wp.array:
@@ -130,30 +131,14 @@ class Trimesh(Geometry):
130
131
  args.edge_vertex_indices = self._edge_vertex_indices.to(device)
131
132
  args.edge_tri_indices = self._edge_tri_indices.to(device)
132
133
 
133
- def cell_arg_value(self, device):
134
- args = self.CellArg()
135
- self.fill_cell_arg(args, device)
136
- return args
137
-
138
134
  def fill_cell_arg(self, args: TrimeshCellArg, device):
139
135
  self._fill_cell_topo_arg(args.topology, device)
140
136
  args.positions = self.positions.to(device)
141
137
 
142
- def side_arg_value(self, device):
143
- args = self.SideArg()
144
- self.fill_side_arg(args, device)
145
- return args
146
-
147
138
  def fill_side_arg(self, args: TrimeshSideArg, device):
148
139
  self._fill_side_topo_arg(args.topology, device)
149
140
  args.positions = self.positions.to(device)
150
141
 
151
- @cached_arg_value
152
- def side_index_arg_value(self, device) -> SideIndexArg:
153
- args = self.SideIndexArg()
154
- self.fill_side_index_arg(args, device)
155
- return args
156
-
157
142
  def fill_side_index_arg(self, args: SideIndexArg, device):
158
143
  args.boundary_edge_indices = self._boundary_edge_indices.to(device)
159
144
 
@@ -216,8 +201,8 @@ class Trimesh(Geometry):
216
201
  return wp.where(tri_coords[start] + tri_coords[end] > 0.999, Coords(tri_coords[end], 0.0, 0.0), Coords(OUTSIDE))
217
202
 
218
203
  def _build_topology(self, temporary_store: TemporaryStore):
219
- from warp.fem.utils import compress_node_indices, host_read_at_index, masked_indices
220
- from warp.utils import array_scan
204
+ from warp._src.fem.utils import compress_node_indices, host_read_at_index, masked_indices
205
+ from warp._src.utils import array_scan
221
206
 
222
207
  device = self.tri_vertex_indices.device
223
208
 
@@ -228,7 +213,7 @@ class Trimesh(Geometry):
228
213
  self._vertex_tri_indices = vertex_tri_indices.detach()
229
214
 
230
215
  vertex_start_edge_count = borrow_temporary(temporary_store, dtype=int, device=device, shape=self.vertex_count())
231
- vertex_start_edge_count.array.zero_()
216
+ vertex_start_edge_count.zero_()
232
217
  vertex_start_edge_offsets = borrow_temporary_like(vertex_start_edge_count, temporary_store=temporary_store)
233
218
 
234
219
  vertex_edge_ends = borrow_temporary(temporary_store, dtype=int, device=device, shape=(3 * self.cell_count()))
@@ -239,10 +224,10 @@ class Trimesh(Geometry):
239
224
  kernel=Trimesh._count_starting_edges_kernel,
240
225
  device=device,
241
226
  dim=self.cell_count(),
242
- inputs=[self.tri_vertex_indices, vertex_start_edge_count.array],
227
+ inputs=[self.tri_vertex_indices, vertex_start_edge_count],
243
228
  )
244
229
 
245
- array_scan(in_array=vertex_start_edge_count.array, out_array=vertex_start_edge_offsets.array, inclusive=False)
230
+ array_scan(in_array=vertex_start_edge_count, out_array=vertex_start_edge_offsets, inclusive=False)
246
231
 
247
232
  # Count number of unique edges (deduplicate across faces)
248
233
  vertex_unique_edge_count = vertex_start_edge_count
@@ -254,21 +239,19 @@ class Trimesh(Geometry):
254
239
  self._vertex_tri_offsets,
255
240
  self._vertex_tri_indices,
256
241
  self.tri_vertex_indices,
257
- vertex_start_edge_offsets.array,
258
- vertex_unique_edge_count.array,
259
- vertex_edge_ends.array,
260
- vertex_edge_tris.array,
242
+ vertex_start_edge_offsets,
243
+ vertex_unique_edge_count,
244
+ vertex_edge_ends,
245
+ vertex_edge_tris,
261
246
  ],
262
247
  )
263
248
 
264
249
  vertex_unique_edge_offsets = borrow_temporary_like(vertex_start_edge_offsets, temporary_store=temporary_store)
265
- array_scan(in_array=vertex_start_edge_count.array, out_array=vertex_unique_edge_offsets.array, inclusive=False)
250
+ array_scan(in_array=vertex_start_edge_count, out_array=vertex_unique_edge_offsets, inclusive=False)
266
251
 
267
252
  # Get back edge count to host
268
253
  edge_count = int(
269
- host_read_at_index(
270
- vertex_unique_edge_offsets.array, self.vertex_count() - 1, temporary_store=temporary_store
271
- )
254
+ host_read_at_index(vertex_unique_edge_offsets, self.vertex_count() - 1, temporary_store=temporary_store)
272
255
  )
273
256
 
274
257
  self._edge_vertex_indices = wp.empty(shape=(edge_count,), dtype=wp.vec2i, device=device)
@@ -282,14 +265,14 @@ class Trimesh(Geometry):
282
265
  device=device,
283
266
  dim=self.vertex_count(),
284
267
  inputs=[
285
- vertex_start_edge_offsets.array,
286
- vertex_unique_edge_offsets.array,
287
- vertex_unique_edge_count.array,
288
- vertex_edge_ends.array,
289
- vertex_edge_tris.array,
268
+ vertex_start_edge_offsets,
269
+ vertex_unique_edge_offsets,
270
+ vertex_unique_edge_count,
271
+ vertex_edge_ends,
272
+ vertex_edge_tris,
290
273
  self._edge_vertex_indices,
291
274
  self._edge_tri_indices,
292
- boundary_mask.array,
275
+ boundary_mask,
293
276
  ],
294
277
  )
295
278
 
@@ -299,7 +282,7 @@ class Trimesh(Geometry):
299
282
  vertex_edge_ends.release()
300
283
  vertex_edge_tris.release()
301
284
 
302
- boundary_edge_indices, _ = masked_indices(boundary_mask.array, temporary_store=temporary_store)
285
+ boundary_edge_indices, _ = masked_indices(boundary_mask, temporary_store=temporary_store)
303
286
  self._boundary_edge_indices = boundary_edge_indices.detach()
304
287
 
305
288
  boundary_mask.release()
@@ -467,7 +450,7 @@ class Trimesh(Geometry):
467
450
  q = pos - p0
468
451
  e = args.positions[edge_idx[1]] - p0
469
452
 
470
- dist, t = project_on_seg_at_origin(q, e, wp.lengh_sq(e))
453
+ dist, t = project_on_seg_at_origin(q, e, wp.length_sq(e))
471
454
  return Coords(t, 0.0, 0.0), dist
472
455
 
473
456
  @wp.func