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,307 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include "builtin.h"
21
+
22
+ #if WP_ENABLE_CUDA
23
+
24
+ #include <cudaTypedefs.h>
25
+ #include <cuda_runtime_api.h>
26
+
27
+ #include <stdio.h>
28
+
29
+ #include <vector>
30
+
31
+ #define check_cuda(code) (check_cuda_result(code, __FUNCTION__, __FILE__, __LINE__))
32
+ #define check_cu(code) (check_cu_result(code, __FUNCTION__, __FILE__, __LINE__))
33
+
34
+
35
+ #if defined(__CUDACC__)
36
+ #if _DEBUG
37
+ // helper for launching kernels (synchronize + error checking after each kernel)
38
+ #define wp_launch_device(context, kernel, dim, args) { \
39
+ if (dim) { \
40
+ ContextGuard guard(context); \
41
+ cudaStream_t stream = (cudaStream_t)cuda_stream_get_current(); \
42
+ const int num_threads = 256; \
43
+ const int num_blocks = (dim+num_threads-1)/num_threads; \
44
+ begin_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream, context, #kernel); \
45
+ kernel<<<num_blocks, 256, 0, stream>>>args; \
46
+ check_cuda(cuda_context_check(WP_CURRENT_CONTEXT)); \
47
+ end_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream); }}
48
+ #else
49
+ // helper for launching kernels (no error checking)
50
+ #define wp_launch_device(context, kernel, dim, args) { \
51
+ if (dim) { \
52
+ ContextGuard guard(context); \
53
+ cudaStream_t stream = (cudaStream_t)cuda_stream_get_current(); \
54
+ const int num_threads = 256; \
55
+ const int num_blocks = (dim+num_threads-1)/num_threads; \
56
+ begin_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream, context, #kernel); \
57
+ kernel<<<num_blocks, 256, 0, stream>>>args; \
58
+ end_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream); }}
59
+ #endif // _DEBUG
60
+ #endif // defined(__CUDACC__)
61
+
62
+
63
+ CUresult cuDriverGetVersion_f(int* version);
64
+ CUresult cuGetErrorName_f(CUresult result, const char** pstr);
65
+ CUresult cuGetErrorString_f(CUresult result, const char** pstr);
66
+ CUresult cuInit_f(unsigned int flags);
67
+ CUresult cuDeviceGet_f(CUdevice *dev, int ordinal);
68
+ CUresult cuDeviceGetCount_f(int* count);
69
+ CUresult cuDeviceGetName_f(char* name, int len, CUdevice dev);
70
+ CUresult cuDeviceGetAttribute_f(int* value, CUdevice_attribute attrib, CUdevice dev);
71
+ CUresult cuDeviceGetUuid_f(CUuuid* uuid, CUdevice dev);
72
+ CUresult cuDevicePrimaryCtxRetain_f(CUcontext* ctx, CUdevice dev);
73
+ CUresult cuDevicePrimaryCtxRelease_f(CUdevice dev);
74
+ CUresult cuDeviceCanAccessPeer_f(int* can_access, CUdevice dev, CUdevice peer_dev);
75
+ CUresult cuMemGetInfo_f(size_t* free, size_t* total);
76
+ CUresult cuCtxGetCurrent_f(CUcontext* ctx);
77
+ CUresult cuCtxSetCurrent_f(CUcontext ctx);
78
+ CUresult cuCtxPushCurrent_f(CUcontext ctx);
79
+ CUresult cuCtxPopCurrent_f(CUcontext* ctx);
80
+ CUresult cuCtxSynchronize_f();
81
+ CUresult cuCtxGetDevice_f(CUdevice* dev);
82
+ CUresult cuCtxCreate_f(CUcontext* ctx, unsigned int flags, CUdevice dev);
83
+ CUresult cuCtxDestroy_f(CUcontext ctx);
84
+ CUresult cuCtxEnablePeerAccess_f(CUcontext peer_ctx, unsigned int flags);
85
+ CUresult cuCtxDisablePeerAccess_f(CUcontext peer_ctx);
86
+ CUresult cuStreamCreate_f(CUstream* stream, unsigned int flags);
87
+ CUresult cuStreamDestroy_f(CUstream stream);
88
+ CUresult cuStreamQuery_f(CUstream stream);
89
+ CUresult cuStreamSynchronize_f(CUstream stream);
90
+ CUresult cuStreamWaitEvent_f(CUstream stream, CUevent event, unsigned int flags);
91
+ CUresult cuStreamGetCtx_f(CUstream stream, CUcontext* pctx);
92
+ CUresult cuStreamGetCaptureInfo_f(CUstream stream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out, CUgraph *graph_out, const CUgraphNode **dependencies_out, size_t *numDependencies_out);
93
+ CUresult cuStreamUpdateCaptureDependencies_f(CUstream stream, CUgraphNode *dependencies, size_t numDependencies, unsigned int flags);
94
+ CUresult cuStreamCreateWithPriority_f(CUstream* phStream, unsigned int flags, int priority);
95
+ CUresult cuStreamGetPriority_f(CUstream hStream, int* priority);
96
+ CUresult cuEventCreate_f(CUevent* event, unsigned int flags);
97
+ CUresult cuEventDestroy_f(CUevent event);
98
+ CUresult cuEventQuery_f(CUevent event);
99
+ CUresult cuEventRecord_f(CUevent event, CUstream stream);
100
+ CUresult cuEventRecordWithFlags_f(CUevent event, CUstream stream, unsigned int flags);
101
+ CUresult cuEventSynchronize_f(CUevent event);
102
+ CUresult cuModuleUnload_f(CUmodule hmod);
103
+ CUresult cuModuleLoadDataEx_f(CUmodule *module, const void *image, unsigned int numOptions, CUjit_option *options, void **optionValues);
104
+ CUresult cuModuleGetFunction_f(CUfunction *hfunc, CUmodule hmod, const char *name);
105
+ CUresult cuLaunchKernel_f(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, void **extra);
106
+ CUresult cuMemcpyPeerAsync_f(CUdeviceptr dst_ptr, CUcontext dst_ctx, CUdeviceptr src_ptr, CUcontext src_ctx, size_t n, CUstream stream);
107
+ CUresult cuPointerGetAttribute_f(void* data, CUpointer_attribute attribute, CUdeviceptr ptr);
108
+ CUresult cuGraphicsMapResources_f(unsigned int count, CUgraphicsResource* resources, CUstream stream);
109
+ CUresult cuGraphicsUnmapResources_f(unsigned int count, CUgraphicsResource* resources, CUstream hStream);
110
+ CUresult cuGraphicsResourceGetMappedPointer_f(CUdeviceptr* pDevPtr, size_t* pSize, CUgraphicsResource resource);
111
+ CUresult cuGraphicsGLRegisterBuffer_f(CUgraphicsResource *pCudaResource, unsigned int buffer, unsigned int flags);
112
+ CUresult cuGraphicsUnregisterResource_f(CUgraphicsResource resource);
113
+ CUresult cuModuleGetGlobal_f(CUdeviceptr* dptr, size_t* bytes, CUmodule hmod, const char* name );
114
+ CUresult cuFuncSetAttribute_f(CUfunction hfunc, CUfunction_attribute attrib, int value);
115
+ CUresult cuIpcGetEventHandle_f(CUipcEventHandle *pHandle, CUevent event);
116
+ CUresult cuIpcOpenEventHandle_f(CUevent *phEvent, CUipcEventHandle handle);
117
+ CUresult cuIpcGetMemHandle_f(CUipcMemHandle *pHandle, CUdeviceptr dptr);
118
+ CUresult cuIpcOpenMemHandle_f(CUdeviceptr *pdptr, CUipcMemHandle handle, unsigned int flags);
119
+ CUresult cuIpcCloseMemHandle_f(CUdeviceptr dptr);
120
+
121
+ bool init_cuda_driver();
122
+ bool is_cuda_driver_initialized();
123
+
124
+ bool check_cuda_result(cudaError_t code, const char* func, const char* file, int line);
125
+
126
+ inline bool check_cuda_result(uint64_t code, const char* func, const char* file, int line)
127
+ {
128
+ return check_cuda_result(static_cast<cudaError_t>(code), func, file, line);
129
+ }
130
+
131
+ bool check_cu_result(CUresult result, const char* func, const char* file, int line);
132
+
133
+ inline uint64_t get_capture_id(CUstream stream)
134
+ {
135
+ CUstreamCaptureStatus status;
136
+ uint64_t id = 0;
137
+ check_cu(cuStreamGetCaptureInfo_f(stream, &status, &id, NULL, NULL, NULL));
138
+ return id;
139
+ }
140
+
141
+ inline CUgraph get_capture_graph(CUstream stream)
142
+ {
143
+ CUstreamCaptureStatus status;
144
+ CUgraph graph = NULL;
145
+ check_cu(cuStreamGetCaptureInfo_f(stream, &status, NULL, &graph, NULL, NULL));
146
+ return graph;
147
+ }
148
+
149
+ bool get_capture_dependencies(CUstream stream, std::vector<CUgraphNode>& dependencies_ret);
150
+
151
+ bool get_graph_leaf_nodes(cudaGraph_t graph, std::vector<cudaGraphNode_t>& leaf_nodes_ret);
152
+
153
+ inline CUcontext get_stream_context(CUstream stream)
154
+ {
155
+ CUcontext context;
156
+ if (check_cu(cuStreamGetCtx_f(stream, &context)))
157
+ return context;
158
+ else
159
+ return NULL;
160
+ }
161
+
162
+ inline CUcontext get_stream_context(void* stream)
163
+ {
164
+ return get_stream_context(static_cast<CUstream>(stream));
165
+ }
166
+
167
+
168
+ //
169
+ // Scoped CUDA context guard
170
+ //
171
+ // Behaviour on entry
172
+ // - If the given `context` is NULL, do nothing.
173
+ // - If the given `context` is the same as the current context, do nothing.
174
+ // - If the given `context` is different from the current context, make the given context current.
175
+ //
176
+ // Behaviour on exit
177
+ // - If the current context did not change on entry, do nothing.
178
+ // - If the `restore` flag was true on entry, make the previous context current.
179
+ //
180
+ // Default exit behaviour policy
181
+ // - If the `restore` flag is omitted on entry, fall back on the global `always_restore` flag.
182
+ // - This allows us to easily change the default behaviour of the guards.
183
+ //
184
+ class ContextGuard
185
+ {
186
+ public:
187
+ // default policy for restoring contexts
188
+ static bool always_restore;
189
+
190
+ explicit ContextGuard(CUcontext context, bool restore=always_restore)
191
+ : need_restore(false)
192
+ {
193
+ if (context)
194
+ {
195
+ if (check_cu(cuCtxGetCurrent_f(&prev_context)) && context != prev_context)
196
+ need_restore = check_cu(cuCtxSetCurrent_f(context)) && restore;
197
+ }
198
+ }
199
+
200
+ explicit ContextGuard(void* context, bool restore=always_restore)
201
+ : ContextGuard(static_cast<CUcontext>(context), restore)
202
+ {
203
+ }
204
+
205
+ ~ContextGuard()
206
+ {
207
+ if (need_restore)
208
+ check_cu(cuCtxSetCurrent_f(prev_context));
209
+ }
210
+
211
+ private:
212
+ CUcontext prev_context;
213
+ bool need_restore;
214
+ };
215
+
216
+
217
+ // CUDA timing range used during event-based timing
218
+ struct CudaTimingRange
219
+ {
220
+ void* context;
221
+ const char* name;
222
+ int flag;
223
+ CUevent start;
224
+ CUevent end;
225
+ };
226
+
227
+ // Timing result used to pass timings to Python
228
+ struct timing_result_t
229
+ {
230
+ void* context;
231
+ const char* name;
232
+ int flag;
233
+ float elapsed;
234
+ };
235
+
236
+ struct CudaTimingState
237
+ {
238
+ int flags;
239
+ std::vector<CudaTimingRange> ranges;
240
+ CudaTimingState* parent;
241
+
242
+ CudaTimingState(int flags, CudaTimingState* parent)
243
+ : flags(flags), parent(parent)
244
+ {
245
+ }
246
+ };
247
+
248
+ // timing flags
249
+ constexpr int WP_TIMING_KERNEL = 1; // Warp kernel
250
+ constexpr int WP_TIMING_KERNEL_BUILTIN = 2; // internal kernel
251
+ constexpr int WP_TIMING_MEMCPY = 4; // memcpy operation
252
+ constexpr int WP_TIMING_MEMSET = 8; // memset operation
253
+ constexpr int WP_TIMING_GRAPH = 16; // graph launch
254
+
255
+ #define begin_cuda_range(_flag, _stream, _context, _name) \
256
+ CudaTimingRange _timing_range; \
257
+ bool _timing_enabled; \
258
+ if ((g_cuda_timing_state->flags & _flag) && !cuda_stream_is_capturing(_stream)) { \
259
+ ContextGuard guard(_context, true); \
260
+ _timing_enabled = true; \
261
+ _timing_range.context = _context ? _context : get_current_context(); \
262
+ _timing_range.name = _name; \
263
+ _timing_range.flag = _flag; \
264
+ check_cu(cuEventCreate_f(&_timing_range.start, CU_EVENT_DEFAULT)); \
265
+ check_cu(cuEventCreate_f(&_timing_range.end, CU_EVENT_DEFAULT)); \
266
+ check_cu(cuEventRecord_f(_timing_range.start, static_cast<CUstream>(_stream))); \
267
+ } else { \
268
+ _timing_enabled = false; \
269
+ }
270
+
271
+ #define end_cuda_range(_flag, _stream) \
272
+ if (_timing_enabled) { \
273
+ check_cu(cuEventRecord_f(_timing_range.end, static_cast<CUstream>(_stream))); \
274
+ g_cuda_timing_state->ranges.push_back(_timing_range); \
275
+ }
276
+
277
+ extern CudaTimingState* g_cuda_timing_state;
278
+
279
+
280
+ #else
281
+
282
+ typedef int CUdevice;
283
+ typedef struct CUctx_st* CUcontext;
284
+ typedef struct CUstream_st* CUstream;
285
+
286
+ class ContextGuard
287
+ {
288
+ public:
289
+ explicit ContextGuard(CUcontext context, bool restore=false)
290
+ {
291
+ (void)context;
292
+ (void)restore;
293
+ }
294
+
295
+ explicit ContextGuard(void* context, bool restore=false)
296
+ {
297
+ (void)context;
298
+ (void)restore;
299
+ }
300
+ };
301
+
302
+ #endif // WP_ENABLE_CUDA
303
+
304
+ // Pass this value to device functions as the `context` parameter to bypass unnecessary context management.
305
+ // This works in conjunction with ContextGuards, which do nothing if the given context is NULL.
306
+ // Using this variable instead of passing NULL directly aids readability and makes the intent clear.
307
+ constexpr void* WP_CURRENT_CONTEXT = NULL;
warp/native/error.cpp ADDED
@@ -0,0 +1,77 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include <stdarg.h>
19
+ #include <stdio.h>
20
+ #include <string.h>
21
+
22
+ namespace wp
23
+ {
24
+ static char g_error_buffer[4096] = "";
25
+ static bool g_error_output_enabled = true;
26
+ static FILE* g_error_stream = stderr;
27
+
28
+ const char* get_error_string()
29
+ {
30
+ return g_error_buffer;
31
+ }
32
+
33
+ void set_error_string(const char* fmt, ...)
34
+ {
35
+ va_list args;
36
+ va_start(args, fmt);
37
+ vsnprintf(g_error_buffer, sizeof(g_error_buffer), fmt, args);
38
+ if (g_error_output_enabled)
39
+ {
40
+ // note: we deliberately avoid vfprintf() due to problems with runtime glibc mismatch
41
+ fputs(g_error_buffer, g_error_stream);
42
+ fputc('\n', g_error_stream);
43
+ fflush(g_error_stream);
44
+ }
45
+ va_end(args);
46
+ }
47
+
48
+ void append_error_string(const char* fmt, ...)
49
+ {
50
+ size_t offset = strlen(g_error_buffer);
51
+ if (offset + 2 > sizeof(g_error_buffer))
52
+ return;
53
+ g_error_buffer[offset++] = '\n';
54
+ va_list args;
55
+ va_start(args, fmt);
56
+ vsnprintf(g_error_buffer + offset, sizeof(g_error_buffer) - offset, fmt, args);
57
+ if (g_error_output_enabled)
58
+ {
59
+ // note: we deliberately avoid vfprintf() due to problems with runtime glibc mismatch
60
+ fputs(g_error_buffer + offset, g_error_stream);
61
+ fputc('\n', g_error_stream);
62
+ fflush(g_error_stream);
63
+ }
64
+ va_end(args);
65
+ }
66
+
67
+ void set_error_output_enabled(bool enable)
68
+ {
69
+ g_error_output_enabled = enable;
70
+ }
71
+
72
+ bool is_error_output_enabled()
73
+ {
74
+ return g_error_output_enabled;
75
+ }
76
+
77
+ } // end of namespace wp
warp/native/error.h ADDED
@@ -0,0 +1,36 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ namespace wp
21
+ {
22
+ // functions related to error reporting
23
+
24
+ // get error string from Python
25
+ const char* get_error_string();
26
+
27
+ // set error message for Python
28
+ // these functions also print the error message if error output is enabled
29
+ void set_error_string(const char* fmt, ...);
30
+ void append_error_string(const char* fmt, ...);
31
+
32
+ // allow disabling printing errors, which is handy during tests that expect failure
33
+ void set_error_output_enabled(bool enable);
34
+ bool is_error_output_enabled();
35
+
36
+ }