warp-lang 1.7.0__py3-none-manylinux_2_28_x86_64.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,362 @@
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 import cache
20
+ from warp.fem.types import Coords, ElementIndex, Sample, make_free_sample
21
+
22
+ from .element import Element
23
+
24
+ _mat32 = wp.mat(shape=(3, 2), dtype=float)
25
+
26
+
27
+ class Geometry:
28
+ """
29
+ Interface class for discrete geometries
30
+
31
+ A geometry is composed of cells and sides. Sides may be boundary or interior (between cells).
32
+ """
33
+
34
+ dimension: int = 0
35
+
36
+ def cell_count(self):
37
+ """Number of cells in the geometry"""
38
+ raise NotImplementedError
39
+
40
+ def side_count(self):
41
+ """Number of sides in the geometry"""
42
+ raise NotImplementedError
43
+
44
+ def boundary_side_count(self):
45
+ """Number of boundary sides (sides with a single neighbour cell) in the geometry"""
46
+ raise NotImplementedError
47
+
48
+ def reference_cell(self) -> Element:
49
+ """Prototypical element for a cell"""
50
+ raise NotImplementedError
51
+
52
+ def reference_side(self) -> Element:
53
+ """Prototypical element for a side"""
54
+ raise NotImplementedError
55
+
56
+ @property
57
+ def cell_dimension(self) -> int:
58
+ """Manifold dimension of the geometry cells"""
59
+ return self.reference_cell().dimension
60
+
61
+ @property
62
+ def base(self) -> "Geometry":
63
+ """Returns the base geometry from which this geometry derives its topology. Usually `self`"""
64
+ return self
65
+
66
+ @property
67
+ def name(self) -> str:
68
+ return self.__class__.__name__
69
+
70
+ def __str__(self) -> str:
71
+ return self.name
72
+
73
+ CellArg: wp.codegen.Struct
74
+ """Structure containing arguments to be passed to device functions evaluating cell-related quantities"""
75
+
76
+ SideArg: wp.codegen.Struct
77
+ """Structure containing arguments to be passed to device functions evaluating side-related quantities"""
78
+
79
+ SideIndexArg: wp.codegen.Struct
80
+ """Structure containing arguments to be passed to device functions for indexing sides"""
81
+
82
+ def cell_arg_value(self, device) -> "Geometry.CellArg":
83
+ """Value of the arguments to be passed to cell-related device functions"""
84
+ raise NotImplementedError
85
+
86
+ @staticmethod
87
+ def cell_position(args: "Geometry.CellArg", s: "Sample"):
88
+ """Device function returning the world position of a cell sample point"""
89
+ raise NotImplementedError
90
+
91
+ @staticmethod
92
+ def cell_deformation_gradient(args: "Geometry.CellArg", s: "Sample"):
93
+ """Device function returning the transpose of the gradient of world position with respect to reference cell"""
94
+ raise NotImplementedError
95
+
96
+ @staticmethod
97
+ def cell_inverse_deformation_gradient(args: "Geometry.CellArg", s: "Sample"):
98
+ """Device function returning the matrix right-transforming a gradient w.r.t. cell space to a gradient w.r.t. world space
99
+ (i.e. the inverse deformation gradient)
100
+ """
101
+ raise NotImplementedError
102
+
103
+ @staticmethod
104
+ def cell_lookup(args: "Geometry.CellArg", pos: Any):
105
+ """Device function returning the cell sample point corresponding to a world position"""
106
+ raise NotImplementedError
107
+
108
+ @staticmethod
109
+ def cell_lookup(args: "Geometry.CellArg", pos: Any, guess: "Sample"):
110
+ """Device function returning the cell sample point corresponding to a world position. Can use guess for faster lookup"""
111
+ raise NotImplementedError
112
+
113
+ @staticmethod
114
+ def cell_measure(args: "Geometry.CellArg", s: "Sample"):
115
+ """Device function returning the measure determinant (e.g. volume, area) at a given point"""
116
+ raise NotImplementedError
117
+
118
+ @wp.func
119
+ def cell_measure_ratio(args: Any, s: Sample):
120
+ return 1.0
121
+
122
+ @staticmethod
123
+ def cell_normal(args: "Geometry.CellArg", s: "Sample"):
124
+ """Device function returning the element normal at a sample point.
125
+
126
+ For elements with the same dimension as the embedding space, this will be zero."""
127
+ raise NotImplementedError
128
+
129
+ def side_arg_value(self, device) -> "Geometry.SideArg":
130
+ """Value of the arguments to be passed to side-related device functions"""
131
+ raise NotImplementedError
132
+
133
+ @staticmethod
134
+ def boundary_side_index(args: "Geometry.SideIndexArg", boundary_side_index: int):
135
+ """Device function returning the side index corresponding to a boundary side"""
136
+ raise NotImplementedError
137
+
138
+ @staticmethod
139
+ def side_position(args: "Geometry.SideArg", s: "Sample"):
140
+ """Device function returning the side position at a sample point"""
141
+ raise NotImplementedError
142
+
143
+ @staticmethod
144
+ def side_deformation_gradient(args: "Geometry.SideArg", s: "Sample"):
145
+ """Device function returning the gradient of world position with respect to reference side"""
146
+ raise NotImplementedError
147
+
148
+ @staticmethod
149
+ def side_inner_inverse_deformation_gradient(args: "Geometry.Siderg", side_index: ElementIndex, coords: Coords):
150
+ """Device function returning the matrix right-transforming a gradient w.r.t. inner cell space to a gradient w.r.t. world space
151
+ (i.e. the inverse deformation gradient)
152
+ """
153
+ raise NotImplementedError
154
+
155
+ @staticmethod
156
+ def side_outer_inverse_deformation_gradient(args: "Geometry.CellArg", side_index: ElementIndex, coords: Coords):
157
+ """Device function returning the matrix right-transforming a gradient w.r.t. outer cell space to a gradient w.r.t. world space
158
+ (i.e. the inverse deformation gradient)
159
+ """
160
+ raise NotImplementedError
161
+
162
+ @staticmethod
163
+ def side_measure(args: "Geometry.SideArg", s: "Sample"):
164
+ """Device function returning the measure determinant (e.g. volume, area) at a given point"""
165
+ raise NotImplementedError
166
+
167
+ @staticmethod
168
+ def side_measure_ratio(args: "Geometry.SideArg", s: "Sample"):
169
+ """Device function returning the ratio of the measure of a side to that of its neighbour cells"""
170
+ raise NotImplementedError
171
+
172
+ @staticmethod
173
+ def side_normal(args: "Geometry.SideArg", s: "Sample"):
174
+ """Device function returning the element normal at a sample point"""
175
+ raise NotImplementedError
176
+
177
+ @staticmethod
178
+ def side_inner_cell_index(args: "Geometry.SideArg", side_index: ElementIndex):
179
+ """Device function returning the inner cell index for a given side"""
180
+ raise NotImplementedError
181
+
182
+ @staticmethod
183
+ def side_outer_cell_index(args: "Geometry.SideArg", side_index: ElementIndex):
184
+ """Device function returning the outer cell index for a given side"""
185
+ raise NotImplementedError
186
+
187
+ @staticmethod
188
+ def side_inner_cell_coords(args: "Geometry.SideArg", side_index: ElementIndex, side_coords: Coords):
189
+ """Device function returning the coordinates of a point on a side in the inner cell"""
190
+ raise NotImplementedError
191
+
192
+ @staticmethod
193
+ def side_outer_cell_coords(args: "Geometry.SideArg", side_index: ElementIndex, side_coords: Coords):
194
+ """Device function returning the coordinates of a point on a side in the outer cell"""
195
+ raise NotImplementedError
196
+
197
+ @staticmethod
198
+ def side_from_cell_coords(
199
+ args: "Geometry.SideArg",
200
+ side_index: ElementIndex,
201
+ element_index: ElementIndex,
202
+ element_coords: Coords,
203
+ ):
204
+ """Device function converting coordinates on a cell to coordinates on a side, or ``OUTSIDE``"""
205
+ raise NotImplementedError
206
+
207
+ @staticmethod
208
+ def side_to_cell_arg(side_arg: "Geometry.SideArg"):
209
+ """Device function converting a side-related argument value to a cell-related argument value, for promoting trace samples to the full space"""
210
+ raise NotImplementedError
211
+
212
+ # Default implementations for dependent quantities
213
+ # Can be overridden in derived classes if more efficient implementations exist
214
+
215
+ def _make_default_dependent_implementations(self):
216
+ self.cell_inverse_deformation_gradient = self._make_cell_inverse_deformation_gradient()
217
+ self.cell_measure = self._make_cell_measure()
218
+ self.cell_normal = self._make_cell_normal()
219
+
220
+ self.side_inner_inverse_deformation_gradient = self._make_side_inner_inverse_deformation_gradient()
221
+ self.side_outer_inverse_deformation_gradient = self._make_side_outer_inverse_deformation_gradient()
222
+ self.side_measure = self._make_side_measure()
223
+ self.side_measure_ratio = self._make_side_measure_ratio()
224
+ self.side_normal = self._make_side_normal()
225
+
226
+ @wp.func
227
+ def _element_measure(F: wp.vec2):
228
+ return wp.length(F)
229
+
230
+ @wp.func
231
+ def _element_measure(F: wp.vec3):
232
+ return wp.length(F)
233
+
234
+ @wp.func
235
+ def _element_measure(F: _mat32):
236
+ Ft = wp.transpose(F)
237
+ Fcross = wp.cross(Ft[0], Ft[1])
238
+ return wp.length(Fcross)
239
+
240
+ @wp.func
241
+ def _element_measure(F: wp.mat33):
242
+ return wp.abs(wp.determinant(F))
243
+
244
+ @wp.func
245
+ def _element_measure(F: wp.mat22):
246
+ return wp.abs(wp.determinant(F))
247
+
248
+ @wp.func
249
+ def _element_normal(F: wp.vec2):
250
+ return wp.normalize(wp.vec2(-F[1], F[0]))
251
+
252
+ @wp.func
253
+ def _element_normal(F: _mat32):
254
+ Ft = wp.transpose(F)
255
+ Fcross = wp.cross(Ft[0], Ft[1])
256
+ return wp.normalize(Fcross)
257
+
258
+ def _make_cell_measure(self):
259
+ REF_MEASURE = wp.constant(self.reference_cell().measure())
260
+
261
+ @cache.dynamic_func(suffix=self.name)
262
+ def cell_measure(args: self.CellArg, s: Sample):
263
+ F = self.cell_deformation_gradient(args, s)
264
+ return Geometry._element_measure(F) * REF_MEASURE
265
+
266
+ return cell_measure
267
+
268
+ def _make_cell_normal(self):
269
+ cell_dim = self.reference_cell().dimension
270
+ geo_dim = self.dimension
271
+ normal_vec = wp.vec(length=geo_dim, dtype=float)
272
+
273
+ @cache.dynamic_func(suffix=self.name)
274
+ def zero_normal(args: self.CellArg, s: Sample):
275
+ return normal_vec(0.0)
276
+
277
+ @cache.dynamic_func(suffix=self.name)
278
+ def cell_hyperplane_normal(args: self.CellArg, s: Sample):
279
+ F = self.cell_deformation_gradient(args, s)
280
+ return Geometry._element_normal(F)
281
+
282
+ if cell_dim == geo_dim:
283
+ return zero_normal
284
+ if cell_dim == geo_dim - 1:
285
+ return cell_hyperplane_normal
286
+
287
+ return None
288
+
289
+ def _make_cell_inverse_deformation_gradient(self):
290
+ cell_dim = self.reference_cell().dimension
291
+ geo_dim = self.dimension
292
+
293
+ @cache.dynamic_func(suffix=self.name)
294
+ def cell_inverse_deformation_gradient(cell_arg: self.CellArg, s: Sample):
295
+ return wp.inverse(self.cell_deformation_gradient(cell_arg, s))
296
+
297
+ @cache.dynamic_func(suffix=self.name)
298
+ def cell_pseudoinverse_deformation_gradient(cell_arg: self.CellArg, s: Sample):
299
+ F = self.cell_deformation_gradient(cell_arg, s)
300
+ Ft = wp.transpose(F)
301
+ return wp.inverse(Ft * F) * Ft
302
+
303
+ return cell_inverse_deformation_gradient if cell_dim == geo_dim else cell_pseudoinverse_deformation_gradient
304
+
305
+ def _make_side_measure(self):
306
+ REF_MEASURE = wp.constant(self.reference_side().measure())
307
+
308
+ @cache.dynamic_func(suffix=self.name)
309
+ def side_measure(args: self.SideArg, s: Sample):
310
+ F = self.side_deformation_gradient(args, s)
311
+ return Geometry._element_measure(F) * REF_MEASURE
312
+
313
+ return side_measure
314
+
315
+ def _make_side_measure_ratio(self):
316
+ @cache.dynamic_func(suffix=self.name)
317
+ def side_measure_ratio(args: self.SideArg, s: Sample):
318
+ inner = self.side_inner_cell_index(args, s.element_index)
319
+ outer = self.side_outer_cell_index(args, s.element_index)
320
+ inner_coords = self.side_inner_cell_coords(args, s.element_index, s.element_coords)
321
+ outer_coords = self.side_outer_cell_coords(args, s.element_index, s.element_coords)
322
+ cell_arg = self.side_to_cell_arg(args)
323
+ return self.side_measure(args, s) / wp.min(
324
+ self.cell_measure(cell_arg, make_free_sample(inner, inner_coords)),
325
+ self.cell_measure(cell_arg, make_free_sample(outer, outer_coords)),
326
+ )
327
+
328
+ return side_measure_ratio
329
+
330
+ def _make_side_normal(self):
331
+ side_dim = self.reference_side().dimension
332
+ geo_dim = self.dimension
333
+
334
+ @cache.dynamic_func(suffix=self.name)
335
+ def hyperplane_normal(args: self.SideArg, s: Sample):
336
+ F = self.side_deformation_gradient(args, s)
337
+ return Geometry._element_normal(F)
338
+
339
+ if side_dim == geo_dim - 1:
340
+ return hyperplane_normal
341
+
342
+ return None
343
+
344
+ def _make_side_inner_inverse_deformation_gradient(self):
345
+ @cache.dynamic_func(suffix=self.name)
346
+ def side_inner_inverse_deformation_gradient(args: self.SideArg, s: Sample):
347
+ cell_index = self.side_inner_cell_index(args, s.element_index)
348
+ cell_coords = self.side_inner_cell_coords(args, s.element_index, s.element_coords)
349
+ cell_arg = self.side_to_cell_arg(args)
350
+ return self.cell_inverse_deformation_gradient(cell_arg, make_free_sample(cell_index, cell_coords))
351
+
352
+ return side_inner_inverse_deformation_gradient
353
+
354
+ def _make_side_outer_inverse_deformation_gradient(self):
355
+ @cache.dynamic_func(suffix=self.name)
356
+ def side_outer_inverse_deformation_gradient(args: self.SideArg, s: Sample):
357
+ cell_index = self.side_outer_cell_index(args, s.element_index)
358
+ cell_coords = self.side_outer_cell_coords(args, s.element_index, s.element_coords)
359
+ cell_arg = self.side_to_cell_arg(args)
360
+ return self.cell_inverse_deformation_gradient(cell_arg, make_free_sample(cell_index, cell_coords))
361
+
362
+ return side_outer_inverse_deformation_gradient