warp-lang 1.7.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 (429) hide show
  1. warp/__init__.py +139 -0
  2. warp/__init__.pyi +1 -0
  3. warp/autograd.py +1142 -0
  4. warp/bin/warp-clang.so +0 -0
  5. warp/bin/warp.so +0 -0
  6. warp/build.py +557 -0
  7. warp/build_dll.py +405 -0
  8. warp/builtins.py +6855 -0
  9. warp/codegen.py +3969 -0
  10. warp/config.py +158 -0
  11. warp/constants.py +57 -0
  12. warp/context.py +6812 -0
  13. warp/dlpack.py +462 -0
  14. warp/examples/__init__.py +24 -0
  15. warp/examples/assets/bear.usd +0 -0
  16. warp/examples/assets/bunny.usd +0 -0
  17. warp/examples/assets/cartpole.urdf +110 -0
  18. warp/examples/assets/crazyflie.usd +0 -0
  19. warp/examples/assets/cube.usd +0 -0
  20. warp/examples/assets/nonuniform.usd +0 -0
  21. warp/examples/assets/nv_ant.xml +92 -0
  22. warp/examples/assets/nv_humanoid.xml +183 -0
  23. warp/examples/assets/nvidia_logo.png +0 -0
  24. warp/examples/assets/pixel.jpg +0 -0
  25. warp/examples/assets/quadruped.urdf +268 -0
  26. warp/examples/assets/rocks.nvdb +0 -0
  27. warp/examples/assets/rocks.usd +0 -0
  28. warp/examples/assets/sphere.usd +0 -0
  29. warp/examples/assets/square_cloth.usd +0 -0
  30. warp/examples/benchmarks/benchmark_api.py +389 -0
  31. warp/examples/benchmarks/benchmark_cloth.py +296 -0
  32. warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
  33. warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
  34. warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
  35. warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
  36. warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
  37. warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
  38. warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
  39. warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
  40. warp/examples/benchmarks/benchmark_gemm.py +164 -0
  41. warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
  42. warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
  43. warp/examples/benchmarks/benchmark_launches.py +301 -0
  44. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  45. warp/examples/browse.py +37 -0
  46. warp/examples/core/example_cupy.py +86 -0
  47. warp/examples/core/example_dem.py +241 -0
  48. warp/examples/core/example_fluid.py +299 -0
  49. warp/examples/core/example_graph_capture.py +150 -0
  50. warp/examples/core/example_marching_cubes.py +194 -0
  51. warp/examples/core/example_mesh.py +180 -0
  52. warp/examples/core/example_mesh_intersect.py +211 -0
  53. warp/examples/core/example_nvdb.py +182 -0
  54. warp/examples/core/example_raycast.py +111 -0
  55. warp/examples/core/example_raymarch.py +205 -0
  56. warp/examples/core/example_render_opengl.py +193 -0
  57. warp/examples/core/example_sample_mesh.py +300 -0
  58. warp/examples/core/example_sph.py +411 -0
  59. warp/examples/core/example_torch.py +211 -0
  60. warp/examples/core/example_wave.py +269 -0
  61. warp/examples/fem/example_adaptive_grid.py +286 -0
  62. warp/examples/fem/example_apic_fluid.py +423 -0
  63. warp/examples/fem/example_burgers.py +261 -0
  64. warp/examples/fem/example_convection_diffusion.py +178 -0
  65. warp/examples/fem/example_convection_diffusion_dg.py +204 -0
  66. warp/examples/fem/example_deformed_geometry.py +172 -0
  67. warp/examples/fem/example_diffusion.py +196 -0
  68. warp/examples/fem/example_diffusion_3d.py +225 -0
  69. warp/examples/fem/example_diffusion_mgpu.py +220 -0
  70. warp/examples/fem/example_distortion_energy.py +228 -0
  71. warp/examples/fem/example_magnetostatics.py +240 -0
  72. warp/examples/fem/example_mixed_elasticity.py +291 -0
  73. warp/examples/fem/example_navier_stokes.py +261 -0
  74. warp/examples/fem/example_nonconforming_contact.py +298 -0
  75. warp/examples/fem/example_stokes.py +213 -0
  76. warp/examples/fem/example_stokes_transfer.py +262 -0
  77. warp/examples/fem/example_streamlines.py +352 -0
  78. warp/examples/fem/utils.py +1000 -0
  79. warp/examples/interop/example_jax_callable.py +116 -0
  80. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  81. warp/examples/interop/example_jax_kernel.py +205 -0
  82. warp/examples/optim/example_bounce.py +266 -0
  83. warp/examples/optim/example_cloth_throw.py +228 -0
  84. warp/examples/optim/example_diffray.py +561 -0
  85. warp/examples/optim/example_drone.py +870 -0
  86. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  87. warp/examples/optim/example_inverse_kinematics.py +182 -0
  88. warp/examples/optim/example_inverse_kinematics_torch.py +191 -0
  89. warp/examples/optim/example_softbody_properties.py +400 -0
  90. warp/examples/optim/example_spring_cage.py +245 -0
  91. warp/examples/optim/example_trajectory.py +227 -0
  92. warp/examples/sim/example_cartpole.py +143 -0
  93. warp/examples/sim/example_cloth.py +225 -0
  94. warp/examples/sim/example_cloth_self_contact.py +322 -0
  95. warp/examples/sim/example_granular.py +130 -0
  96. warp/examples/sim/example_granular_collision_sdf.py +202 -0
  97. warp/examples/sim/example_jacobian_ik.py +244 -0
  98. warp/examples/sim/example_particle_chain.py +124 -0
  99. warp/examples/sim/example_quadruped.py +203 -0
  100. warp/examples/sim/example_rigid_chain.py +203 -0
  101. warp/examples/sim/example_rigid_contact.py +195 -0
  102. warp/examples/sim/example_rigid_force.py +133 -0
  103. warp/examples/sim/example_rigid_gyroscopic.py +115 -0
  104. warp/examples/sim/example_rigid_soft_contact.py +140 -0
  105. warp/examples/sim/example_soft_body.py +196 -0
  106. warp/examples/tile/example_tile_cholesky.py +87 -0
  107. warp/examples/tile/example_tile_convolution.py +66 -0
  108. warp/examples/tile/example_tile_fft.py +55 -0
  109. warp/examples/tile/example_tile_filtering.py +113 -0
  110. warp/examples/tile/example_tile_matmul.py +85 -0
  111. warp/examples/tile/example_tile_mlp.py +383 -0
  112. warp/examples/tile/example_tile_nbody.py +199 -0
  113. warp/examples/tile/example_tile_walker.py +327 -0
  114. warp/fabric.py +355 -0
  115. warp/fem/__init__.py +106 -0
  116. warp/fem/adaptivity.py +508 -0
  117. warp/fem/cache.py +572 -0
  118. warp/fem/dirichlet.py +202 -0
  119. warp/fem/domain.py +411 -0
  120. warp/fem/field/__init__.py +125 -0
  121. warp/fem/field/field.py +619 -0
  122. warp/fem/field/nodal_field.py +326 -0
  123. warp/fem/field/restriction.py +37 -0
  124. warp/fem/field/virtual.py +848 -0
  125. warp/fem/geometry/__init__.py +32 -0
  126. warp/fem/geometry/adaptive_nanogrid.py +857 -0
  127. warp/fem/geometry/closest_point.py +84 -0
  128. warp/fem/geometry/deformed_geometry.py +221 -0
  129. warp/fem/geometry/element.py +776 -0
  130. warp/fem/geometry/geometry.py +362 -0
  131. warp/fem/geometry/grid_2d.py +392 -0
  132. warp/fem/geometry/grid_3d.py +452 -0
  133. warp/fem/geometry/hexmesh.py +911 -0
  134. warp/fem/geometry/nanogrid.py +571 -0
  135. warp/fem/geometry/partition.py +389 -0
  136. warp/fem/geometry/quadmesh.py +663 -0
  137. warp/fem/geometry/tetmesh.py +855 -0
  138. warp/fem/geometry/trimesh.py +806 -0
  139. warp/fem/integrate.py +2335 -0
  140. warp/fem/linalg.py +419 -0
  141. warp/fem/operator.py +293 -0
  142. warp/fem/polynomial.py +229 -0
  143. warp/fem/quadrature/__init__.py +17 -0
  144. warp/fem/quadrature/pic_quadrature.py +299 -0
  145. warp/fem/quadrature/quadrature.py +591 -0
  146. warp/fem/space/__init__.py +228 -0
  147. warp/fem/space/basis_function_space.py +468 -0
  148. warp/fem/space/basis_space.py +667 -0
  149. warp/fem/space/dof_mapper.py +251 -0
  150. warp/fem/space/function_space.py +309 -0
  151. warp/fem/space/grid_2d_function_space.py +177 -0
  152. warp/fem/space/grid_3d_function_space.py +227 -0
  153. warp/fem/space/hexmesh_function_space.py +257 -0
  154. warp/fem/space/nanogrid_function_space.py +201 -0
  155. warp/fem/space/partition.py +367 -0
  156. warp/fem/space/quadmesh_function_space.py +223 -0
  157. warp/fem/space/restriction.py +179 -0
  158. warp/fem/space/shape/__init__.py +143 -0
  159. warp/fem/space/shape/cube_shape_function.py +1105 -0
  160. warp/fem/space/shape/shape_function.py +133 -0
  161. warp/fem/space/shape/square_shape_function.py +926 -0
  162. warp/fem/space/shape/tet_shape_function.py +834 -0
  163. warp/fem/space/shape/triangle_shape_function.py +672 -0
  164. warp/fem/space/tetmesh_function_space.py +271 -0
  165. warp/fem/space/topology.py +424 -0
  166. warp/fem/space/trimesh_function_space.py +194 -0
  167. warp/fem/types.py +99 -0
  168. warp/fem/utils.py +420 -0
  169. warp/jax.py +187 -0
  170. warp/jax_experimental/__init__.py +16 -0
  171. warp/jax_experimental/custom_call.py +351 -0
  172. warp/jax_experimental/ffi.py +698 -0
  173. warp/jax_experimental/xla_ffi.py +602 -0
  174. warp/math.py +244 -0
  175. warp/native/array.h +1145 -0
  176. warp/native/builtin.h +1800 -0
  177. warp/native/bvh.cpp +492 -0
  178. warp/native/bvh.cu +791 -0
  179. warp/native/bvh.h +554 -0
  180. warp/native/clang/clang.cpp +536 -0
  181. warp/native/coloring.cpp +613 -0
  182. warp/native/crt.cpp +51 -0
  183. warp/native/crt.h +362 -0
  184. warp/native/cuda_crt.h +1058 -0
  185. warp/native/cuda_util.cpp +646 -0
  186. warp/native/cuda_util.h +307 -0
  187. warp/native/error.cpp +77 -0
  188. warp/native/error.h +36 -0
  189. warp/native/exports.h +1878 -0
  190. warp/native/fabric.h +245 -0
  191. warp/native/hashgrid.cpp +311 -0
  192. warp/native/hashgrid.cu +87 -0
  193. warp/native/hashgrid.h +240 -0
  194. warp/native/initializer_array.h +41 -0
  195. warp/native/intersect.h +1230 -0
  196. warp/native/intersect_adj.h +375 -0
  197. warp/native/intersect_tri.h +339 -0
  198. warp/native/marching.cpp +19 -0
  199. warp/native/marching.cu +514 -0
  200. warp/native/marching.h +19 -0
  201. warp/native/mat.h +2220 -0
  202. warp/native/mathdx.cpp +87 -0
  203. warp/native/matnn.h +343 -0
  204. warp/native/mesh.cpp +266 -0
  205. warp/native/mesh.cu +404 -0
  206. warp/native/mesh.h +1980 -0
  207. warp/native/nanovdb/GridHandle.h +366 -0
  208. warp/native/nanovdb/HostBuffer.h +590 -0
  209. warp/native/nanovdb/NanoVDB.h +6624 -0
  210. warp/native/nanovdb/PNanoVDB.h +3390 -0
  211. warp/native/noise.h +859 -0
  212. warp/native/quat.h +1371 -0
  213. warp/native/rand.h +342 -0
  214. warp/native/range.h +139 -0
  215. warp/native/reduce.cpp +174 -0
  216. warp/native/reduce.cu +364 -0
  217. warp/native/runlength_encode.cpp +79 -0
  218. warp/native/runlength_encode.cu +61 -0
  219. warp/native/scan.cpp +47 -0
  220. warp/native/scan.cu +53 -0
  221. warp/native/scan.h +23 -0
  222. warp/native/solid_angle.h +466 -0
  223. warp/native/sort.cpp +251 -0
  224. warp/native/sort.cu +277 -0
  225. warp/native/sort.h +33 -0
  226. warp/native/sparse.cpp +378 -0
  227. warp/native/sparse.cu +524 -0
  228. warp/native/spatial.h +657 -0
  229. warp/native/svd.h +702 -0
  230. warp/native/temp_buffer.h +46 -0
  231. warp/native/tile.h +2584 -0
  232. warp/native/tile_reduce.h +264 -0
  233. warp/native/vec.h +1426 -0
  234. warp/native/volume.cpp +501 -0
  235. warp/native/volume.cu +67 -0
  236. warp/native/volume.h +969 -0
  237. warp/native/volume_builder.cu +477 -0
  238. warp/native/volume_builder.h +52 -0
  239. warp/native/volume_impl.h +70 -0
  240. warp/native/warp.cpp +1082 -0
  241. warp/native/warp.cu +3636 -0
  242. warp/native/warp.h +381 -0
  243. warp/optim/__init__.py +17 -0
  244. warp/optim/adam.py +163 -0
  245. warp/optim/linear.py +1137 -0
  246. warp/optim/sgd.py +112 -0
  247. warp/paddle.py +407 -0
  248. warp/render/__init__.py +18 -0
  249. warp/render/render_opengl.py +3518 -0
  250. warp/render/render_usd.py +784 -0
  251. warp/render/utils.py +160 -0
  252. warp/sim/__init__.py +65 -0
  253. warp/sim/articulation.py +793 -0
  254. warp/sim/collide.py +2395 -0
  255. warp/sim/graph_coloring.py +300 -0
  256. warp/sim/import_mjcf.py +790 -0
  257. warp/sim/import_snu.py +227 -0
  258. warp/sim/import_urdf.py +579 -0
  259. warp/sim/import_usd.py +894 -0
  260. warp/sim/inertia.py +324 -0
  261. warp/sim/integrator.py +242 -0
  262. warp/sim/integrator_euler.py +1997 -0
  263. warp/sim/integrator_featherstone.py +2101 -0
  264. warp/sim/integrator_vbd.py +2048 -0
  265. warp/sim/integrator_xpbd.py +3292 -0
  266. warp/sim/model.py +4791 -0
  267. warp/sim/particles.py +121 -0
  268. warp/sim/render.py +427 -0
  269. warp/sim/utils.py +428 -0
  270. warp/sparse.py +2057 -0
  271. warp/stubs.py +3333 -0
  272. warp/tape.py +1203 -0
  273. warp/tests/__init__.py +1 -0
  274. warp/tests/__main__.py +4 -0
  275. warp/tests/assets/curlnoise_golden.npy +0 -0
  276. warp/tests/assets/mlp_golden.npy +0 -0
  277. warp/tests/assets/pixel.npy +0 -0
  278. warp/tests/assets/pnoise_golden.npy +0 -0
  279. warp/tests/assets/spiky.usd +0 -0
  280. warp/tests/assets/test_grid.nvdb +0 -0
  281. warp/tests/assets/test_index_grid.nvdb +0 -0
  282. warp/tests/assets/test_int32_grid.nvdb +0 -0
  283. warp/tests/assets/test_vec_grid.nvdb +0 -0
  284. warp/tests/assets/torus.nvdb +0 -0
  285. warp/tests/assets/torus.usda +105 -0
  286. warp/tests/aux_test_class_kernel.py +34 -0
  287. warp/tests/aux_test_compile_consts_dummy.py +18 -0
  288. warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
  289. warp/tests/aux_test_dependent.py +29 -0
  290. warp/tests/aux_test_grad_customs.py +29 -0
  291. warp/tests/aux_test_instancing_gc.py +26 -0
  292. warp/tests/aux_test_module_unload.py +23 -0
  293. warp/tests/aux_test_name_clash1.py +40 -0
  294. warp/tests/aux_test_name_clash2.py +40 -0
  295. warp/tests/aux_test_reference.py +9 -0
  296. warp/tests/aux_test_reference_reference.py +8 -0
  297. warp/tests/aux_test_square.py +16 -0
  298. warp/tests/aux_test_unresolved_func.py +22 -0
  299. warp/tests/aux_test_unresolved_symbol.py +22 -0
  300. warp/tests/cuda/__init__.py +0 -0
  301. warp/tests/cuda/test_async.py +676 -0
  302. warp/tests/cuda/test_ipc.py +124 -0
  303. warp/tests/cuda/test_mempool.py +233 -0
  304. warp/tests/cuda/test_multigpu.py +169 -0
  305. warp/tests/cuda/test_peer.py +139 -0
  306. warp/tests/cuda/test_pinned.py +84 -0
  307. warp/tests/cuda/test_streams.py +634 -0
  308. warp/tests/geometry/__init__.py +0 -0
  309. warp/tests/geometry/test_bvh.py +200 -0
  310. warp/tests/geometry/test_hash_grid.py +221 -0
  311. warp/tests/geometry/test_marching_cubes.py +74 -0
  312. warp/tests/geometry/test_mesh.py +316 -0
  313. warp/tests/geometry/test_mesh_query_aabb.py +399 -0
  314. warp/tests/geometry/test_mesh_query_point.py +932 -0
  315. warp/tests/geometry/test_mesh_query_ray.py +311 -0
  316. warp/tests/geometry/test_volume.py +1103 -0
  317. warp/tests/geometry/test_volume_write.py +346 -0
  318. warp/tests/interop/__init__.py +0 -0
  319. warp/tests/interop/test_dlpack.py +729 -0
  320. warp/tests/interop/test_jax.py +371 -0
  321. warp/tests/interop/test_paddle.py +800 -0
  322. warp/tests/interop/test_torch.py +1001 -0
  323. warp/tests/run_coverage_serial.py +39 -0
  324. warp/tests/sim/__init__.py +0 -0
  325. warp/tests/sim/disabled_kinematics.py +244 -0
  326. warp/tests/sim/flaky_test_sim_grad.py +290 -0
  327. warp/tests/sim/test_collision.py +604 -0
  328. warp/tests/sim/test_coloring.py +258 -0
  329. warp/tests/sim/test_model.py +224 -0
  330. warp/tests/sim/test_sim_grad_bounce_linear.py +212 -0
  331. warp/tests/sim/test_sim_kinematics.py +98 -0
  332. warp/tests/sim/test_vbd.py +597 -0
  333. warp/tests/test_adam.py +163 -0
  334. warp/tests/test_arithmetic.py +1096 -0
  335. warp/tests/test_array.py +2972 -0
  336. warp/tests/test_array_reduce.py +156 -0
  337. warp/tests/test_assert.py +250 -0
  338. warp/tests/test_atomic.py +153 -0
  339. warp/tests/test_bool.py +220 -0
  340. warp/tests/test_builtins_resolution.py +1298 -0
  341. warp/tests/test_closest_point_edge_edge.py +327 -0
  342. warp/tests/test_codegen.py +810 -0
  343. warp/tests/test_codegen_instancing.py +1495 -0
  344. warp/tests/test_compile_consts.py +215 -0
  345. warp/tests/test_conditional.py +252 -0
  346. warp/tests/test_context.py +42 -0
  347. warp/tests/test_copy.py +238 -0
  348. warp/tests/test_ctypes.py +638 -0
  349. warp/tests/test_dense.py +73 -0
  350. warp/tests/test_devices.py +97 -0
  351. warp/tests/test_examples.py +482 -0
  352. warp/tests/test_fabricarray.py +996 -0
  353. warp/tests/test_fast_math.py +74 -0
  354. warp/tests/test_fem.py +2003 -0
  355. warp/tests/test_fp16.py +136 -0
  356. warp/tests/test_func.py +454 -0
  357. warp/tests/test_future_annotations.py +98 -0
  358. warp/tests/test_generics.py +656 -0
  359. warp/tests/test_grad.py +893 -0
  360. warp/tests/test_grad_customs.py +339 -0
  361. warp/tests/test_grad_debug.py +341 -0
  362. warp/tests/test_implicit_init.py +411 -0
  363. warp/tests/test_import.py +45 -0
  364. warp/tests/test_indexedarray.py +1140 -0
  365. warp/tests/test_intersect.py +73 -0
  366. warp/tests/test_iter.py +76 -0
  367. warp/tests/test_large.py +177 -0
  368. warp/tests/test_launch.py +411 -0
  369. warp/tests/test_lerp.py +151 -0
  370. warp/tests/test_linear_solvers.py +193 -0
  371. warp/tests/test_lvalue.py +427 -0
  372. warp/tests/test_mat.py +2089 -0
  373. warp/tests/test_mat_lite.py +122 -0
  374. warp/tests/test_mat_scalar_ops.py +2913 -0
  375. warp/tests/test_math.py +178 -0
  376. warp/tests/test_mlp.py +282 -0
  377. warp/tests/test_module_hashing.py +258 -0
  378. warp/tests/test_modules_lite.py +44 -0
  379. warp/tests/test_noise.py +252 -0
  380. warp/tests/test_operators.py +299 -0
  381. warp/tests/test_options.py +129 -0
  382. warp/tests/test_overwrite.py +551 -0
  383. warp/tests/test_print.py +339 -0
  384. warp/tests/test_quat.py +2315 -0
  385. warp/tests/test_rand.py +339 -0
  386. warp/tests/test_reload.py +302 -0
  387. warp/tests/test_rounding.py +185 -0
  388. warp/tests/test_runlength_encode.py +196 -0
  389. warp/tests/test_scalar_ops.py +105 -0
  390. warp/tests/test_smoothstep.py +108 -0
  391. warp/tests/test_snippet.py +318 -0
  392. warp/tests/test_sparse.py +582 -0
  393. warp/tests/test_spatial.py +2229 -0
  394. warp/tests/test_special_values.py +361 -0
  395. warp/tests/test_static.py +592 -0
  396. warp/tests/test_struct.py +734 -0
  397. warp/tests/test_tape.py +204 -0
  398. warp/tests/test_transient_module.py +93 -0
  399. warp/tests/test_triangle_closest_point.py +145 -0
  400. warp/tests/test_types.py +562 -0
  401. warp/tests/test_utils.py +588 -0
  402. warp/tests/test_vec.py +1487 -0
  403. warp/tests/test_vec_lite.py +80 -0
  404. warp/tests/test_vec_scalar_ops.py +2327 -0
  405. warp/tests/test_verify_fp.py +100 -0
  406. warp/tests/tile/__init__.py +0 -0
  407. warp/tests/tile/test_tile.py +780 -0
  408. warp/tests/tile/test_tile_load.py +407 -0
  409. warp/tests/tile/test_tile_mathdx.py +208 -0
  410. warp/tests/tile/test_tile_mlp.py +402 -0
  411. warp/tests/tile/test_tile_reduce.py +447 -0
  412. warp/tests/tile/test_tile_shared_memory.py +247 -0
  413. warp/tests/tile/test_tile_view.py +173 -0
  414. warp/tests/unittest_serial.py +47 -0
  415. warp/tests/unittest_suites.py +427 -0
  416. warp/tests/unittest_utils.py +468 -0
  417. warp/tests/walkthrough_debug.py +93 -0
  418. warp/thirdparty/__init__.py +0 -0
  419. warp/thirdparty/appdirs.py +598 -0
  420. warp/thirdparty/dlpack.py +145 -0
  421. warp/thirdparty/unittest_parallel.py +570 -0
  422. warp/torch.py +391 -0
  423. warp/types.py +5230 -0
  424. warp/utils.py +1137 -0
  425. warp_lang-1.7.0.dist-info/METADATA +516 -0
  426. warp_lang-1.7.0.dist-info/RECORD +429 -0
  427. warp_lang-1.7.0.dist-info/WHEEL +5 -0
  428. warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
  429. warp_lang-1.7.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,84 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from typing import Any
17
+
18
+ import warp as wp
19
+ from warp.fem.types import Coords
20
+
21
+
22
+ @wp.func
23
+ def project_on_seg_at_origin(q: Any, seg: Any, len_sq: float):
24
+ s = wp.clamp(wp.dot(q, seg) / len_sq, 0.0, 1.0)
25
+ return wp.length_sq(q - s * seg), s
26
+
27
+
28
+ @wp.func
29
+ def project_on_tri_at_origin(q: Any, e1: Any, e2: Any):
30
+ e1e1 = wp.dot(e1, e1)
31
+ e1e2 = wp.dot(e1, e2)
32
+ e2e2 = wp.dot(e2, e2)
33
+
34
+ det = e1e1 * e2e2 - e1e2 * e1e2
35
+
36
+ if det > e1e1 * e2e2 * 1.0e-6:
37
+ e1p = wp.dot(e1, q)
38
+ e2p = wp.dot(e2, q)
39
+
40
+ s = (e2e2 * e1p - e1e2 * e2p) / det
41
+ t = (e1e1 * e2p - e1e2 * e1p) / det
42
+
43
+ if s >= 0.0 and t >= 0.0 and s + t <= 1.0:
44
+ # point inside triangle (distance can be non-zero in 3D case)
45
+ return wp.length_sq(q - s * e1 - t * e2), Coords(1.0 - s - t, s, t)
46
+
47
+ d1, s1 = project_on_seg_at_origin(q, e1, e1e1)
48
+ d2, s2 = project_on_seg_at_origin(q, e2, e2e2)
49
+ d12, s12 = project_on_seg_at_origin(q - e1, e2 - e1, wp.length_sq(e2 - e1))
50
+
51
+ if d1 <= d2:
52
+ if d1 <= d12:
53
+ return d1, Coords(1.0 - s1, s1, 0.0)
54
+ elif d2 <= d12:
55
+ return d2, Coords(1.0 - s2, 0.0, s2)
56
+
57
+ return d12, Coords(0.0, 1.0 - s12, s12)
58
+
59
+
60
+ @wp.func
61
+ def project_on_tet_at_origin(q: wp.vec3, e1: wp.vec3, e2: wp.vec3, e3: wp.vec3):
62
+ mat = wp.inverse(wp.matrix_from_cols(e1, e2, e3))
63
+ coords = mat * q
64
+
65
+ if wp.min(coords) >= 0.0 and coords[0] + coords[1] + coords[2] <= 1.0:
66
+ return 0.0, coords
67
+
68
+ # Not inside tet, compare closest point on each tri
69
+
70
+ d12, s12 = project_on_tri_at_origin(q, e1, e2)
71
+ d23, s23 = project_on_tri_at_origin(q, e2, e3)
72
+ d31, s31 = project_on_tri_at_origin(q, e3, e1)
73
+ d123, s123 = project_on_tri_at_origin(q - e1, e2 - e1, e3 - e1)
74
+
75
+ dmin = wp.min(wp.vec4(d12, d23, d31, d123))
76
+
77
+ if dmin == d12:
78
+ return dmin, Coords(s12[1], s12[2], 0.0)
79
+ elif dmin == d23:
80
+ return dmin, Coords(0.0, s23[1], s23[2])
81
+ elif dmin == d31:
82
+ return dmin, Coords(s31[2], 0.0, s31[1])
83
+ else:
84
+ return dmin, s123
@@ -0,0 +1,221 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ import warp as wp
17
+ from warp.fem import cache
18
+ from warp.fem.types import Coords, ElementIndex, Sample
19
+
20
+ from .geometry import Geometry
21
+
22
+ _mat32 = wp.mat(shape=(3, 2), dtype=float)
23
+
24
+
25
+ class DeformedGeometry(Geometry):
26
+ def __init__(self, field: "wp.fem.field.GeometryField", relative: bool = True):
27
+ """Constructs a Deformed Geometry from a displacement or absolute position field defined over a base geometry.
28
+ The deformation field does not need to be isoparameteric.
29
+
30
+ See also: :meth:`warp.fem.DiscreteField.make_deformed_geometry`
31
+ """
32
+
33
+ from warp.fem.field import DiscreteField, GeometryField
34
+
35
+ if isinstance(field, DiscreteField):
36
+ if (
37
+ not wp.types.type_is_vector(field.dtype)
38
+ or wp.types.type_length(field.dtype) != field.geometry.dimension
39
+ ):
40
+ raise ValueError(
41
+ "Invalid value type for position field, must be vector-valued with same dimension as underlying geometry"
42
+ )
43
+ if field.eval_grad_inner is None:
44
+ raise ValueError("Gradient evaluation is not supported on the passed field")
45
+
46
+ self._relative = relative
47
+
48
+ self.field: GeometryField = field
49
+ self.dimension = self.base.dimension
50
+
51
+ self.CellArg = self.field.ElementEvalArg
52
+
53
+ self.field_trace = field.trace()
54
+ self.SideArg = self._make_side_arg()
55
+ self.SideIndexArg = self.base.SideIndexArg
56
+
57
+ self.cell_count = self.base.cell_count
58
+ self.vertex_count = self.base.vertex_count
59
+ self.side_count = self.base.side_count
60
+ self.boundary_side_count = self.base.boundary_side_count
61
+ self.reference_cell = self.base.reference_cell
62
+ self.reference_side = self.base.reference_side
63
+
64
+ self.side_index_arg_value = self.base.side_index_arg_value
65
+
66
+ self.cell_position = self._make_cell_position()
67
+ self.cell_deformation_gradient = self._make_cell_deformation_gradient()
68
+
69
+ self.boundary_side_index = self.base.boundary_side_index
70
+
71
+ self.side_to_cell_arg = self._make_side_to_cell_arg()
72
+ self.side_position = self._make_side_position()
73
+ self.side_deformation_gradient = self._make_side_deformation_gradient()
74
+ self.side_inner_cell_index = self._make_side_inner_cell_index()
75
+ self.side_outer_cell_index = self._make_side_outer_cell_index()
76
+ self.side_inner_cell_coords = self._make_side_inner_cell_coords()
77
+ self.side_outer_cell_coords = self._make_side_outer_cell_coords()
78
+ self.side_from_cell_coords = self._make_side_from_cell_coords()
79
+
80
+ self._make_default_dependent_implementations()
81
+
82
+ @property
83
+ def name(self) -> str:
84
+ return f"DefGeo_{self.field.name}_{'rel' if self._relative else 'abs'}"
85
+
86
+ @property
87
+ def base(self) -> Geometry:
88
+ return self.field.geometry.base
89
+
90
+ # Geometry device interface
91
+
92
+ @cache.cached_arg_value
93
+ def cell_arg_value(self, device) -> "DeformedGeometry.CellArg":
94
+ args = self.CellArg()
95
+
96
+ args.elt_arg = self.base.cell_arg_value(device)
97
+ args.eval_arg = self.field.eval_arg_value(device)
98
+
99
+ return args
100
+
101
+ def _make_cell_position(self):
102
+ @cache.dynamic_func(suffix=self.name)
103
+ def cell_position_absolute(cell_arg: self.CellArg, s: Sample):
104
+ return self.field.eval_inner(cell_arg, s)
105
+
106
+ @cache.dynamic_func(suffix=self.name)
107
+ def cell_position(cell_arg: self.CellArg, s: Sample):
108
+ return self.field.eval_inner(cell_arg, s) + self.base.cell_position(cell_arg.elt_arg, s)
109
+
110
+ return cell_position if self._relative else cell_position_absolute
111
+
112
+ def _make_cell_deformation_gradient(self):
113
+ @cache.dynamic_func(suffix=self.name)
114
+ def cell_deformation_gradient_absolute(cell_arg: self.CellArg, s: Sample):
115
+ return self.field.eval_reference_grad_inner(cell_arg, s)
116
+
117
+ @cache.dynamic_func(suffix=self.name)
118
+ def cell_deformation_gradient(cell_arg: self.CellArg, s: Sample):
119
+ return self.field.eval_reference_grad_inner(cell_arg, s) + self.base.cell_deformation_gradient(
120
+ cell_arg.elt_arg, s
121
+ )
122
+
123
+ return cell_deformation_gradient if self._relative else cell_deformation_gradient_absolute
124
+
125
+ def _make_side_arg(self):
126
+ @cache.dynamic_struct(suffix=self.name)
127
+ class SideArg:
128
+ base_arg: self.base.SideArg
129
+ trace_arg: self.field_trace.EvalArg
130
+ field_arg: self.field.EvalArg
131
+
132
+ return SideArg
133
+
134
+ @cache.cached_arg_value
135
+ def side_arg_value(self, device) -> "DeformedGeometry.SideArg":
136
+ args = self.SideArg()
137
+
138
+ args.base_arg = self.base.side_arg_value(device)
139
+ args.field_arg = self.field.eval_arg_value(device)
140
+ args.trace_arg = self.field_trace.eval_arg_value(device)
141
+
142
+ return args
143
+
144
+ def _make_side_position(self):
145
+ @cache.dynamic_func(suffix=self.name)
146
+ def side_position_absolute(args: self.SideArg, s: Sample):
147
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
148
+ return self.field_trace.eval_inner(trace_arg, s)
149
+
150
+ @cache.dynamic_func(suffix=self.name)
151
+ def side_position(args: self.SideArg, s: Sample):
152
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
153
+ return self.field_trace.eval_inner(trace_arg, s) + self.base.side_position(args.base_arg, s)
154
+
155
+ return side_position if self._relative else side_position_absolute
156
+
157
+ def _make_side_deformation_gradient(self):
158
+ @cache.dynamic_func(suffix=self.name)
159
+ def side_deformation_gradient_absolute(args: self.SideArg, s: Sample):
160
+ base_def_grad = self.base.side_deformation_gradient(args.base_arg, s)
161
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
162
+
163
+ Du = self.field_trace.eval_grad_inner(trace_arg, s)
164
+ return Du * base_def_grad
165
+
166
+ @cache.dynamic_func(suffix=self.name)
167
+ def side_deformation_gradient(args: self.SideArg, s: Sample):
168
+ base_def_grad = self.base.side_deformation_gradient(args.base_arg, s)
169
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
170
+
171
+ Du = self.field_trace.eval_grad_inner(trace_arg, s)
172
+ return base_def_grad + Du * base_def_grad
173
+
174
+ return side_deformation_gradient if self._relative else side_deformation_gradient_absolute
175
+
176
+ def _make_side_inner_cell_index(self):
177
+ @cache.dynamic_func(suffix=self.name)
178
+ def side_inner_cell_index(args: self.SideArg, side_index: ElementIndex):
179
+ return self.base.side_inner_cell_index(args.base_arg, side_index)
180
+
181
+ return side_inner_cell_index
182
+
183
+ def _make_side_outer_cell_index(self):
184
+ @cache.dynamic_func(suffix=self.name)
185
+ def side_outer_cell_index(args: self.SideArg, side_index: ElementIndex):
186
+ return self.base.side_outer_cell_index(args.base_arg, side_index)
187
+
188
+ return side_outer_cell_index
189
+
190
+ def _make_side_inner_cell_coords(self):
191
+ @cache.dynamic_func(suffix=self.name)
192
+ def side_inner_cell_coords(args: self.SideArg, side_index: ElementIndex, side_coords: Coords):
193
+ return self.base.side_inner_cell_coords(args.base_arg, side_index, side_coords)
194
+
195
+ return side_inner_cell_coords
196
+
197
+ def _make_side_outer_cell_coords(self):
198
+ @cache.dynamic_func(suffix=self.name)
199
+ def side_outer_cell_coords(args: self.SideArg, side_index: ElementIndex, side_coords: Coords):
200
+ return self.base.side_outer_cell_coords(args.base_arg, side_index, side_coords)
201
+
202
+ return side_outer_cell_coords
203
+
204
+ def _make_side_from_cell_coords(self):
205
+ @cache.dynamic_func(suffix=self.name)
206
+ def side_from_cell_coords(
207
+ args: self.SideArg,
208
+ side_index: ElementIndex,
209
+ cell_index: ElementIndex,
210
+ cell_coords: Coords,
211
+ ):
212
+ return self.base.side_from_cell_coords(args.base_arg, side_index, cell_index, cell_coords)
213
+
214
+ return side_from_cell_coords
215
+
216
+ def _make_side_to_cell_arg(self):
217
+ @cache.dynamic_func(suffix=self.name)
218
+ def side_to_cell_arg(side_arg: self.SideArg):
219
+ return self.CellArg(self.base.side_to_cell_arg(side_arg.base_arg), side_arg.field_arg)
220
+
221
+ return side_to_cell_arg