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,215 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2022 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 unittest
17
+
18
+ import warp as wp
19
+ import warp.tests.aux_test_compile_consts_dummy
20
+ from warp.tests.unittest_utils import *
21
+
22
+ LOCAL_ONE = wp.constant(1)
23
+
24
+ SQRT3_OVER_3 = wp.constant(0.57735026919)
25
+ UNIT_VEC = wp.constant(wp.vec3(SQRT3_OVER_3, SQRT3_OVER_3, SQRT3_OVER_3))
26
+ ONE_FP16 = wp.constant(wp.float16(1.0))
27
+ TEST_BOOL = wp.constant(True)
28
+
29
+ SHADOWED_GLOBAL = wp.constant(17)
30
+
31
+
32
+ class Foobar:
33
+ ONE = wp.constant(1)
34
+ TWO = wp.constant(2)
35
+
36
+
37
+ @wp.kernel
38
+ def test_bool():
39
+ if TEST_BOOL:
40
+ expect_eq(1.0, 1.0)
41
+ else:
42
+ expect_eq(1.0, -1.0)
43
+
44
+
45
+ @wp.kernel
46
+ def test_int(a: int):
47
+ if Foobar.ONE > 0:
48
+ a = 123 + Foobar.TWO + warp.tests.aux_test_compile_consts_dummy.MINUS_ONE
49
+ else:
50
+ a = 456 + LOCAL_ONE
51
+ expect_eq(a, 124)
52
+
53
+
54
+ @wp.kernel
55
+ def test_float(x: float):
56
+ x = SQRT3_OVER_3
57
+ for i in range(3):
58
+ expect_eq(UNIT_VEC[i], x)
59
+
60
+ approx_one = wp.dot(UNIT_VEC, UNIT_VEC)
61
+ expect_near(approx_one, 1.0, 1e-6)
62
+
63
+ # test casting
64
+ expect_near(wp.float32(ONE_FP16), 1.0, 1e-6)
65
+
66
+
67
+ def test_closure_capture(test, device):
68
+ def make_closure_kernel(cst):
69
+ def closure_kernel_fn(expected: int):
70
+ wp.expect_eq(cst, expected)
71
+
72
+ return wp.Kernel(func=closure_kernel_fn)
73
+
74
+ one_closure = make_closure_kernel(Foobar.ONE)
75
+ two_closure = make_closure_kernel(Foobar.TWO)
76
+
77
+ wp.launch(one_closure, dim=(1), inputs=[1], device=device)
78
+ wp.launch(two_closure, dim=(1), inputs=[2], device=device)
79
+
80
+
81
+ def test_closure_precedence(test, device):
82
+ """Verifies that closure constants take precedence over globals"""
83
+
84
+ SHADOWED_GLOBAL = wp.constant(42)
85
+
86
+ @wp.kernel
87
+ def closure_kernel():
88
+ wp.expect_eq(SHADOWED_GLOBAL, 42)
89
+
90
+ wp.launch(closure_kernel, dim=1, device=device)
91
+
92
+
93
+ def test_hash_global_capture(test, device):
94
+ """Verifies that global variables are included in the module hash"""
95
+
96
+ a = 0
97
+ wp.launch(test_int, (1,), inputs=[a], device=device)
98
+
99
+
100
+ def test_hash_redefine_kernel(test, device):
101
+ """This test defines a second ``test_function`` so that the second launch returns the correct result."""
102
+
103
+ @wp.kernel
104
+ def test_function(data: wp.array(dtype=wp.float32)):
105
+ i = wp.tid()
106
+ data[i] = TEST_CONSTANT
107
+
108
+ TEST_CONSTANT = wp.constant(1.0)
109
+
110
+ test_array = wp.empty(1, dtype=wp.float32, device=device)
111
+ wp.launch(test_function, (1,), inputs=[test_array], device=device)
112
+ test.assertEqual(test_array.numpy()[0], 1.0)
113
+
114
+ module_hash_0 = wp.get_module(test_function.__module__).hash_module()
115
+
116
+ @wp.kernel
117
+ def test_function(data: wp.array(dtype=wp.float32)):
118
+ i = wp.tid()
119
+ data[i] = TEST_CONSTANT
120
+
121
+ TEST_CONSTANT = wp.constant(2.0)
122
+
123
+ wp.launch(test_function, (1,), inputs=[test_array], device=device)
124
+ test.assertEqual(test_array.numpy()[0], 2.0)
125
+
126
+ module_hash_1 = wp.get_module(test_function.__module__).hash_module()
127
+
128
+ test.assertNotEqual(module_hash_0, module_hash_1)
129
+
130
+
131
+ def test_hash_redefine_constant_only(test, device):
132
+ """This test does not define a second ``test_function``, so the second launch does not invalidate the cache.
133
+
134
+ For now this is expected behavior, but we can verify that the content has is different.
135
+ """
136
+
137
+ @wp.kernel
138
+ def test_function(data: wp.array(dtype=wp.float32)):
139
+ i = wp.tid()
140
+ data[i] = TEST_CONSTANT
141
+
142
+ TEST_CONSTANT = wp.constant(1.0)
143
+
144
+ test_array = wp.empty(1, dtype=wp.float32, device=device)
145
+ wp.launch(test_function, (1,), inputs=[test_array], device=device)
146
+ test.assertEqual(test_array.numpy()[0], 1.0)
147
+
148
+ module_hash_0 = wp.get_module(test_function.__module__).hash_module()
149
+
150
+ TEST_CONSTANT = wp.constant(2.0)
151
+ module_hash_1 = wp.get_module(test_function.__module__).hash_module()
152
+ test.assertNotEqual(module_hash_0, module_hash_1, "Module hashes should be different if TEST_CONSTANT is changed.")
153
+
154
+ TEST_CONSTANT = wp.constant(1.0)
155
+ module_hash_2 = wp.get_module(test_function.__module__).hash_module()
156
+ test.assertEqual(module_hash_0, module_hash_2, "Module hashes should be the same if TEST_CONSTANT is the same.")
157
+
158
+
159
+ def test_hash_shadowed_var(test, device):
160
+ """Tests to ensure shadowed variables are not mistakenly added to the module hash"""
161
+
162
+ TEST_CONSTANT_SHADOW_0 = wp.constant(1.0)
163
+ TEST_CONSTANT_SHADOW_1 = wp.constant(1.0)
164
+ TEST_CONSTANT_SHADOW_2 = wp.constant(1.0)
165
+
166
+ @wp.kernel
167
+ def test_function(data: wp.array(dtype=wp.float32)):
168
+ i = wp.tid()
169
+ TEST_CONSTANT_SHADOW_0 = 2.0
170
+ TEST_CONSTANT_SHADOW_1, TEST_CONSTANT_SHADOW_2 = 4.0, 8.0
171
+ data[i] = TEST_CONSTANT_SHADOW_0 + TEST_CONSTANT_SHADOW_1 + TEST_CONSTANT_SHADOW_2
172
+
173
+ test_array = wp.empty(1, dtype=wp.float32, device=device)
174
+ wp.launch(test_function, (1,), inputs=[test_array], device=device)
175
+ test.assertEqual(test_array.numpy()[0], 14.0)
176
+
177
+ module_hash_0 = wp.get_module(test_function.__module__).hash_module()
178
+
179
+ TEST_CONSTANT_SHADOW_0 = wp.constant(0.0)
180
+ TEST_CONSTANT_SHADOW_1 = wp.constant(0.0)
181
+ TEST_CONSTANT_SHADOW_2 = wp.constant(0.0)
182
+ module_hash_1 = wp.get_module(test_function.__module__).hash_module()
183
+ test.assertEqual(module_hash_0, module_hash_1, "Module hashes should be the same since all constants are shadowed.")
184
+
185
+
186
+ class TestConstants(unittest.TestCase):
187
+ def test_constant_math(self):
188
+ # test doing math with python defined constants in *python* scope
189
+ twopi = wp.pi * 2.0
190
+
191
+ import math
192
+
193
+ self.assertEqual(twopi, math.pi * 2.0)
194
+
195
+
196
+ a = 0
197
+ x = 0.0
198
+
199
+ devices = get_test_devices()
200
+
201
+ add_kernel_test(TestConstants, test_bool, dim=1, inputs=[], devices=devices)
202
+ add_kernel_test(TestConstants, test_int, dim=1, inputs=[a], devices=devices)
203
+ add_kernel_test(TestConstants, test_float, dim=1, inputs=[x], devices=devices)
204
+
205
+ add_function_test(TestConstants, "test_closure_capture", test_closure_capture, devices=devices)
206
+ add_function_test(TestConstants, "test_closure_precedence", test_closure_precedence, devices=devices)
207
+ add_function_test(TestConstants, "test_hash_global_capture", test_hash_global_capture, devices=devices)
208
+ add_function_test(TestConstants, "test_hash_redefine_kernel", test_hash_redefine_kernel, devices=devices)
209
+ add_function_test(TestConstants, "test_hash_redefine_constant_only", test_hash_redefine_constant_only, devices=devices)
210
+ add_function_test(TestConstants, "test_hash_shadowed_var", test_hash_shadowed_var, devices=devices)
211
+
212
+
213
+ if __name__ == "__main__":
214
+ wp.clear_kernel_cache()
215
+ unittest.main(verbosity=2)
@@ -0,0 +1,252 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2022 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 unittest
17
+
18
+ import warp as wp
19
+ from warp.tests.unittest_utils import *
20
+
21
+
22
+ @wp.kernel
23
+ def test_conditional_if_else():
24
+ a = 0.5
25
+ b = 2.0
26
+
27
+ if a > b:
28
+ c = 1.0
29
+ else:
30
+ c = -1.0
31
+
32
+ wp.expect_eq(c, -1.0)
33
+
34
+
35
+ @wp.kernel
36
+ def test_conditional_if_else_nested():
37
+ a = 1.0
38
+ b = 2.0
39
+
40
+ if a > b:
41
+ c = 3.0
42
+ d = 4.0
43
+
44
+ if c > d:
45
+ e = 1.0
46
+ else:
47
+ e = -1.0
48
+
49
+ else:
50
+ c = 6.0
51
+ d = 7.0
52
+
53
+ if c > d:
54
+ e = 2.0
55
+ else:
56
+ e = -2.0
57
+
58
+ wp.expect_eq(e, -2.0)
59
+
60
+
61
+ @wp.kernel
62
+ def test_boolean_and():
63
+ a = 1.0
64
+ b = 2.0
65
+ c = 1.0
66
+
67
+ if a > 0.0 and b > 0.0:
68
+ c = -1.0
69
+
70
+ wp.expect_eq(c, -1.0)
71
+
72
+
73
+ @wp.kernel
74
+ def test_boolean_or():
75
+ a = 1.0
76
+ b = 2.0
77
+ c = 1.0
78
+
79
+ if a > 0.0 and b > 0.0:
80
+ c = -1.0
81
+
82
+ wp.expect_eq(c, -1.0)
83
+
84
+
85
+ @wp.kernel
86
+ def test_boolean_compound():
87
+ a = 1.0
88
+ b = 2.0
89
+ c = 3.0
90
+
91
+ d = 1.0
92
+
93
+ if a > 0.0 and b > 0.0 or c > a:
94
+ d = -1.0
95
+
96
+ wp.expect_eq(d, -1.0)
97
+
98
+
99
+ @wp.kernel
100
+ def test_boolean_literal():
101
+ t = True
102
+ f = False
103
+
104
+ r = 1.0
105
+
106
+ if t == (not f):
107
+ r = -1.0
108
+
109
+ wp.expect_eq(r, -1.0)
110
+
111
+
112
+ @wp.kernel
113
+ def test_int_logical_not():
114
+ x = 0
115
+ if not 123:
116
+ x = 123
117
+
118
+ wp.expect_eq(x, 0)
119
+
120
+
121
+ @wp.kernel
122
+ def test_int_conditional_assign_overload():
123
+ if 123:
124
+ x = 123
125
+
126
+ if 234:
127
+ x = 234
128
+
129
+ wp.expect_eq(x, 234)
130
+
131
+
132
+ @wp.kernel
133
+ def test_bool_param_conditional(foo: bool):
134
+ if foo:
135
+ x = 123
136
+
137
+ wp.expect_eq(x, 123)
138
+
139
+
140
+ @wp.kernel
141
+ def test_conditional_chain_basic():
142
+ x = -1
143
+
144
+ if 0 < x < 1:
145
+ success = False
146
+ else:
147
+ success = True
148
+ wp.expect_eq(success, True)
149
+
150
+
151
+ @wp.kernel
152
+ def test_conditional_chain_empty_range():
153
+ x = -1
154
+ y = 4
155
+
156
+ if -2 <= x <= 10 <= y:
157
+ success = False
158
+ else:
159
+ success = True
160
+ wp.expect_eq(success, True)
161
+
162
+
163
+ @wp.kernel
164
+ def test_conditional_chain_faker():
165
+ x = -1
166
+
167
+ # Not actually a chained inequality
168
+ if (-2 < x) < (1 > 0):
169
+ success = False
170
+ else:
171
+ success = True
172
+ wp.expect_eq(success, True)
173
+
174
+
175
+ @wp.kernel
176
+ def test_conditional_chain_and():
177
+ x = -1
178
+
179
+ if (-2 < x < 0) and (-1 <= x <= -1):
180
+ success = True
181
+ else:
182
+ success = False
183
+ wp.expect_eq(success, True)
184
+
185
+
186
+ @wp.kernel
187
+ def test_conditional_chain_eqs():
188
+ x = wp.int32(10)
189
+ y = 10
190
+ z = -10
191
+
192
+ if x == y != z:
193
+ success = True
194
+ else:
195
+ success = False
196
+ wp.expect_eq(success, True)
197
+
198
+
199
+ @wp.kernel
200
+ def test_conditional_chain_mixed():
201
+ x = 0
202
+
203
+ if x < 10 == 1:
204
+ success = False
205
+ else:
206
+ success = True
207
+ wp.expect_eq(success, True)
208
+
209
+
210
+ def test_conditional_unequal_types(test: unittest.TestCase, device):
211
+ # The bad kernel must be in a separate module, otherwise the current module would fail to load
212
+ from warp.tests.aux_test_conditional_unequal_types_kernels import (
213
+ unequal_types_kernel,
214
+ )
215
+
216
+ with test.assertRaises(TypeError):
217
+ wp.launch(unequal_types_kernel, dim=(1,), inputs=[], device=device)
218
+
219
+ # remove all references to the bad module so that subsequent calls to wp.force_load()
220
+ # won't try to load it unless we explicitly re-import it again
221
+ del wp.context.user_modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
222
+ del sys.modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
223
+
224
+
225
+ devices = get_test_devices()
226
+
227
+
228
+ class TestConditional(unittest.TestCase):
229
+ pass
230
+
231
+
232
+ add_kernel_test(TestConditional, kernel=test_conditional_if_else, dim=1, devices=devices)
233
+ add_kernel_test(TestConditional, kernel=test_conditional_if_else_nested, dim=1, devices=devices)
234
+ add_kernel_test(TestConditional, kernel=test_boolean_and, dim=1, devices=devices)
235
+ add_kernel_test(TestConditional, kernel=test_boolean_or, dim=1, devices=devices)
236
+ add_kernel_test(TestConditional, kernel=test_boolean_compound, dim=1, devices=devices)
237
+ add_kernel_test(TestConditional, kernel=test_boolean_literal, dim=1, devices=devices)
238
+ add_kernel_test(TestConditional, kernel=test_int_logical_not, dim=1, devices=devices)
239
+ add_kernel_test(TestConditional, kernel=test_int_conditional_assign_overload, dim=1, devices=devices)
240
+ add_kernel_test(TestConditional, kernel=test_bool_param_conditional, dim=1, inputs=[True], devices=devices)
241
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_basic, dim=1, devices=devices)
242
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_empty_range, dim=1, devices=devices)
243
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_faker, dim=1, devices=devices)
244
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_and, dim=1, devices=devices)
245
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_eqs, dim=1, devices=devices)
246
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_mixed, dim=1, devices=devices)
247
+ add_function_test(TestConditional, "test_conditional_unequal_types", test_conditional_unequal_types, devices=devices)
248
+
249
+
250
+ if __name__ == "__main__":
251
+ wp.clear_kernel_cache()
252
+ unittest.main(verbosity=2)
@@ -0,0 +1,42 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024 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 unittest
17
+ from typing import List, Tuple
18
+
19
+ import warp as wp
20
+ from warp.tests.unittest_utils import *
21
+
22
+
23
+ def test_context_type_str(test, device):
24
+ assert wp.context.type_str(List[int]) == "List[int]"
25
+ assert wp.context.type_str(List[float]) == "List[float]"
26
+
27
+ assert wp.context.type_str(Tuple[int]) == "Tuple[int]"
28
+ assert wp.context.type_str(Tuple[float]) == "Tuple[float]"
29
+ assert wp.context.type_str(Tuple[int, float]) == "Tuple[int, float]"
30
+ assert wp.context.type_str(Tuple[int, ...]) == "Tuple[int, ...]"
31
+
32
+
33
+ class TestContext(unittest.TestCase):
34
+ pass
35
+
36
+
37
+ add_function_test(TestContext, "test_context_type_str", test_context_type_str)
38
+
39
+
40
+ if __name__ == "__main__":
41
+ wp.clear_kernel_cache()
42
+ unittest.main(verbosity=2)