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,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,298 @@
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_conditional_ifexp():
63
+ a = 0.5
64
+ b = 2.0
65
+
66
+ c = 1.0 if a > b else -1.0
67
+
68
+ wp.expect_eq(c, -1.0)
69
+
70
+
71
+ @wp.kernel
72
+ def test_conditional_ifexp_nested():
73
+ a = 1.0
74
+ b = 2.0
75
+
76
+ c = 3.0 if a > b else 6.0
77
+ d = 4.0 if a > b else 7.0
78
+ e = 1.0 if (a > b and c > d) else (-1.0 if a > b else (2.0 if c > d else -2.0))
79
+
80
+ wp.expect_eq(e, -2.0)
81
+
82
+
83
+ @wp.kernel
84
+ def test_conditional_ifexp_constant():
85
+ a = 1.0 if False else -1.0
86
+ b = 2.0 if 123 else -2.0
87
+
88
+ wp.expect_eq(a, -1.0)
89
+ wp.expect_eq(b, 2.0)
90
+
91
+
92
+ @wp.kernel
93
+ def test_conditional_ifexp_constant_nested():
94
+ a = 1.0 if False else (2.0 if True else 3.0)
95
+ b = 4.0 if 0 else (5.0 if 0 else (6.0 if False else 7.0))
96
+ c = 8.0 if False else (9.0 if False else (10.0 if 321 else 11.0))
97
+
98
+ wp.expect_eq(a, 2.0)
99
+ wp.expect_eq(b, 7.0)
100
+ wp.expect_eq(c, 10.0)
101
+
102
+
103
+ @wp.kernel
104
+ def test_boolean_and():
105
+ a = 1.0
106
+ b = 2.0
107
+ c = 1.0
108
+
109
+ if a > 0.0 and b > 0.0:
110
+ c = -1.0
111
+
112
+ wp.expect_eq(c, -1.0)
113
+
114
+
115
+ @wp.kernel
116
+ def test_boolean_or():
117
+ a = 1.0
118
+ b = 2.0
119
+ c = 1.0
120
+
121
+ if a > 0.0 and b > 0.0:
122
+ c = -1.0
123
+
124
+ wp.expect_eq(c, -1.0)
125
+
126
+
127
+ @wp.kernel
128
+ def test_boolean_compound():
129
+ a = 1.0
130
+ b = 2.0
131
+ c = 3.0
132
+
133
+ d = 1.0
134
+
135
+ if (a > 0.0 and b > 0.0) or c > a:
136
+ d = -1.0
137
+
138
+ wp.expect_eq(d, -1.0)
139
+
140
+
141
+ @wp.kernel
142
+ def test_boolean_literal():
143
+ t = True
144
+ f = False
145
+
146
+ r = 1.0
147
+
148
+ if t == (not f):
149
+ r = -1.0
150
+
151
+ wp.expect_eq(r, -1.0)
152
+
153
+
154
+ @wp.kernel
155
+ def test_int_logical_not():
156
+ x = 0
157
+ if not 123:
158
+ x = 123
159
+
160
+ wp.expect_eq(x, 0)
161
+
162
+
163
+ @wp.kernel
164
+ def test_int_conditional_assign_overload():
165
+ if 123:
166
+ x = 123
167
+
168
+ if 234:
169
+ x = 234
170
+
171
+ wp.expect_eq(x, 234)
172
+
173
+
174
+ @wp.kernel
175
+ def test_bool_param_conditional(foo: bool):
176
+ if foo:
177
+ x = 123
178
+
179
+ wp.expect_eq(x, 123)
180
+
181
+
182
+ @wp.kernel
183
+ def test_conditional_chain_basic():
184
+ x = -1
185
+
186
+ if 0 < x < 1:
187
+ success = False
188
+ else:
189
+ success = True
190
+ wp.expect_eq(success, True)
191
+
192
+
193
+ @wp.kernel
194
+ def test_conditional_chain_empty_range():
195
+ x = -1
196
+ y = 4
197
+
198
+ if -2 <= x <= 10 <= y:
199
+ success = False
200
+ else:
201
+ success = True
202
+ wp.expect_eq(success, True)
203
+
204
+
205
+ @wp.kernel
206
+ def test_conditional_chain_faker():
207
+ x = -1
208
+
209
+ # Not actually a chained inequality
210
+ if (-2 < x) < (1 > 0):
211
+ success = False
212
+ else:
213
+ success = True
214
+ wp.expect_eq(success, True)
215
+
216
+
217
+ @wp.kernel
218
+ def test_conditional_chain_and():
219
+ x = -1
220
+
221
+ if (-2 < x < 0) and (-1 <= x <= -1):
222
+ success = True
223
+ else:
224
+ success = False
225
+ wp.expect_eq(success, True)
226
+
227
+
228
+ @wp.kernel
229
+ def test_conditional_chain_eqs():
230
+ x = wp.int32(10)
231
+ y = 10
232
+ z = -10
233
+
234
+ if x == y != z:
235
+ success = True
236
+ else:
237
+ success = False
238
+ wp.expect_eq(success, True)
239
+
240
+
241
+ @wp.kernel
242
+ def test_conditional_chain_mixed():
243
+ x = 0
244
+
245
+ if x < 10 == 1:
246
+ success = False
247
+ else:
248
+ success = True
249
+ wp.expect_eq(success, True)
250
+
251
+
252
+ def test_conditional_unequal_types(test: unittest.TestCase, device):
253
+ # The bad kernel must be in a separate module, otherwise the current module would fail to load
254
+ from warp.tests.aux_test_conditional_unequal_types_kernels import (
255
+ unequal_types_kernel,
256
+ )
257
+
258
+ with test.assertRaises(TypeError):
259
+ wp.launch(unequal_types_kernel, dim=(1,), inputs=[], device=device)
260
+
261
+ # remove all references to the bad module so that subsequent calls to wp.force_load()
262
+ # won't try to load it unless we explicitly re-import it again
263
+ del wp._src.context.user_modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
264
+ del sys.modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
265
+
266
+
267
+ devices = get_test_devices()
268
+
269
+
270
+ class TestConditional(unittest.TestCase):
271
+ pass
272
+
273
+
274
+ add_kernel_test(TestConditional, kernel=test_conditional_if_else, dim=1, devices=devices)
275
+ add_kernel_test(TestConditional, kernel=test_conditional_if_else_nested, dim=1, devices=devices)
276
+ add_kernel_test(TestConditional, kernel=test_conditional_ifexp, dim=1, devices=devices)
277
+ add_kernel_test(TestConditional, kernel=test_conditional_ifexp_nested, dim=1, devices=devices)
278
+ add_kernel_test(TestConditional, kernel=test_conditional_ifexp_constant, dim=1, devices=devices)
279
+ add_kernel_test(TestConditional, kernel=test_conditional_ifexp_constant_nested, dim=1, devices=devices)
280
+ add_kernel_test(TestConditional, kernel=test_boolean_and, dim=1, devices=devices)
281
+ add_kernel_test(TestConditional, kernel=test_boolean_or, dim=1, devices=devices)
282
+ add_kernel_test(TestConditional, kernel=test_boolean_compound, dim=1, devices=devices)
283
+ add_kernel_test(TestConditional, kernel=test_boolean_literal, dim=1, devices=devices)
284
+ add_kernel_test(TestConditional, kernel=test_int_logical_not, dim=1, devices=devices)
285
+ add_kernel_test(TestConditional, kernel=test_int_conditional_assign_overload, dim=1, devices=devices)
286
+ add_kernel_test(TestConditional, kernel=test_bool_param_conditional, dim=1, inputs=[True], devices=devices)
287
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_basic, dim=1, devices=devices)
288
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_empty_range, dim=1, devices=devices)
289
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_faker, dim=1, devices=devices)
290
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_and, dim=1, devices=devices)
291
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_eqs, dim=1, devices=devices)
292
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_mixed, dim=1, devices=devices)
293
+ add_function_test(TestConditional, "test_conditional_unequal_types", test_conditional_unequal_types, devices=devices)
294
+
295
+
296
+ if __name__ == "__main__":
297
+ wp.clear_kernel_cache()
298
+ unittest.main(verbosity=2)
@@ -0,0 +1,35 @@
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
+
21
+
22
+ class TestContext(unittest.TestCase):
23
+ def test_context_type_str(self):
24
+ self.assertEqual(wp._src.context.type_str(List[int]), "List[int]")
25
+ self.assertEqual(wp._src.context.type_str(List[float]), "List[float]")
26
+
27
+ self.assertEqual(wp._src.context.type_str(Tuple[int]), "Tuple[int]")
28
+ self.assertEqual(wp._src.context.type_str(Tuple[float]), "Tuple[float]")
29
+ self.assertEqual(wp._src.context.type_str(Tuple[int, float]), "Tuple[int, float]")
30
+ self.assertEqual(wp._src.context.type_str(Tuple[int, ...]), "Tuple[int, ...]")
31
+
32
+
33
+ if __name__ == "__main__":
34
+ wp.clear_kernel_cache()
35
+ unittest.main(verbosity=2)