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,392 @@
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 Optional
17
+
18
+ import warp as wp
19
+ from warp.fem.cache import cached_arg_value
20
+ from warp.fem.types import OUTSIDE, Coords, ElementIndex, Sample, make_free_sample
21
+
22
+ from .element import LinearEdge, Square
23
+ from .geometry import Geometry
24
+
25
+
26
+ @wp.struct
27
+ class Grid2DCellArg:
28
+ res: wp.vec2i
29
+ cell_size: wp.vec2
30
+ origin: wp.vec2
31
+
32
+
33
+ class Grid2D(Geometry):
34
+ """Two-dimensional regular grid geometry"""
35
+
36
+ dimension = 2
37
+
38
+ Permutation = wp.types.matrix(shape=(2, 2), dtype=int)
39
+ ROTATION = wp.constant(Permutation(0, 1, 1, 0))
40
+
41
+ def __init__(self, res: wp.vec2i, bounds_lo: Optional[wp.vec2] = None, bounds_hi: Optional[wp.vec2] = None):
42
+ """Constructs a dense 2D grid
43
+
44
+ Args:
45
+ res: Resolution of the grid along each dimension
46
+ bounds_lo: Position of the lower bound of the axis-aligned grid
47
+ bounds_hi: Position of the upper bound of the axis-aligned grid
48
+ """
49
+
50
+ if bounds_lo is None:
51
+ bounds_lo = wp.vec2(0.0)
52
+
53
+ if bounds_hi is None:
54
+ bounds_hi = wp.vec2(1.0)
55
+
56
+ self.bounds_lo = bounds_lo
57
+ self.bounds_hi = bounds_hi
58
+
59
+ self._res = res
60
+
61
+ @property
62
+ def extents(self) -> wp.vec3:
63
+ # Avoid using native sub due to higher over of calling builtins from Python
64
+ return wp.vec2(
65
+ self.bounds_hi[0] - self.bounds_lo[0],
66
+ self.bounds_hi[1] - self.bounds_lo[1],
67
+ )
68
+
69
+ @property
70
+ def cell_size(self) -> wp.vec2:
71
+ ex = self.extents
72
+ return wp.vec2(
73
+ ex[0] / self.res[0],
74
+ ex[1] / self.res[1],
75
+ )
76
+
77
+ def cell_count(self):
78
+ return self.res[0] * self.res[1]
79
+
80
+ def vertex_count(self):
81
+ return (self.res[0] + 1) * (self.res[1] + 1)
82
+
83
+ def side_count(self):
84
+ return 2 * self.cell_count() + self.res[0] + self.res[1]
85
+
86
+ def boundary_side_count(self):
87
+ return 2 * (self.res[0] + self.res[1])
88
+
89
+ def reference_cell(self) -> Square:
90
+ return Square()
91
+
92
+ def reference_side(self) -> LinearEdge:
93
+ return LinearEdge()
94
+
95
+ @property
96
+ def res(self):
97
+ return self._res
98
+
99
+ @property
100
+ def origin(self):
101
+ return self.bounds_lo
102
+
103
+ @property
104
+ def strides(self):
105
+ return wp.vec2i(self.res[1], 1)
106
+
107
+ # Utility device functions
108
+ CellArg = Grid2DCellArg
109
+ Cell = wp.vec2i
110
+
111
+ @wp.func
112
+ def _to_2d_index(x_stride: int, index: int):
113
+ x = index // x_stride
114
+ y = index - x_stride * x
115
+ return wp.vec2i(x, y)
116
+
117
+ @wp.func
118
+ def _from_2d_index(x_stride: int, index: wp.vec2i):
119
+ return x_stride * index[0] + index[1]
120
+
121
+ @wp.func
122
+ def cell_index(res: wp.vec2i, cell: Cell):
123
+ return Grid2D._from_2d_index(res[1], cell)
124
+
125
+ @wp.func
126
+ def get_cell(res: wp.vec2i, cell_index: ElementIndex):
127
+ return Grid2D._to_2d_index(res[1], cell_index)
128
+
129
+ @wp.struct
130
+ class Side:
131
+ axis: int # normal; 0: horizontal, 1: vertical
132
+ origin: wp.vec2i # index of vertex at corner (0,0)
133
+
134
+ @wp.struct
135
+ class SideArg:
136
+ cell_count: int
137
+ axis_offsets: wp.vec2i
138
+ cell_arg: Grid2DCellArg
139
+
140
+ SideIndexArg = SideArg
141
+
142
+ @wp.func
143
+ def _rotate(axis: int, vec: wp.vec2i):
144
+ return wp.vec2i(
145
+ vec[Grid2D.ROTATION[axis, 0]],
146
+ vec[Grid2D.ROTATION[axis, 1]],
147
+ )
148
+
149
+ @wp.func
150
+ def _rotate(axis: int, vec: wp.vec2):
151
+ return wp.vec2(
152
+ vec[Grid2D.ROTATION[axis, 0]],
153
+ vec[Grid2D.ROTATION[axis, 1]],
154
+ )
155
+
156
+ @wp.func
157
+ def side_index(arg: SideArg, side: Side):
158
+ alt_axis = Grid2D.ROTATION[side.axis, 0]
159
+ if side.origin[0] == arg.cell_arg.res[alt_axis]:
160
+ # Upper-boundary side
161
+ longitude = side.origin[1]
162
+ return 2 * arg.cell_count + arg.axis_offsets[side.axis] + longitude
163
+
164
+ cell_index = Grid2D.cell_index(arg.cell_arg.res, Grid2D._rotate(side.axis, side.origin))
165
+ return side.axis * arg.cell_count + cell_index
166
+
167
+ @wp.func
168
+ def get_side(arg: SideArg, side_index: ElementIndex):
169
+ if side_index < 2 * arg.cell_count:
170
+ axis = side_index // arg.cell_count
171
+ cell_index = side_index - axis * arg.cell_count
172
+ origin = Grid2D._rotate(axis, Grid2D.get_cell(arg.cell_arg.res, cell_index))
173
+ return Grid2D.Side(axis, origin)
174
+
175
+ axis_side_index = side_index - 2 * arg.cell_count
176
+ axis = wp.where(axis_side_index < arg.axis_offsets[1], 0, 1)
177
+
178
+ altitude = arg.cell_arg.res[Grid2D.ROTATION[axis, 0]]
179
+ longitude = axis_side_index - arg.axis_offsets[axis]
180
+
181
+ origin_loc = wp.vec2i(altitude, longitude)
182
+ return Grid2D.Side(axis, origin_loc)
183
+
184
+ # Geometry device interface
185
+
186
+ @cached_arg_value
187
+ def cell_arg_value(self, device) -> CellArg:
188
+ args = self.CellArg()
189
+ args.res = self.res
190
+ args.cell_size = self.cell_size
191
+ args.origin = self.bounds_lo
192
+ return args
193
+
194
+ @wp.func
195
+ def cell_position(args: CellArg, s: Sample):
196
+ cell = Grid2D.get_cell(args.res, s.element_index)
197
+ return (
198
+ wp.vec2(
199
+ (float(cell[0]) + s.element_coords[0]) * args.cell_size[0],
200
+ (float(cell[1]) + s.element_coords[1]) * args.cell_size[1],
201
+ )
202
+ + args.origin
203
+ )
204
+
205
+ @wp.func
206
+ def cell_deformation_gradient(args: CellArg, s: Sample):
207
+ return wp.diag(args.cell_size)
208
+
209
+ @wp.func
210
+ def cell_inverse_deformation_gradient(args: CellArg, s: Sample):
211
+ return wp.diag(wp.cw_div(wp.vec2(1.0), args.cell_size))
212
+
213
+ @wp.func
214
+ def cell_lookup(args: CellArg, pos: wp.vec2):
215
+ loc_pos = wp.cw_div(pos - args.origin, args.cell_size)
216
+ x = wp.clamp(loc_pos[0], 0.0, float(args.res[0]))
217
+ y = wp.clamp(loc_pos[1], 0.0, float(args.res[1]))
218
+
219
+ x_cell = wp.min(wp.floor(x), float(args.res[0]) - 1.0)
220
+ y_cell = wp.min(wp.floor(y), float(args.res[1]) - 1.0)
221
+
222
+ coords = Coords(x - x_cell, y - y_cell, 0.0)
223
+ cell_index = Grid2D.cell_index(args.res, Grid2D.Cell(int(x_cell), int(y_cell)))
224
+
225
+ return make_free_sample(cell_index, coords)
226
+
227
+ @wp.func
228
+ def cell_lookup(args: CellArg, pos: wp.vec2, guess: Sample):
229
+ return Grid2D.cell_lookup(args, pos)
230
+
231
+ @wp.func
232
+ def cell_measure(args: CellArg, s: Sample):
233
+ return args.cell_size[0] * args.cell_size[1]
234
+
235
+ @wp.func
236
+ def cell_normal(args: CellArg, s: Sample):
237
+ return wp.vec2(0.0)
238
+
239
+ @cached_arg_value
240
+ def side_arg_value(self, device) -> SideArg:
241
+ args = self.SideArg()
242
+
243
+ args.axis_offsets = wp.vec2i(
244
+ 0,
245
+ self.res[1],
246
+ )
247
+ args.cell_count = self.cell_count()
248
+ args.cell_arg = self.cell_arg_value(device)
249
+ return args
250
+
251
+ def side_index_arg_value(self, device) -> SideIndexArg:
252
+ return self.side_arg_value(device)
253
+
254
+ @wp.func
255
+ def boundary_side_index(args: SideArg, boundary_side_index: int):
256
+ """Boundary side to side index"""
257
+
258
+ axis_side_index = boundary_side_index // 2
259
+ border = boundary_side_index - 2 * axis_side_index
260
+
261
+ if axis_side_index < args.axis_offsets[1]:
262
+ axis = 0
263
+ else:
264
+ axis = 1
265
+
266
+ longitude = axis_side_index - args.axis_offsets[axis]
267
+ altitude = border * args.cell_arg.res[axis]
268
+
269
+ side = Grid2D.Side(axis, wp.vec2i(altitude, longitude))
270
+ return Grid2D.side_index(args, side)
271
+
272
+ @wp.func
273
+ def side_position(args: SideArg, s: Sample):
274
+ side = Grid2D.get_side(args, s.element_index)
275
+
276
+ coord = wp.where((side.origin[0] == 0) == (side.axis == 0), s.element_coords[0], 1.0 - s.element_coords[0])
277
+
278
+ local_pos = wp.vec2(
279
+ float(side.origin[0]),
280
+ float(side.origin[1]) + coord,
281
+ )
282
+
283
+ pos = args.cell_arg.origin + wp.cw_mul(Grid2D._rotate(side.axis, local_pos), args.cell_arg.cell_size)
284
+
285
+ return pos
286
+
287
+ @wp.func
288
+ def side_deformation_gradient(args: SideArg, s: Sample):
289
+ side = Grid2D.get_side(args, s.element_index)
290
+
291
+ sign = wp.where((side.origin[0] == 0) == (side.axis == 0), 1.0, -1.0)
292
+
293
+ return wp.cw_mul(Grid2D._rotate(side.axis, wp.vec2(0.0, sign)), args.cell_arg.cell_size)
294
+
295
+ @wp.func
296
+ def side_inner_inverse_deformation_gradient(args: SideArg, s: Sample):
297
+ return Grid2D.cell_inverse_deformation_gradient(args.cell_arg, s)
298
+
299
+ @wp.func
300
+ def side_outer_inverse_deformation_gradient(args: SideArg, s: Sample):
301
+ return Grid2D.cell_inverse_deformation_gradient(args.cell_arg, s)
302
+
303
+ @wp.func
304
+ def side_measure(args: SideArg, s: Sample):
305
+ side = Grid2D.get_side(args, s.element_index)
306
+ long_axis = Grid2D.ROTATION[side.axis, 1]
307
+ return args.cell_arg.cell_size[long_axis]
308
+
309
+ @wp.func
310
+ def side_measure_ratio(args: SideArg, s: Sample):
311
+ side = Grid2D.get_side(args, s.element_index)
312
+ alt_axis = Grid2D.ROTATION[side.axis, 0]
313
+ return 1.0 / args.cell_arg.cell_size[alt_axis]
314
+
315
+ @wp.func
316
+ def side_normal(args: SideArg, s: Sample):
317
+ side = Grid2D.get_side(args, s.element_index)
318
+
319
+ sign = wp.where(side.origin[0] == 0, -1.0, 1.0)
320
+
321
+ local_n = wp.vec2(sign, 0.0)
322
+ return Grid2D._rotate(side.axis, local_n)
323
+
324
+ @wp.func
325
+ def side_inner_cell_index(arg: SideArg, side_index: ElementIndex):
326
+ side = Grid2D.get_side(arg, side_index)
327
+
328
+ inner_alt = wp.where(side.origin[0] == 0, 0, side.origin[0] - 1)
329
+
330
+ inner_origin = wp.vec2i(inner_alt, side.origin[1])
331
+
332
+ cell = Grid2D._rotate(side.axis, inner_origin)
333
+ return Grid2D.cell_index(arg.cell_arg.res, cell)
334
+
335
+ @wp.func
336
+ def side_outer_cell_index(arg: SideArg, side_index: ElementIndex):
337
+ side = Grid2D.get_side(arg, side_index)
338
+
339
+ alt_axis = Grid2D.ROTATION[side.axis, 0]
340
+ outer_alt = wp.where(
341
+ side.origin[0] == arg.cell_arg.res[alt_axis], arg.cell_arg.res[alt_axis] - 1, side.origin[0]
342
+ )
343
+
344
+ outer_origin = wp.vec2i(outer_alt, side.origin[1])
345
+
346
+ cell = Grid2D._rotate(side.axis, outer_origin)
347
+ return Grid2D.cell_index(arg.cell_arg.res, cell)
348
+
349
+ @wp.func
350
+ def side_inner_cell_coords(args: SideArg, side_index: ElementIndex, side_coords: Coords):
351
+ side = Grid2D.get_side(args, side_index)
352
+
353
+ inner_alt = wp.where(side.origin[0] == 0, 0.0, 1.0)
354
+
355
+ side_coord = wp.where((side.origin[0] == 0) == (side.axis == 0), side_coords[0], 1.0 - side_coords[0])
356
+
357
+ coords = Grid2D._rotate(side.axis, wp.vec2(inner_alt, side_coord))
358
+ return Coords(coords[0], coords[1], 0.0)
359
+
360
+ @wp.func
361
+ def side_outer_cell_coords(args: SideArg, side_index: ElementIndex, side_coords: Coords):
362
+ side = Grid2D.get_side(args, side_index)
363
+
364
+ alt_axis = Grid2D.ROTATION[side.axis, 0]
365
+ outer_alt = wp.where(side.origin[0] == args.cell_arg.res[alt_axis], 1.0, 0.0)
366
+
367
+ side_coord = wp.where((side.origin[0] == 0) == (side.axis == 0), side_coords[0], 1.0 - side_coords[0])
368
+
369
+ coords = Grid2D._rotate(side.axis, wp.vec2(outer_alt, side_coord))
370
+ return Coords(coords[0], coords[1], 0.0)
371
+
372
+ @wp.func
373
+ def side_from_cell_coords(
374
+ args: SideArg,
375
+ side_index: ElementIndex,
376
+ element_index: ElementIndex,
377
+ element_coords: Coords,
378
+ ):
379
+ side = Grid2D.get_side(args, side_index)
380
+ cell = Grid2D.get_cell(args.cell_arg.res, element_index)
381
+
382
+ if float(side.origin[0] - cell[side.axis]) == element_coords[side.axis]:
383
+ long_axis = Grid2D.ROTATION[side.axis, 1]
384
+ axis_coord = element_coords[long_axis]
385
+ side_coord = wp.where((side.origin[0] == 0) == (side.axis == 0), axis_coord, 1.0 - axis_coord)
386
+ return Coords(side_coord, 0.0, 0.0)
387
+
388
+ return Coords(OUTSIDE)
389
+
390
+ @wp.func
391
+ def side_to_cell_arg(side_arg: SideArg):
392
+ return side_arg.cell_arg