warp-lang 1.10.0__py3-none-macosx_11_0_arm64.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 (468) hide show
  1. warp/__init__.py +334 -0
  2. warp/__init__.pyi +5856 -0
  3. warp/_src/__init__.py +14 -0
  4. warp/_src/autograd.py +1077 -0
  5. warp/_src/build.py +620 -0
  6. warp/_src/build_dll.py +642 -0
  7. warp/_src/builtins.py +10555 -0
  8. warp/_src/codegen.py +4361 -0
  9. warp/_src/config.py +178 -0
  10. warp/_src/constants.py +59 -0
  11. warp/_src/context.py +8352 -0
  12. warp/_src/dlpack.py +464 -0
  13. warp/_src/fabric.py +362 -0
  14. warp/_src/fem/__init__.py +14 -0
  15. warp/_src/fem/adaptivity.py +510 -0
  16. warp/_src/fem/cache.py +689 -0
  17. warp/_src/fem/dirichlet.py +190 -0
  18. warp/_src/fem/domain.py +553 -0
  19. warp/_src/fem/field/__init__.py +131 -0
  20. warp/_src/fem/field/field.py +703 -0
  21. warp/_src/fem/field/nodal_field.py +403 -0
  22. warp/_src/fem/field/restriction.py +39 -0
  23. warp/_src/fem/field/virtual.py +1021 -0
  24. warp/_src/fem/geometry/__init__.py +32 -0
  25. warp/_src/fem/geometry/adaptive_nanogrid.py +782 -0
  26. warp/_src/fem/geometry/closest_point.py +99 -0
  27. warp/_src/fem/geometry/deformed_geometry.py +277 -0
  28. warp/_src/fem/geometry/element.py +854 -0
  29. warp/_src/fem/geometry/geometry.py +693 -0
  30. warp/_src/fem/geometry/grid_2d.py +478 -0
  31. warp/_src/fem/geometry/grid_3d.py +539 -0
  32. warp/_src/fem/geometry/hexmesh.py +956 -0
  33. warp/_src/fem/geometry/nanogrid.py +660 -0
  34. warp/_src/fem/geometry/partition.py +483 -0
  35. warp/_src/fem/geometry/quadmesh.py +597 -0
  36. warp/_src/fem/geometry/tetmesh.py +762 -0
  37. warp/_src/fem/geometry/trimesh.py +588 -0
  38. warp/_src/fem/integrate.py +2507 -0
  39. warp/_src/fem/linalg.py +385 -0
  40. warp/_src/fem/operator.py +398 -0
  41. warp/_src/fem/polynomial.py +231 -0
  42. warp/_src/fem/quadrature/__init__.py +17 -0
  43. warp/_src/fem/quadrature/pic_quadrature.py +318 -0
  44. warp/_src/fem/quadrature/quadrature.py +665 -0
  45. warp/_src/fem/space/__init__.py +248 -0
  46. warp/_src/fem/space/basis_function_space.py +499 -0
  47. warp/_src/fem/space/basis_space.py +681 -0
  48. warp/_src/fem/space/dof_mapper.py +253 -0
  49. warp/_src/fem/space/function_space.py +312 -0
  50. warp/_src/fem/space/grid_2d_function_space.py +179 -0
  51. warp/_src/fem/space/grid_3d_function_space.py +229 -0
  52. warp/_src/fem/space/hexmesh_function_space.py +255 -0
  53. warp/_src/fem/space/nanogrid_function_space.py +199 -0
  54. warp/_src/fem/space/partition.py +435 -0
  55. warp/_src/fem/space/quadmesh_function_space.py +222 -0
  56. warp/_src/fem/space/restriction.py +221 -0
  57. warp/_src/fem/space/shape/__init__.py +152 -0
  58. warp/_src/fem/space/shape/cube_shape_function.py +1107 -0
  59. warp/_src/fem/space/shape/shape_function.py +134 -0
  60. warp/_src/fem/space/shape/square_shape_function.py +928 -0
  61. warp/_src/fem/space/shape/tet_shape_function.py +829 -0
  62. warp/_src/fem/space/shape/triangle_shape_function.py +674 -0
  63. warp/_src/fem/space/tetmesh_function_space.py +270 -0
  64. warp/_src/fem/space/topology.py +461 -0
  65. warp/_src/fem/space/trimesh_function_space.py +193 -0
  66. warp/_src/fem/types.py +114 -0
  67. warp/_src/fem/utils.py +488 -0
  68. warp/_src/jax.py +188 -0
  69. warp/_src/jax_experimental/__init__.py +14 -0
  70. warp/_src/jax_experimental/custom_call.py +389 -0
  71. warp/_src/jax_experimental/ffi.py +1286 -0
  72. warp/_src/jax_experimental/xla_ffi.py +658 -0
  73. warp/_src/marching_cubes.py +710 -0
  74. warp/_src/math.py +416 -0
  75. warp/_src/optim/__init__.py +14 -0
  76. warp/_src/optim/adam.py +165 -0
  77. warp/_src/optim/linear.py +1608 -0
  78. warp/_src/optim/sgd.py +114 -0
  79. warp/_src/paddle.py +408 -0
  80. warp/_src/render/__init__.py +14 -0
  81. warp/_src/render/imgui_manager.py +291 -0
  82. warp/_src/render/render_opengl.py +3638 -0
  83. warp/_src/render/render_usd.py +939 -0
  84. warp/_src/render/utils.py +162 -0
  85. warp/_src/sparse.py +2718 -0
  86. warp/_src/tape.py +1208 -0
  87. warp/_src/thirdparty/__init__.py +0 -0
  88. warp/_src/thirdparty/appdirs.py +598 -0
  89. warp/_src/thirdparty/dlpack.py +145 -0
  90. warp/_src/thirdparty/unittest_parallel.py +676 -0
  91. warp/_src/torch.py +393 -0
  92. warp/_src/types.py +5888 -0
  93. warp/_src/utils.py +1695 -0
  94. warp/autograd.py +33 -0
  95. warp/bin/libwarp-clang.dylib +0 -0
  96. warp/bin/libwarp.dylib +0 -0
  97. warp/build.py +29 -0
  98. warp/build_dll.py +24 -0
  99. warp/codegen.py +24 -0
  100. warp/constants.py +24 -0
  101. warp/context.py +33 -0
  102. warp/dlpack.py +24 -0
  103. warp/examples/__init__.py +24 -0
  104. warp/examples/assets/bear.usd +0 -0
  105. warp/examples/assets/bunny.usd +0 -0
  106. warp/examples/assets/cube.usd +0 -0
  107. warp/examples/assets/nonuniform.usd +0 -0
  108. warp/examples/assets/nvidia_logo.png +0 -0
  109. warp/examples/assets/pixel.jpg +0 -0
  110. warp/examples/assets/rocks.nvdb +0 -0
  111. warp/examples/assets/rocks.usd +0 -0
  112. warp/examples/assets/sphere.usd +0 -0
  113. warp/examples/assets/square_cloth.usd +0 -0
  114. warp/examples/benchmarks/benchmark_api.py +389 -0
  115. warp/examples/benchmarks/benchmark_cloth.py +296 -0
  116. warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
  117. warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
  118. warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
  119. warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
  120. warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
  121. warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
  122. warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
  123. warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
  124. warp/examples/benchmarks/benchmark_gemm.py +164 -0
  125. warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
  126. warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
  127. warp/examples/benchmarks/benchmark_launches.py +301 -0
  128. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  129. warp/examples/benchmarks/benchmark_tile_sort.py +155 -0
  130. warp/examples/browse.py +37 -0
  131. warp/examples/core/example_cupy.py +86 -0
  132. warp/examples/core/example_dem.py +241 -0
  133. warp/examples/core/example_fluid.py +299 -0
  134. warp/examples/core/example_graph_capture.py +150 -0
  135. warp/examples/core/example_marching_cubes.py +195 -0
  136. warp/examples/core/example_mesh.py +180 -0
  137. warp/examples/core/example_mesh_intersect.py +211 -0
  138. warp/examples/core/example_nvdb.py +182 -0
  139. warp/examples/core/example_raycast.py +111 -0
  140. warp/examples/core/example_raymarch.py +205 -0
  141. warp/examples/core/example_render_opengl.py +290 -0
  142. warp/examples/core/example_sample_mesh.py +300 -0
  143. warp/examples/core/example_sph.py +411 -0
  144. warp/examples/core/example_spin_lock.py +93 -0
  145. warp/examples/core/example_torch.py +211 -0
  146. warp/examples/core/example_wave.py +269 -0
  147. warp/examples/core/example_work_queue.py +118 -0
  148. warp/examples/distributed/example_jacobi_mpi.py +506 -0
  149. warp/examples/fem/example_adaptive_grid.py +286 -0
  150. warp/examples/fem/example_apic_fluid.py +469 -0
  151. warp/examples/fem/example_burgers.py +261 -0
  152. warp/examples/fem/example_convection_diffusion.py +181 -0
  153. warp/examples/fem/example_convection_diffusion_dg.py +225 -0
  154. warp/examples/fem/example_darcy_ls_optimization.py +489 -0
  155. warp/examples/fem/example_deformed_geometry.py +172 -0
  156. warp/examples/fem/example_diffusion.py +196 -0
  157. warp/examples/fem/example_diffusion_3d.py +225 -0
  158. warp/examples/fem/example_diffusion_mgpu.py +225 -0
  159. warp/examples/fem/example_distortion_energy.py +228 -0
  160. warp/examples/fem/example_elastic_shape_optimization.py +387 -0
  161. warp/examples/fem/example_magnetostatics.py +242 -0
  162. warp/examples/fem/example_mixed_elasticity.py +293 -0
  163. warp/examples/fem/example_navier_stokes.py +263 -0
  164. warp/examples/fem/example_nonconforming_contact.py +300 -0
  165. warp/examples/fem/example_stokes.py +213 -0
  166. warp/examples/fem/example_stokes_transfer.py +262 -0
  167. warp/examples/fem/example_streamlines.py +357 -0
  168. warp/examples/fem/utils.py +1047 -0
  169. warp/examples/interop/example_jax_callable.py +146 -0
  170. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  171. warp/examples/interop/example_jax_kernel.py +232 -0
  172. warp/examples/optim/example_diffray.py +561 -0
  173. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  174. warp/examples/tile/example_tile_block_cholesky.py +502 -0
  175. warp/examples/tile/example_tile_cholesky.py +88 -0
  176. warp/examples/tile/example_tile_convolution.py +66 -0
  177. warp/examples/tile/example_tile_fft.py +55 -0
  178. warp/examples/tile/example_tile_filtering.py +113 -0
  179. warp/examples/tile/example_tile_matmul.py +85 -0
  180. warp/examples/tile/example_tile_mcgp.py +191 -0
  181. warp/examples/tile/example_tile_mlp.py +385 -0
  182. warp/examples/tile/example_tile_nbody.py +199 -0
  183. warp/fabric.py +24 -0
  184. warp/fem/__init__.py +173 -0
  185. warp/fem/adaptivity.py +26 -0
  186. warp/fem/cache.py +30 -0
  187. warp/fem/dirichlet.py +24 -0
  188. warp/fem/field/__init__.py +24 -0
  189. warp/fem/field/field.py +26 -0
  190. warp/fem/geometry/__init__.py +21 -0
  191. warp/fem/geometry/closest_point.py +31 -0
  192. warp/fem/linalg.py +38 -0
  193. warp/fem/operator.py +32 -0
  194. warp/fem/polynomial.py +29 -0
  195. warp/fem/space/__init__.py +22 -0
  196. warp/fem/space/basis_space.py +24 -0
  197. warp/fem/space/shape/__init__.py +68 -0
  198. warp/fem/space/topology.py +24 -0
  199. warp/fem/types.py +24 -0
  200. warp/fem/utils.py +32 -0
  201. warp/jax.py +29 -0
  202. warp/jax_experimental/__init__.py +29 -0
  203. warp/jax_experimental/custom_call.py +29 -0
  204. warp/jax_experimental/ffi.py +39 -0
  205. warp/jax_experimental/xla_ffi.py +24 -0
  206. warp/marching_cubes.py +24 -0
  207. warp/math.py +37 -0
  208. warp/native/array.h +1687 -0
  209. warp/native/builtin.h +2327 -0
  210. warp/native/bvh.cpp +562 -0
  211. warp/native/bvh.cu +826 -0
  212. warp/native/bvh.h +555 -0
  213. warp/native/clang/clang.cpp +541 -0
  214. warp/native/coloring.cpp +622 -0
  215. warp/native/crt.cpp +51 -0
  216. warp/native/crt.h +568 -0
  217. warp/native/cuda_crt.h +1058 -0
  218. warp/native/cuda_util.cpp +677 -0
  219. warp/native/cuda_util.h +313 -0
  220. warp/native/error.cpp +77 -0
  221. warp/native/error.h +36 -0
  222. warp/native/exports.h +2023 -0
  223. warp/native/fabric.h +246 -0
  224. warp/native/hashgrid.cpp +311 -0
  225. warp/native/hashgrid.cu +89 -0
  226. warp/native/hashgrid.h +240 -0
  227. warp/native/initializer_array.h +41 -0
  228. warp/native/intersect.h +1253 -0
  229. warp/native/intersect_adj.h +375 -0
  230. warp/native/intersect_tri.h +348 -0
  231. warp/native/mat.h +5189 -0
  232. warp/native/mathdx.cpp +93 -0
  233. warp/native/matnn.h +221 -0
  234. warp/native/mesh.cpp +266 -0
  235. warp/native/mesh.cu +406 -0
  236. warp/native/mesh.h +2097 -0
  237. warp/native/nanovdb/GridHandle.h +533 -0
  238. warp/native/nanovdb/HostBuffer.h +591 -0
  239. warp/native/nanovdb/NanoVDB.h +6246 -0
  240. warp/native/nanovdb/NodeManager.h +323 -0
  241. warp/native/nanovdb/PNanoVDB.h +3390 -0
  242. warp/native/noise.h +859 -0
  243. warp/native/quat.h +1664 -0
  244. warp/native/rand.h +342 -0
  245. warp/native/range.h +145 -0
  246. warp/native/reduce.cpp +174 -0
  247. warp/native/reduce.cu +363 -0
  248. warp/native/runlength_encode.cpp +79 -0
  249. warp/native/runlength_encode.cu +61 -0
  250. warp/native/scan.cpp +47 -0
  251. warp/native/scan.cu +55 -0
  252. warp/native/scan.h +23 -0
  253. warp/native/solid_angle.h +466 -0
  254. warp/native/sort.cpp +251 -0
  255. warp/native/sort.cu +286 -0
  256. warp/native/sort.h +35 -0
  257. warp/native/sparse.cpp +241 -0
  258. warp/native/sparse.cu +435 -0
  259. warp/native/spatial.h +1306 -0
  260. warp/native/svd.h +727 -0
  261. warp/native/temp_buffer.h +46 -0
  262. warp/native/tile.h +4124 -0
  263. warp/native/tile_radix_sort.h +1112 -0
  264. warp/native/tile_reduce.h +838 -0
  265. warp/native/tile_scan.h +240 -0
  266. warp/native/tuple.h +189 -0
  267. warp/native/vec.h +2199 -0
  268. warp/native/version.h +23 -0
  269. warp/native/volume.cpp +501 -0
  270. warp/native/volume.cu +68 -0
  271. warp/native/volume.h +970 -0
  272. warp/native/volume_builder.cu +483 -0
  273. warp/native/volume_builder.h +52 -0
  274. warp/native/volume_impl.h +70 -0
  275. warp/native/warp.cpp +1143 -0
  276. warp/native/warp.cu +4604 -0
  277. warp/native/warp.h +358 -0
  278. warp/optim/__init__.py +20 -0
  279. warp/optim/adam.py +24 -0
  280. warp/optim/linear.py +35 -0
  281. warp/optim/sgd.py +24 -0
  282. warp/paddle.py +24 -0
  283. warp/py.typed +0 -0
  284. warp/render/__init__.py +22 -0
  285. warp/render/imgui_manager.py +29 -0
  286. warp/render/render_opengl.py +24 -0
  287. warp/render/render_usd.py +24 -0
  288. warp/render/utils.py +24 -0
  289. warp/sparse.py +51 -0
  290. warp/tape.py +24 -0
  291. warp/tests/__init__.py +1 -0
  292. warp/tests/__main__.py +4 -0
  293. warp/tests/assets/curlnoise_golden.npy +0 -0
  294. warp/tests/assets/mlp_golden.npy +0 -0
  295. warp/tests/assets/pixel.npy +0 -0
  296. warp/tests/assets/pnoise_golden.npy +0 -0
  297. warp/tests/assets/spiky.usd +0 -0
  298. warp/tests/assets/test_grid.nvdb +0 -0
  299. warp/tests/assets/test_index_grid.nvdb +0 -0
  300. warp/tests/assets/test_int32_grid.nvdb +0 -0
  301. warp/tests/assets/test_vec_grid.nvdb +0 -0
  302. warp/tests/assets/torus.nvdb +0 -0
  303. warp/tests/assets/torus.usda +105 -0
  304. warp/tests/aux_test_class_kernel.py +34 -0
  305. warp/tests/aux_test_compile_consts_dummy.py +18 -0
  306. warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
  307. warp/tests/aux_test_dependent.py +29 -0
  308. warp/tests/aux_test_grad_customs.py +29 -0
  309. warp/tests/aux_test_instancing_gc.py +26 -0
  310. warp/tests/aux_test_module_aot.py +7 -0
  311. warp/tests/aux_test_module_unload.py +23 -0
  312. warp/tests/aux_test_name_clash1.py +40 -0
  313. warp/tests/aux_test_name_clash2.py +40 -0
  314. warp/tests/aux_test_reference.py +9 -0
  315. warp/tests/aux_test_reference_reference.py +8 -0
  316. warp/tests/aux_test_square.py +16 -0
  317. warp/tests/aux_test_unresolved_func.py +22 -0
  318. warp/tests/aux_test_unresolved_symbol.py +22 -0
  319. warp/tests/cuda/__init__.py +0 -0
  320. warp/tests/cuda/test_async.py +676 -0
  321. warp/tests/cuda/test_conditional_captures.py +1147 -0
  322. warp/tests/cuda/test_ipc.py +124 -0
  323. warp/tests/cuda/test_mempool.py +233 -0
  324. warp/tests/cuda/test_multigpu.py +169 -0
  325. warp/tests/cuda/test_peer.py +139 -0
  326. warp/tests/cuda/test_pinned.py +84 -0
  327. warp/tests/cuda/test_streams.py +691 -0
  328. warp/tests/geometry/__init__.py +0 -0
  329. warp/tests/geometry/test_bvh.py +335 -0
  330. warp/tests/geometry/test_hash_grid.py +259 -0
  331. warp/tests/geometry/test_marching_cubes.py +294 -0
  332. warp/tests/geometry/test_mesh.py +318 -0
  333. warp/tests/geometry/test_mesh_query_aabb.py +392 -0
  334. warp/tests/geometry/test_mesh_query_point.py +935 -0
  335. warp/tests/geometry/test_mesh_query_ray.py +323 -0
  336. warp/tests/geometry/test_volume.py +1103 -0
  337. warp/tests/geometry/test_volume_write.py +346 -0
  338. warp/tests/interop/__init__.py +0 -0
  339. warp/tests/interop/test_dlpack.py +730 -0
  340. warp/tests/interop/test_jax.py +1673 -0
  341. warp/tests/interop/test_paddle.py +800 -0
  342. warp/tests/interop/test_torch.py +1001 -0
  343. warp/tests/run_coverage_serial.py +39 -0
  344. warp/tests/test_adam.py +162 -0
  345. warp/tests/test_arithmetic.py +1096 -0
  346. warp/tests/test_array.py +3756 -0
  347. warp/tests/test_array_reduce.py +156 -0
  348. warp/tests/test_assert.py +303 -0
  349. warp/tests/test_atomic.py +336 -0
  350. warp/tests/test_atomic_bitwise.py +209 -0
  351. warp/tests/test_atomic_cas.py +312 -0
  352. warp/tests/test_bool.py +220 -0
  353. warp/tests/test_builtins_resolution.py +732 -0
  354. warp/tests/test_closest_point_edge_edge.py +327 -0
  355. warp/tests/test_codegen.py +974 -0
  356. warp/tests/test_codegen_instancing.py +1495 -0
  357. warp/tests/test_compile_consts.py +215 -0
  358. warp/tests/test_conditional.py +298 -0
  359. warp/tests/test_context.py +35 -0
  360. warp/tests/test_copy.py +319 -0
  361. warp/tests/test_ctypes.py +618 -0
  362. warp/tests/test_dense.py +73 -0
  363. warp/tests/test_devices.py +127 -0
  364. warp/tests/test_enum.py +136 -0
  365. warp/tests/test_examples.py +424 -0
  366. warp/tests/test_fabricarray.py +998 -0
  367. warp/tests/test_fast_math.py +72 -0
  368. warp/tests/test_fem.py +2204 -0
  369. warp/tests/test_fixedarray.py +229 -0
  370. warp/tests/test_fp16.py +136 -0
  371. warp/tests/test_func.py +501 -0
  372. warp/tests/test_future_annotations.py +100 -0
  373. warp/tests/test_generics.py +656 -0
  374. warp/tests/test_grad.py +893 -0
  375. warp/tests/test_grad_customs.py +339 -0
  376. warp/tests/test_grad_debug.py +341 -0
  377. warp/tests/test_implicit_init.py +411 -0
  378. warp/tests/test_import.py +45 -0
  379. warp/tests/test_indexedarray.py +1140 -0
  380. warp/tests/test_intersect.py +103 -0
  381. warp/tests/test_iter.py +76 -0
  382. warp/tests/test_large.py +177 -0
  383. warp/tests/test_launch.py +411 -0
  384. warp/tests/test_lerp.py +151 -0
  385. warp/tests/test_linear_solvers.py +223 -0
  386. warp/tests/test_lvalue.py +427 -0
  387. warp/tests/test_map.py +526 -0
  388. warp/tests/test_mat.py +3515 -0
  389. warp/tests/test_mat_assign_copy.py +178 -0
  390. warp/tests/test_mat_constructors.py +573 -0
  391. warp/tests/test_mat_lite.py +122 -0
  392. warp/tests/test_mat_scalar_ops.py +2913 -0
  393. warp/tests/test_math.py +212 -0
  394. warp/tests/test_module_aot.py +287 -0
  395. warp/tests/test_module_hashing.py +258 -0
  396. warp/tests/test_modules_lite.py +70 -0
  397. warp/tests/test_noise.py +252 -0
  398. warp/tests/test_operators.py +299 -0
  399. warp/tests/test_options.py +129 -0
  400. warp/tests/test_overwrite.py +551 -0
  401. warp/tests/test_print.py +408 -0
  402. warp/tests/test_quat.py +2653 -0
  403. warp/tests/test_quat_assign_copy.py +145 -0
  404. warp/tests/test_rand.py +339 -0
  405. warp/tests/test_reload.py +303 -0
  406. warp/tests/test_rounding.py +157 -0
  407. warp/tests/test_runlength_encode.py +196 -0
  408. warp/tests/test_scalar_ops.py +133 -0
  409. warp/tests/test_smoothstep.py +108 -0
  410. warp/tests/test_snippet.py +318 -0
  411. warp/tests/test_sparse.py +845 -0
  412. warp/tests/test_spatial.py +2859 -0
  413. warp/tests/test_spatial_assign_copy.py +160 -0
  414. warp/tests/test_special_values.py +361 -0
  415. warp/tests/test_static.py +640 -0
  416. warp/tests/test_struct.py +901 -0
  417. warp/tests/test_tape.py +242 -0
  418. warp/tests/test_transient_module.py +93 -0
  419. warp/tests/test_triangle_closest_point.py +192 -0
  420. warp/tests/test_tuple.py +361 -0
  421. warp/tests/test_types.py +615 -0
  422. warp/tests/test_utils.py +594 -0
  423. warp/tests/test_vec.py +1408 -0
  424. warp/tests/test_vec_assign_copy.py +143 -0
  425. warp/tests/test_vec_constructors.py +325 -0
  426. warp/tests/test_vec_lite.py +80 -0
  427. warp/tests/test_vec_scalar_ops.py +2327 -0
  428. warp/tests/test_verify_fp.py +100 -0
  429. warp/tests/test_version.py +75 -0
  430. warp/tests/tile/__init__.py +0 -0
  431. warp/tests/tile/test_tile.py +1519 -0
  432. warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
  433. warp/tests/tile/test_tile_cholesky.py +608 -0
  434. warp/tests/tile/test_tile_load.py +724 -0
  435. warp/tests/tile/test_tile_mathdx.py +156 -0
  436. warp/tests/tile/test_tile_matmul.py +179 -0
  437. warp/tests/tile/test_tile_mlp.py +400 -0
  438. warp/tests/tile/test_tile_reduce.py +950 -0
  439. warp/tests/tile/test_tile_shared_memory.py +376 -0
  440. warp/tests/tile/test_tile_sort.py +121 -0
  441. warp/tests/tile/test_tile_view.py +173 -0
  442. warp/tests/unittest_serial.py +47 -0
  443. warp/tests/unittest_suites.py +430 -0
  444. warp/tests/unittest_utils.py +469 -0
  445. warp/tests/walkthrough_debug.py +95 -0
  446. warp/torch.py +24 -0
  447. warp/types.py +51 -0
  448. warp/utils.py +31 -0
  449. warp_lang-1.10.0.dist-info/METADATA +459 -0
  450. warp_lang-1.10.0.dist-info/RECORD +468 -0
  451. warp_lang-1.10.0.dist-info/WHEEL +5 -0
  452. warp_lang-1.10.0.dist-info/licenses/LICENSE.md +176 -0
  453. warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
  454. warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
  455. warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
  456. warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
  457. warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
  458. warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
  459. warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
  460. warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
  461. warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
  462. warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
  463. warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
  464. warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
  465. warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
  466. warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
  467. warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
  468. warp_lang-1.10.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,469 @@
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 ctypes
17
+ import ctypes.util
18
+ import importlib.util
19
+ import os
20
+ import sys
21
+ import time
22
+ import unittest
23
+ from typing import Optional
24
+
25
+ import numpy as np
26
+
27
+ import warp as wp
28
+
29
+ pxr = importlib.util.find_spec("pxr")
30
+ USD_AVAILABLE = pxr is not None
31
+
32
+ # default test mode (see get_test_devices())
33
+ # "basic" - only run on CPU and first GPU device
34
+ # "unique" - run on CPU and all unique GPU arches
35
+ # "unique_or_2x" - run on CPU and all unique GPU arches. If there is a single GPU arch, add a second GPU if it exists.
36
+ # "all" - run on all devices
37
+ test_mode = "unique_or_2x"
38
+
39
+ coverage_enabled = False
40
+ coverage_temp_dir = None
41
+ coverage_branch = None
42
+
43
+ try:
44
+ if sys.platform == "win32":
45
+ LIBC = ctypes.CDLL("ucrtbase.dll")
46
+ else:
47
+ LIBC = ctypes.CDLL(ctypes.util.find_library("c"))
48
+ except OSError:
49
+ print("Failed to load the standard C library")
50
+ LIBC = None
51
+
52
+
53
+ def get_selected_cuda_test_devices(mode: Optional[str] = None):
54
+ """Returns a list of CUDA devices according the selected ``mode`` behavior.
55
+
56
+ If ``mode`` is ``None``, the ``global test_mode`` value will be used and
57
+ this list will be a subset of the devices returned from ``get_test_devices()``.
58
+
59
+ Args:
60
+ mode: ``"basic"``, returns a list containing up to a single CUDA device.
61
+ ``"unique"``, returns a list containing no more than one device of
62
+ every CUDA architecture on the system.
63
+ ``"unique_or_2x"`` behaves like ``"unique"`` but adds up to one
64
+ additional CUDA device if the system only devices of a single CUDA
65
+ architecture.
66
+ """
67
+
68
+ if mode is None:
69
+ mode = test_mode
70
+
71
+ if mode == "basic":
72
+ if wp.is_cuda_available():
73
+ return [wp.get_device("cuda:0")]
74
+ else:
75
+ return []
76
+
77
+ cuda_devices = wp.get_cuda_devices()
78
+ first_cuda_devices = {}
79
+
80
+ for d in cuda_devices:
81
+ if d.arch not in first_cuda_devices:
82
+ first_cuda_devices[d.arch] = d
83
+
84
+ selected_cuda_devices = list(first_cuda_devices.values())
85
+
86
+ if mode == "unique_or_2x" and len(selected_cuda_devices) == 1 and len(cuda_devices) > 1:
87
+ for d in cuda_devices:
88
+ if d not in selected_cuda_devices:
89
+ selected_cuda_devices.append(d)
90
+ break
91
+
92
+ return selected_cuda_devices
93
+
94
+
95
+ def get_test_devices(mode: Optional[str] = None):
96
+ """Returns a list of devices based on the mode selected.
97
+
98
+ Args:
99
+ mode: The testing mode to specify which devices to include. If not provided or ``None``, the
100
+ ``global test_mode`` value will be used.
101
+ "basic": Returns the CPU and the first GPU device when available.
102
+ "unique": Returns the CPU and all unique GPU architectures.
103
+ "unique_or_2x" (default): Behaves like "unique" but adds up to one additional CUDA device
104
+ if the system only devices of a single CUDA architecture.
105
+ "all": Returns all available devices.
106
+ """
107
+ if mode is None:
108
+ mode = test_mode
109
+
110
+ devices = []
111
+
112
+ if mode == "basic":
113
+ # only run on CPU and first GPU device
114
+ if wp.is_cpu_available():
115
+ devices.append(wp.get_device("cpu"))
116
+ if wp.is_cuda_available():
117
+ devices.append(wp.get_device("cuda:0"))
118
+ elif mode == "unique" or mode == "unique_or_2x":
119
+ # run on CPU and a subset of GPUs
120
+ if wp.is_cpu_available():
121
+ devices.append(wp.get_device("cpu"))
122
+ devices.extend(get_selected_cuda_test_devices(mode))
123
+ elif mode == "all":
124
+ # run on all devices
125
+ devices = wp.get_devices()
126
+ else:
127
+ raise ValueError(f"Unknown test mode selected: {mode}")
128
+
129
+ return devices
130
+
131
+
132
+ def get_cuda_test_devices(mode=None):
133
+ devices = get_test_devices(mode=mode)
134
+ return [d for d in devices if d.is_cuda]
135
+
136
+
137
+ class StreamCapture:
138
+ def __init__(self, stream_name):
139
+ self.stream_name = stream_name # 'stdout' or 'stderr'
140
+ self.saved = None
141
+ self.target = None
142
+ self.tempfile = None
143
+
144
+ def begin(self):
145
+ # Flush the stream buffers managed by libc.
146
+ # This is needed at the moment due to Carbonite not flushing the logs
147
+ # being printed out when extensions are starting up.
148
+ if LIBC is not None:
149
+ LIBC.fflush(None)
150
+
151
+ # Get the stream object (sys.stdout or sys.stderr)
152
+ self.saved = getattr(sys, self.stream_name)
153
+ self.target = os.dup(self.saved.fileno())
154
+
155
+ # create temporary capture stream
156
+ import io
157
+ import tempfile
158
+
159
+ # Create temporary capture stream
160
+ self.tempfile = io.TextIOWrapper(
161
+ tempfile.TemporaryFile(buffering=0),
162
+ encoding="utf-8",
163
+ errors="replace",
164
+ newline="",
165
+ write_through=True,
166
+ )
167
+
168
+ # Redirect the stream
169
+ os.dup2(self.tempfile.fileno(), self.saved.fileno())
170
+ setattr(sys, self.stream_name, self.tempfile)
171
+
172
+ def end(self):
173
+ # The following sleep doesn't seem to fix the test_print failure on Windows
174
+ # if sys.platform == "win32":
175
+ # # Workaround for what seems to be a Windows-specific bug where
176
+ # # the output of CUDA's printf is not being immediately flushed
177
+ # # despite the context synchronization.
178
+ # time.sleep(0.01)
179
+ if LIBC is not None:
180
+ LIBC.fflush(None)
181
+
182
+ # Restore the original stream
183
+ os.dup2(self.target, self.saved.fileno())
184
+ os.close(self.target)
185
+
186
+ # Read the captured output
187
+ self.tempfile.seek(0)
188
+ res = self.tempfile.buffer.read()
189
+ self.tempfile.close()
190
+
191
+ # Restore the stream object
192
+ setattr(sys, self.stream_name, self.saved)
193
+
194
+ return str(res.decode("utf-8"))
195
+
196
+
197
+ # Subclasses for specific streams
198
+ class StdErrCapture(StreamCapture):
199
+ def __init__(self):
200
+ super().__init__("stderr")
201
+
202
+
203
+ class StdOutCapture(StreamCapture):
204
+ def __init__(self):
205
+ super().__init__("stdout")
206
+
207
+
208
+ class CheckOutput:
209
+ def __init__(self, test):
210
+ self.test = test
211
+
212
+ def __enter__(self):
213
+ # wp.force_load()
214
+
215
+ self.capture = StdOutCapture()
216
+ self.capture.begin()
217
+
218
+ def __exit__(self, exc_type, exc_value, traceback):
219
+ # ensure any stdout output is flushed
220
+ wp.synchronize()
221
+
222
+ s = self.capture.end()
223
+ if s != "":
224
+ print(s.rstrip())
225
+
226
+ # fail if test produces unexpected output (e.g.: from wp.expect_eq() builtins)
227
+ # we allow strings starting of the form "Module xxx load on device xxx"
228
+ # for lazy loaded modules
229
+ filtered_s = "\n".join(
230
+ [line for line in s.splitlines() if not (line.startswith("Module") and "load on device" in line)]
231
+ )
232
+
233
+ if filtered_s.strip():
234
+ self.test.fail(f"Unexpected output:\n'{s.rstrip()}'")
235
+
236
+
237
+ def assert_array_equal(result: wp.array, expect: wp.array):
238
+ np.testing.assert_equal(result.numpy(), expect.numpy())
239
+
240
+
241
+ def assert_np_equal(result: np.ndarray, expect: np.ndarray, tol=0.0):
242
+ if tol != 0.0:
243
+ # TODO: Get all tests working without the .flatten()
244
+ np.testing.assert_allclose(result.flatten(), expect.flatten(), atol=tol, equal_nan=True)
245
+ else:
246
+ # TODO: Get all tests working with strict=True
247
+ np.testing.assert_array_equal(result, expect)
248
+
249
+
250
+ # if check_output is True any output to stdout will be treated as an error
251
+ def create_test_func(func, device, check_output, **kwargs):
252
+ # pass args to func
253
+ def test_func(self):
254
+ if check_output:
255
+ with CheckOutput(self):
256
+ func(self, device, **kwargs)
257
+ else:
258
+ func(self, device, **kwargs)
259
+
260
+ # Copy the __unittest_expecting_failure__ attribute from func to test_func
261
+ if hasattr(func, "__unittest_expecting_failure__"):
262
+ test_func.__unittest_expecting_failure__ = func.__unittest_expecting_failure__
263
+
264
+ return test_func
265
+
266
+
267
+ def skip_test_func(self):
268
+ # A function to use so we can tell unittest that the test was skipped.
269
+ self.skipTest("No suitable devices to run the test.")
270
+
271
+
272
+ def sanitize_identifier(s):
273
+ """replace all non-identifier characters with '_'"""
274
+
275
+ s = str(s)
276
+ if s.isidentifier():
277
+ return s
278
+ else:
279
+ import re
280
+
281
+ return re.sub(r"\W|^(?=\d)", "_", s)
282
+
283
+
284
+ def add_function_test(cls, name, func, devices=None, check_output=True, **kwargs):
285
+ if devices is None:
286
+ setattr(cls, name, create_test_func(func, None, check_output, **kwargs))
287
+ elif isinstance(devices, list):
288
+ if not devices:
289
+ # No devices to run this test
290
+ setattr(cls, name, skip_test_func)
291
+ else:
292
+ for device in devices:
293
+ setattr(
294
+ cls,
295
+ name + "_" + sanitize_identifier(device),
296
+ create_test_func(func, device, check_output, **kwargs),
297
+ )
298
+ else:
299
+ setattr(
300
+ cls,
301
+ name + "_" + sanitize_identifier(devices),
302
+ create_test_func(func, devices, check_output, **kwargs),
303
+ )
304
+
305
+
306
+ def add_kernel_test(cls, kernel, dim, name=None, expect=None, inputs=None, devices=None):
307
+ def test_func(self, device):
308
+ args = []
309
+ if inputs:
310
+ args.extend(inputs)
311
+
312
+ if expect:
313
+ # allocate outputs to match results
314
+ result = wp.array(expect, dtype=int, device=device)
315
+ output = wp.zeros_like(result)
316
+
317
+ args.append(output)
318
+
319
+ # force load so that we don't generate any log output during launch
320
+ kernel.module.load(device)
321
+
322
+ with CheckOutput(self):
323
+ wp.launch(kernel, dim=dim, inputs=args, device=device)
324
+
325
+ # check output values
326
+ if expect:
327
+ assert_array_equal(output, result)
328
+
329
+ if name is None:
330
+ name = kernel.key
331
+
332
+ # device is required for kernel tests, so use all devices if none were given
333
+ if devices is None:
334
+ devices = get_test_devices()
335
+
336
+ # register test func with class for the given devices
337
+ for d in devices:
338
+ # use a function to forward the device to the inner test function
339
+ def test_func_wrapper(test, device=d):
340
+ test_func(test, device)
341
+
342
+ setattr(cls, name + "_" + sanitize_identifier(d), test_func_wrapper)
343
+
344
+
345
+ # helper that first calls the test function to generate all kernel permutations
346
+ # so that compilation is done in one-shot instead of per-test
347
+ def add_function_test_register_kernel(cls, name, func, devices=None, **kwargs):
348
+ func(None, None, **kwargs, register_kernels=True)
349
+ add_function_test(cls, name, func, devices=devices, **kwargs)
350
+
351
+
352
+ def write_junit_results(
353
+ outfile: str,
354
+ test_records: list,
355
+ tests_run: int,
356
+ tests_failed: int,
357
+ tests_errored: int,
358
+ tests_skipped: int,
359
+ test_duration: float,
360
+ ):
361
+ """Write a JUnit XML from our report data
362
+
363
+ The report file is needed for GitLab to add test reports in merge requests.
364
+ """
365
+
366
+ import xml.etree.ElementTree as ET
367
+
368
+ root = ET.Element(
369
+ "testsuite",
370
+ name="Warp Tests",
371
+ failures=str(tests_failed),
372
+ errors=str(tests_errored),
373
+ skipped=str(tests_skipped),
374
+ tests=str(tests_run),
375
+ time=f"{test_duration:.3f}",
376
+ )
377
+
378
+ for test_data in test_records:
379
+ test_classname = test_data[0]
380
+ test_methodname = test_data[1]
381
+ test_duration = test_data[2]
382
+ test_status = test_data[3]
383
+
384
+ test_case = ET.SubElement(
385
+ root, "testcase", classname=test_classname, name=test_methodname, time=f"{test_duration:.3f}"
386
+ )
387
+
388
+ if test_status == "FAIL":
389
+ failure = ET.SubElement(test_case, "failure", message=str(test_data[4]))
390
+ failure.text = str(test_data[5]) # Stacktrace
391
+ elif test_status == "ERROR":
392
+ error = ET.SubElement(test_case, "error")
393
+ error.text = str(test_data[5]) # Stacktrace
394
+ elif test_status == "SKIP":
395
+ skip = ET.SubElement(test_case, "skipped")
396
+ # Set the skip reason
397
+ skip.set("message", str(test_data[4]))
398
+
399
+ tree = ET.ElementTree(root)
400
+
401
+ if hasattr(ET, "indent"):
402
+ ET.indent(root) # Pretty-printed XML output, Python 3.9 required
403
+
404
+ tree.write(outfile, encoding="utf-8", xml_declaration=True)
405
+
406
+
407
+ class ParallelJunitTestResult(unittest.TextTestResult):
408
+ def __init__(self, stream, descriptions, verbosity):
409
+ stream = type(stream)(sys.stderr)
410
+ self.test_record = []
411
+ super().__init__(stream, descriptions, verbosity)
412
+
413
+ def startTest(self, test):
414
+ if self.showAll:
415
+ self.stream.writeln(f"{self.getDescription(test)} ...")
416
+ self.stream.flush()
417
+ self.start_time = time.perf_counter_ns()
418
+ super(unittest.TextTestResult, self).startTest(test)
419
+
420
+ def _add_helper(self, test, dots_message, show_all_message):
421
+ if self.showAll:
422
+ self.stream.writeln(f"{self.getDescription(test)} ... {show_all_message}")
423
+ elif self.dots:
424
+ self.stream.write(dots_message)
425
+ self.stream.flush()
426
+
427
+ def _record_test(self, test, code, message=None, details=None):
428
+ duration = round((time.perf_counter_ns() - self.start_time) * 1e-9, 3) # [s]
429
+ self.test_record.append((test.__class__.__name__, test._testMethodName, duration, code, message, details))
430
+
431
+ def addSuccess(self, test):
432
+ super(unittest.TextTestResult, self).addSuccess(test)
433
+ self._add_helper(test, ".", "ok")
434
+ self._record_test(test, "OK")
435
+
436
+ def addError(self, test, err):
437
+ super(unittest.TextTestResult, self).addError(test, err)
438
+ self._add_helper(test, "E", "ERROR")
439
+ self._record_test(test, "ERROR", str(err[1]), self._exc_info_to_string(err, test))
440
+
441
+ def addFailure(self, test, err):
442
+ super(unittest.TextTestResult, self).addFailure(test, err)
443
+ self._add_helper(test, "F", "FAIL")
444
+ self._record_test(test, "FAIL", str(err[1]), self._exc_info_to_string(err, test))
445
+
446
+ def addSkip(self, test, reason):
447
+ super(unittest.TextTestResult, self).addSkip(test, reason)
448
+ self._add_helper(test, "s", f"skipped {reason!r}")
449
+ self._record_test(test, "SKIP", reason)
450
+
451
+ def addExpectedFailure(self, test, err):
452
+ super(unittest.TextTestResult, self).addExpectedFailure(test, err)
453
+ self._add_helper(test, "x", "expected failure")
454
+ self._record_test(test, "OK", "expected failure")
455
+
456
+ def addUnexpectedSuccess(self, test):
457
+ super(unittest.TextTestResult, self).addUnexpectedSuccess(test)
458
+ self._add_helper(test, "u", "unexpected success")
459
+ self._record_test(test, "FAIL", "unexpected success")
460
+
461
+ def addSubTest(self, test, subtest, err):
462
+ super(unittest.TextTestResult, self).addSubTest(test, subtest, err)
463
+ if err is not None:
464
+ self._add_helper(test, "E", "ERROR")
465
+ # err is (class, error, traceback)
466
+ self._record_test(test, "FAIL", str(err[1]), self._exc_info_to_string(err, test))
467
+
468
+ def printErrors(self):
469
+ pass
@@ -0,0 +1,95 @@
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
+ ####################################################################################################
17
+ #
18
+ # This file demonstrates step-through debugging support of the C++ code generated for a Warp kernel
19
+ # running on the CPU.
20
+ #
21
+ # This is not a unit test; it should be run interactively.
22
+ #
23
+ # For a fully integrated experience use Visual Studio Code and install the "Python C++ Debugger"
24
+ # and "CodeLLDB" extensions. Add the following configurations to your .vscode/launch.json file:
25
+ #
26
+
27
+ """
28
+ {
29
+ "name": "Warp Debugger",
30
+ "type": "pythoncpp",
31
+ "request": "launch",
32
+ "pythonLaunchName": "Python: Current File",
33
+ "cppAttachName": "(lldb) Attach",
34
+ },
35
+ {
36
+ "name": "Python: Current File",
37
+ "type": "debugpy",
38
+ "request": "launch",
39
+ "program": "${file}",
40
+ "console": "integratedTerminal",
41
+ "stopOnEntry": false,
42
+ },
43
+ {
44
+ "name": "(lldb) Attach",
45
+ "type": "lldb",
46
+ "request": "attach",
47
+ },
48
+ """
49
+
50
+ #
51
+ # Then run this .py file using the "Warp Debugger" configuration.
52
+ #
53
+ # Check out the following resources for more information about launch configurations and
54
+ # troubleshooting common VSCode debugger integration issues:
55
+ # • https://vscode-docs.readthedocs.io/en/stable/editor/debugging/#launch-configurations
56
+ # • https://code.visualstudio.com/docs/cpp/cpp-debug#_debugging
57
+ #
58
+ ####################################################################################################
59
+
60
+ import warp as wp
61
+
62
+ # The init() function prints the directory of the kernel cache which contains the .cpp files
63
+ # generated from Warp kernels. You can put breakpoints in these C++ files through Visual Studio Code,
64
+ # but it's generally more convenient to use wp.breakpoint(). See the example below.
65
+ wp.init()
66
+
67
+ # Enable kernels to be compiled with debug info and disable optimizations
68
+ wp.config.mode = "debug"
69
+
70
+ # Make sure Warp was built with `build_lib.py --mode=debug`
71
+ assert wp._src.context.runtime.core.wp_is_debug_enabled(), (
72
+ "Warp must be built in debug mode to enable debugging kernels"
73
+ )
74
+
75
+
76
+ @wp.kernel
77
+ def example_breakpoint(n: int):
78
+ a = int(0)
79
+
80
+ for _i in range(0, n):
81
+ if a == 5:
82
+ # Your debugger should halt at the C++ code corresponding with the next line,
83
+ # namely a call to the __debugbreak() intrinsic function.
84
+ wp.breakpoint()
85
+
86
+ break
87
+
88
+ a += 1
89
+
90
+ wp.expect_eq(a, 5)
91
+
92
+
93
+ if __name__ == "__main__":
94
+ wp.clear_kernel_cache()
95
+ wp.launch(example_breakpoint, dim=1, inputs=[10], device="cpu")
warp/torch.py ADDED
@@ -0,0 +1,24 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 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
+ # TODO: Remove after cleaning up the public API.
17
+
18
+ from warp._src import torch as _torch
19
+
20
+
21
+ def __getattr__(name):
22
+ from warp._src.utils import get_deprecated_api
23
+
24
+ return get_deprecated_api(_torch, "wp", name)
warp/types.py ADDED
@@ -0,0 +1,51 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 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
+ # isort: skip_file
17
+
18
+ from warp._src.types import ARRAY_MAX_DIMS as ARRAY_MAX_DIMS
19
+ from warp._src.types import matrix as matrix
20
+ from warp._src.types import type_is_matrix as type_is_matrix
21
+ from warp._src.types import type_size_in_bytes as type_size_in_bytes
22
+ from warp._src.types import vector as vector
23
+ from warp._src.types import warp_type_to_np_dtype as warp_type_to_np_dtype
24
+
25
+ # Needed for `get_warp_type_from_data_type_name()` in `omni.warp.nodes`.
26
+ from warp._src.types import int8 as int8
27
+ from warp._src.types import int32 as int32
28
+ from warp._src.types import int64 as int64
29
+ from warp._src.types import uint8 as uint8
30
+ from warp._src.types import uint64 as uint64
31
+ from warp._src.types import uint32 as uint32
32
+ from warp._src.types import float32 as float32
33
+ from warp._src.types import float64 as float64
34
+ from warp._src.types import mat22d as mat22d
35
+ from warp._src.types import mat33d as mat33d
36
+ from warp._src.types import mat44d as mat44d
37
+ from warp._src.types import quat as quat
38
+ from warp._src.types import vec2 as vec2
39
+ from warp._src.types import vec3 as vec3
40
+ from warp._src.types import vec4 as vec4
41
+
42
+
43
+ # TODO: Remove after cleaning up the public API.
44
+
45
+ from warp._src import types as _types
46
+
47
+
48
+ def __getattr__(name):
49
+ from warp._src.utils import get_deprecated_api
50
+
51
+ return get_deprecated_api(_types, "wp", name)
warp/utils.py ADDED
@@ -0,0 +1,31 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 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
+ # isort: skip_file
17
+
18
+ from warp._src.utils import array_cast as array_cast
19
+ from warp._src.utils import segmented_sort_pairs as segmented_sort_pairs
20
+ from warp._src.utils import warn as warn
21
+
22
+
23
+ # TODO: Remove after cleaning up the public API.
24
+
25
+ from warp._src import utils as _utils
26
+
27
+
28
+ def __getattr__(name):
29
+ from warp._src.utils import get_deprecated_api
30
+
31
+ return get_deprecated_api(_utils, "wp", name)