warp-lang 0.9.0__py3-none-win_amd64.whl → 0.11.0__py3-none-win_amd64.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 (315) hide show
  1. warp/__init__.py +15 -7
  2. warp/__init__.pyi +1 -0
  3. warp/bin/warp-clang.dll +0 -0
  4. warp/bin/warp.dll +0 -0
  5. warp/build.py +22 -443
  6. warp/build_dll.py +384 -0
  7. warp/builtins.py +998 -488
  8. warp/codegen.py +1307 -739
  9. warp/config.py +5 -3
  10. warp/constants.py +6 -0
  11. warp/context.py +1291 -548
  12. warp/dlpack.py +31 -31
  13. warp/fabric.py +326 -0
  14. warp/fem/__init__.py +27 -0
  15. warp/fem/cache.py +389 -0
  16. warp/fem/dirichlet.py +181 -0
  17. warp/fem/domain.py +263 -0
  18. warp/fem/field/__init__.py +101 -0
  19. warp/fem/field/field.py +149 -0
  20. warp/fem/field/nodal_field.py +299 -0
  21. warp/fem/field/restriction.py +21 -0
  22. warp/fem/field/test.py +181 -0
  23. warp/fem/field/trial.py +183 -0
  24. warp/fem/geometry/__init__.py +19 -0
  25. warp/fem/geometry/closest_point.py +70 -0
  26. warp/fem/geometry/deformed_geometry.py +271 -0
  27. warp/fem/geometry/element.py +744 -0
  28. warp/fem/geometry/geometry.py +186 -0
  29. warp/fem/geometry/grid_2d.py +373 -0
  30. warp/fem/geometry/grid_3d.py +435 -0
  31. warp/fem/geometry/hexmesh.py +953 -0
  32. warp/fem/geometry/partition.py +376 -0
  33. warp/fem/geometry/quadmesh_2d.py +532 -0
  34. warp/fem/geometry/tetmesh.py +840 -0
  35. warp/fem/geometry/trimesh_2d.py +577 -0
  36. warp/fem/integrate.py +1616 -0
  37. warp/fem/operator.py +191 -0
  38. warp/fem/polynomial.py +213 -0
  39. warp/fem/quadrature/__init__.py +2 -0
  40. warp/fem/quadrature/pic_quadrature.py +245 -0
  41. warp/fem/quadrature/quadrature.py +294 -0
  42. warp/fem/space/__init__.py +292 -0
  43. warp/fem/space/basis_space.py +489 -0
  44. warp/fem/space/collocated_function_space.py +105 -0
  45. warp/fem/space/dof_mapper.py +236 -0
  46. warp/fem/space/function_space.py +145 -0
  47. warp/fem/space/grid_2d_function_space.py +267 -0
  48. warp/fem/space/grid_3d_function_space.py +306 -0
  49. warp/fem/space/hexmesh_function_space.py +352 -0
  50. warp/fem/space/partition.py +350 -0
  51. warp/fem/space/quadmesh_2d_function_space.py +369 -0
  52. warp/fem/space/restriction.py +160 -0
  53. warp/fem/space/shape/__init__.py +15 -0
  54. warp/fem/space/shape/cube_shape_function.py +738 -0
  55. warp/fem/space/shape/shape_function.py +103 -0
  56. warp/fem/space/shape/square_shape_function.py +611 -0
  57. warp/fem/space/shape/tet_shape_function.py +567 -0
  58. warp/fem/space/shape/triangle_shape_function.py +429 -0
  59. warp/fem/space/tetmesh_function_space.py +292 -0
  60. warp/fem/space/topology.py +295 -0
  61. warp/fem/space/trimesh_2d_function_space.py +221 -0
  62. warp/fem/types.py +77 -0
  63. warp/fem/utils.py +495 -0
  64. warp/native/array.h +164 -55
  65. warp/native/builtin.h +150 -174
  66. warp/native/bvh.cpp +75 -328
  67. warp/native/bvh.cu +406 -23
  68. warp/native/bvh.h +37 -45
  69. warp/native/clang/clang.cpp +136 -24
  70. warp/native/crt.cpp +1 -76
  71. warp/native/crt.h +111 -104
  72. warp/native/cuda_crt.h +1049 -0
  73. warp/native/cuda_util.cpp +15 -3
  74. warp/native/cuda_util.h +3 -1
  75. warp/native/cutlass/tools/library/scripts/conv2d_operation.py +463 -0
  76. warp/native/cutlass/tools/library/scripts/conv3d_operation.py +321 -0
  77. warp/native/cutlass/tools/library/scripts/gemm_operation.py +988 -0
  78. warp/native/cutlass/tools/library/scripts/generator.py +4625 -0
  79. warp/native/cutlass/tools/library/scripts/library.py +799 -0
  80. warp/native/cutlass/tools/library/scripts/manifest.py +402 -0
  81. warp/native/cutlass/tools/library/scripts/pycutlass/docs/source/conf.py +96 -0
  82. warp/native/cutlass/tools/library/scripts/pycutlass/profile/conv/conv2d_f16_sm80.py +106 -0
  83. warp/native/cutlass/tools/library/scripts/pycutlass/profile/gemm/gemm_f32_sm80.py +91 -0
  84. warp/native/cutlass/tools/library/scripts/pycutlass/setup.py +80 -0
  85. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/__init__.py +48 -0
  86. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/arguments.py +118 -0
  87. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/c_types.py +241 -0
  88. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/compiler.py +432 -0
  89. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/conv2d_operation.py +631 -0
  90. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/epilogue.py +1026 -0
  91. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/frontend.py +104 -0
  92. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/gemm_operation.py +1276 -0
  93. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/library.py +744 -0
  94. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/memory_manager.py +74 -0
  95. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/operation.py +110 -0
  96. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/parser.py +619 -0
  97. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/reduction_operation.py +398 -0
  98. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/tensor_ref.py +70 -0
  99. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/__init__.py +4 -0
  100. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/conv2d_testbed.py +646 -0
  101. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_grouped_testbed.py +235 -0
  102. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_testbed.py +557 -0
  103. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/profiler.py +70 -0
  104. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/type_hint.py +39 -0
  105. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/__init__.py +1 -0
  106. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/device.py +76 -0
  107. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/reference_model.py +255 -0
  108. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/__init__.py +0 -0
  109. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +201 -0
  110. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +177 -0
  111. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +98 -0
  112. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +95 -0
  113. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_few_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +163 -0
  114. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_fixed_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +187 -0
  115. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +309 -0
  116. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +54 -0
  117. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
  118. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
  119. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_strided_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +253 -0
  120. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +97 -0
  121. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +242 -0
  122. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
  123. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
  124. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/run_all_tests.py +10 -0
  125. warp/native/cutlass/tools/library/scripts/pycutlass/test/frontend/test_frontend.py +146 -0
  126. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/__init__.py +0 -0
  127. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_bf16_sm80.py +96 -0
  128. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f16_sm80.py +447 -0
  129. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f32_sm80.py +146 -0
  130. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f64_sm80.py +102 -0
  131. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_grouped_sm80.py +203 -0
  132. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_s8_sm80.py +229 -0
  133. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/run_all_tests.py +9 -0
  134. warp/native/cutlass/tools/library/scripts/pycutlass/test/unit/test_sm80.py +453 -0
  135. warp/native/cutlass/tools/library/scripts/rank_2k_operation.py +398 -0
  136. warp/native/cutlass/tools/library/scripts/rank_k_operation.py +387 -0
  137. warp/native/cutlass/tools/library/scripts/rt.py +796 -0
  138. warp/native/cutlass/tools/library/scripts/symm_operation.py +400 -0
  139. warp/native/cutlass/tools/library/scripts/trmm_operation.py +407 -0
  140. warp/native/cutlass_gemm.cu +5 -3
  141. warp/native/exports.h +1240 -949
  142. warp/native/fabric.h +228 -0
  143. warp/native/hashgrid.cpp +4 -4
  144. warp/native/hashgrid.h +22 -2
  145. warp/native/initializer_array.h +2 -2
  146. warp/native/intersect.h +22 -7
  147. warp/native/intersect_adj.h +8 -8
  148. warp/native/intersect_tri.h +13 -16
  149. warp/native/marching.cu +157 -161
  150. warp/native/mat.h +119 -19
  151. warp/native/matnn.h +2 -2
  152. warp/native/mesh.cpp +108 -83
  153. warp/native/mesh.cu +243 -6
  154. warp/native/mesh.h +1547 -458
  155. warp/native/nanovdb/NanoVDB.h +1 -1
  156. warp/native/noise.h +272 -329
  157. warp/native/quat.h +51 -8
  158. warp/native/rand.h +45 -35
  159. warp/native/range.h +6 -2
  160. warp/native/reduce.cpp +157 -0
  161. warp/native/reduce.cu +348 -0
  162. warp/native/runlength_encode.cpp +62 -0
  163. warp/native/runlength_encode.cu +46 -0
  164. warp/native/scan.cu +11 -13
  165. warp/native/scan.h +1 -0
  166. warp/native/solid_angle.h +442 -0
  167. warp/native/sort.cpp +13 -0
  168. warp/native/sort.cu +9 -1
  169. warp/native/sparse.cpp +338 -0
  170. warp/native/sparse.cu +545 -0
  171. warp/native/spatial.h +2 -2
  172. warp/native/temp_buffer.h +30 -0
  173. warp/native/vec.h +126 -24
  174. warp/native/volume.h +120 -0
  175. warp/native/warp.cpp +658 -53
  176. warp/native/warp.cu +660 -68
  177. warp/native/warp.h +112 -12
  178. warp/optim/__init__.py +1 -0
  179. warp/optim/linear.py +922 -0
  180. warp/optim/sgd.py +92 -0
  181. warp/render/render_opengl.py +392 -152
  182. warp/render/render_usd.py +11 -11
  183. warp/sim/__init__.py +2 -2
  184. warp/sim/articulation.py +385 -185
  185. warp/sim/collide.py +21 -8
  186. warp/sim/import_mjcf.py +297 -106
  187. warp/sim/import_urdf.py +389 -210
  188. warp/sim/import_usd.py +198 -97
  189. warp/sim/inertia.py +17 -18
  190. warp/sim/integrator_euler.py +14 -8
  191. warp/sim/integrator_xpbd.py +161 -19
  192. warp/sim/model.py +795 -291
  193. warp/sim/optimizer.py +2 -6
  194. warp/sim/render.py +65 -3
  195. warp/sim/utils.py +3 -0
  196. warp/sparse.py +1227 -0
  197. warp/stubs.py +665 -223
  198. warp/tape.py +66 -15
  199. warp/tests/__main__.py +3 -6
  200. warp/tests/assets/curlnoise_golden.npy +0 -0
  201. warp/tests/assets/pnoise_golden.npy +0 -0
  202. warp/tests/assets/torus.usda +105 -105
  203. warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
  204. warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
  205. warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
  206. warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
  207. warp/tests/aux_test_unresolved_func.py +14 -0
  208. warp/tests/aux_test_unresolved_symbol.py +14 -0
  209. warp/tests/disabled_kinematics.py +239 -0
  210. warp/tests/run_coverage_serial.py +31 -0
  211. warp/tests/test_adam.py +103 -106
  212. warp/tests/test_arithmetic.py +128 -74
  213. warp/tests/test_array.py +1497 -211
  214. warp/tests/test_array_reduce.py +150 -0
  215. warp/tests/test_atomic.py +64 -28
  216. warp/tests/test_bool.py +99 -0
  217. warp/tests/test_builtins_resolution.py +1292 -0
  218. warp/tests/test_bvh.py +75 -43
  219. warp/tests/test_closest_point_edge_edge.py +54 -57
  220. warp/tests/test_codegen.py +233 -128
  221. warp/tests/test_compile_consts.py +28 -20
  222. warp/tests/test_conditional.py +108 -24
  223. warp/tests/test_copy.py +10 -12
  224. warp/tests/test_ctypes.py +112 -88
  225. warp/tests/test_dense.py +21 -14
  226. warp/tests/test_devices.py +98 -0
  227. warp/tests/test_dlpack.py +136 -108
  228. warp/tests/test_examples.py +277 -0
  229. warp/tests/test_fabricarray.py +955 -0
  230. warp/tests/test_fast_math.py +15 -11
  231. warp/tests/test_fem.py +1271 -0
  232. warp/tests/test_fp16.py +53 -19
  233. warp/tests/test_func.py +187 -74
  234. warp/tests/test_generics.py +194 -49
  235. warp/tests/test_grad.py +180 -116
  236. warp/tests/test_grad_customs.py +176 -0
  237. warp/tests/test_hash_grid.py +52 -37
  238. warp/tests/test_import.py +10 -23
  239. warp/tests/test_indexedarray.py +577 -24
  240. warp/tests/test_intersect.py +18 -9
  241. warp/tests/test_large.py +141 -0
  242. warp/tests/test_launch.py +251 -15
  243. warp/tests/test_lerp.py +64 -65
  244. warp/tests/test_linear_solvers.py +154 -0
  245. warp/tests/test_lvalue.py +493 -0
  246. warp/tests/test_marching_cubes.py +12 -13
  247. warp/tests/test_mat.py +508 -2778
  248. warp/tests/test_mat_lite.py +115 -0
  249. warp/tests/test_mat_scalar_ops.py +2889 -0
  250. warp/tests/test_math.py +103 -9
  251. warp/tests/test_matmul.py +305 -69
  252. warp/tests/test_matmul_lite.py +410 -0
  253. warp/tests/test_mesh.py +71 -14
  254. warp/tests/test_mesh_query_aabb.py +41 -25
  255. warp/tests/test_mesh_query_point.py +325 -34
  256. warp/tests/test_mesh_query_ray.py +39 -22
  257. warp/tests/test_mlp.py +30 -22
  258. warp/tests/test_model.py +92 -89
  259. warp/tests/test_modules_lite.py +39 -0
  260. warp/tests/test_multigpu.py +88 -114
  261. warp/tests/test_noise.py +12 -11
  262. warp/tests/test_operators.py +16 -20
  263. warp/tests/test_options.py +11 -11
  264. warp/tests/test_pinned.py +17 -18
  265. warp/tests/test_print.py +32 -11
  266. warp/tests/test_quat.py +275 -129
  267. warp/tests/test_rand.py +18 -16
  268. warp/tests/test_reload.py +38 -34
  269. warp/tests/test_rounding.py +50 -43
  270. warp/tests/test_runlength_encode.py +190 -0
  271. warp/tests/test_smoothstep.py +9 -11
  272. warp/tests/test_snippet.py +143 -0
  273. warp/tests/test_sparse.py +460 -0
  274. warp/tests/test_spatial.py +276 -243
  275. warp/tests/test_streams.py +110 -85
  276. warp/tests/test_struct.py +331 -85
  277. warp/tests/test_tape.py +39 -21
  278. warp/tests/test_torch.py +118 -89
  279. warp/tests/test_transient_module.py +12 -13
  280. warp/tests/test_types.py +614 -0
  281. warp/tests/test_utils.py +494 -0
  282. warp/tests/test_vec.py +354 -1987
  283. warp/tests/test_vec_lite.py +73 -0
  284. warp/tests/test_vec_scalar_ops.py +2099 -0
  285. warp/tests/test_volume.py +457 -293
  286. warp/tests/test_volume_write.py +124 -134
  287. warp/tests/unittest_serial.py +35 -0
  288. warp/tests/unittest_suites.py +341 -0
  289. warp/tests/unittest_utils.py +568 -0
  290. warp/tests/unused_test_misc.py +71 -0
  291. warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
  292. warp/thirdparty/appdirs.py +36 -45
  293. warp/thirdparty/unittest_parallel.py +549 -0
  294. warp/torch.py +72 -30
  295. warp/types.py +1744 -713
  296. warp/utils.py +360 -350
  297. warp_lang-0.11.0.dist-info/LICENSE.md +36 -0
  298. warp_lang-0.11.0.dist-info/METADATA +238 -0
  299. warp_lang-0.11.0.dist-info/RECORD +332 -0
  300. {warp_lang-0.9.0.dist-info → warp_lang-0.11.0.dist-info}/WHEEL +1 -1
  301. warp/bin/warp-clang.exp +0 -0
  302. warp/bin/warp-clang.lib +0 -0
  303. warp/bin/warp.exp +0 -0
  304. warp/bin/warp.lib +0 -0
  305. warp/tests/test_all.py +0 -215
  306. warp/tests/test_array_scan.py +0 -60
  307. warp/tests/test_base.py +0 -208
  308. warp/tests/test_unresolved_func.py +0 -7
  309. warp/tests/test_unresolved_symbol.py +0 -7
  310. warp_lang-0.9.0.dist-info/METADATA +0 -20
  311. warp_lang-0.9.0.dist-info/RECORD +0 -177
  312. /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
  313. /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
  314. /warp/tests/{test_square.py → aux_test_square.py} +0 -0
  315. {warp_lang-0.9.0.dist-info → warp_lang-0.11.0.dist-info}/top_level.txt +0 -0
warp/tests/test_copy.py CHANGED
@@ -5,13 +5,12 @@
5
5
  # distribution of this software and related documentation without an express
6
6
  # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
7
 
8
- # include parent path
8
+ import unittest
9
+
9
10
  import numpy as np
10
11
 
11
12
  import warp as wp
12
- from warp.tests.test_base import *
13
-
14
- import unittest
13
+ from warp.tests.unittest_utils import *
15
14
 
16
15
  wp.init()
17
16
 
@@ -200,18 +199,17 @@ def test_copy_indexed(test, device):
200
199
  assert_np_equal(a4.numpy(), expected4 * s)
201
200
 
202
201
 
203
- def register(parent):
204
- devices = get_test_devices()
202
+ devices = get_test_devices()
203
+
205
204
 
206
- class TestCopy(parent):
207
- pass
205
+ class TestCopy(unittest.TestCase):
206
+ pass
208
207
 
209
- add_function_test(TestCopy, "test_copy_strided", test_copy_strided, devices=devices)
210
- add_function_test(TestCopy, "test_copy_indexed", test_copy_indexed, devices=devices)
211
208
 
212
- return TestCopy
209
+ add_function_test(TestCopy, "test_copy_strided", test_copy_strided, devices=devices)
210
+ add_function_test(TestCopy, "test_copy_indexed", test_copy_indexed, devices=devices)
213
211
 
214
212
 
215
213
  if __name__ == "__main__":
216
- c = register(unittest.TestCase)
214
+ wp.build.clear_kernel_cache()
217
215
  unittest.main(verbosity=2)
warp/tests/test_ctypes.py CHANGED
@@ -5,14 +5,12 @@
5
5
  # distribution of this software and related documentation without an express
6
6
  # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
7
 
8
- # include parent path
8
+ import unittest
9
+
9
10
  import numpy as np
10
- import math
11
11
 
12
12
  import warp as wp
13
- from warp.tests.test_base import *
14
-
15
- import unittest
13
+ from warp.tests.unittest_utils import *
16
14
 
17
15
  wp.init()
18
16
 
@@ -24,11 +22,11 @@ def add_vec2(dest: wp.array(dtype=wp.vec2), c: wp.vec2):
24
22
 
25
23
 
26
24
  @wp.kernel
27
- def transform_vec2(dest: wp.array(dtype=wp.vec2), m: wp.mat22, v: wp.vec2):
25
+ def transform_vec2(dest_right: wp.array(dtype=wp.vec2), dest_left: wp.array(dtype=wp.vec2), m: wp.mat22, v: wp.vec2):
28
26
  tid = wp.tid()
29
27
 
30
- p = wp.mul(m, v)
31
- dest[tid] = p
28
+ dest_right[tid] = wp.mul(m, v)
29
+ dest_left[tid] = wp.mul(v, m)
32
30
 
33
31
 
34
32
  @wp.kernel
@@ -38,11 +36,11 @@ def add_vec3(dest: wp.array(dtype=wp.vec3), c: wp.vec3):
38
36
 
39
37
 
40
38
  @wp.kernel
41
- def transform_vec3(dest: wp.array(dtype=wp.vec3), m: wp.mat33, v: wp.vec3):
39
+ def transform_vec3(dest_right: wp.array(dtype=wp.vec3), dest_left: wp.array(dtype=wp.vec3), m: wp.mat33, v: wp.vec3):
42
40
  tid = wp.tid()
43
41
 
44
- p = wp.mul(m, v)
45
- dest[tid] = p
42
+ dest_right[tid] = wp.mul(m, v)
43
+ dest_left[tid] = wp.mul(v, m)
46
44
 
47
45
 
48
46
  @wp.kernel
@@ -63,12 +61,14 @@ def test_vec2_arg(test, device, n):
63
61
 
64
62
 
65
63
  def test_vec2_transform(test, device, n):
66
- dest = wp.zeros(n=n, dtype=wp.vec2, device=device)
64
+ dest_right = wp.zeros(n=n, dtype=wp.vec2, device=device)
65
+ dest_left = wp.zeros(n=n, dtype=wp.vec2, device=device)
67
66
  c = np.array((1.0, 2.0))
68
67
  m = np.array(((3.0, -1.0), (2.5, 4.0)))
69
68
 
70
- wp.launch(transform_vec2, dim=n, inputs=[dest, m, c], device=device)
71
- test.assertTrue(np.array_equal(dest.numpy(), np.tile(m @ c, (n, 1))))
69
+ wp.launch(transform_vec2, dim=n, inputs=[dest_right, dest_left, m, c], device=device)
70
+ test.assertTrue(np.array_equal(dest_right.numpy(), np.tile(m @ c, (n, 1))))
71
+ test.assertTrue(np.array_equal(dest_left.numpy(), np.tile(c @ m, (n, 1))))
72
72
 
73
73
 
74
74
  def test_vec3_arg(test, device, n):
@@ -80,25 +80,45 @@ def test_vec3_arg(test, device, n):
80
80
 
81
81
 
82
82
  def test_vec3_transform(test, device, n):
83
- dest = wp.zeros(n=n, dtype=wp.vec3, device=device)
83
+ dest_right = wp.zeros(n=n, dtype=wp.vec3, device=device)
84
+ dest_left = wp.zeros(n=n, dtype=wp.vec3, device=device)
84
85
  c = np.array((1.0, 2.0, 3.0))
85
86
  m = np.array(((1.0, 2.0, 3.0), (4.0, 5.0, 6.0), (7.0, 8.0, 9.0)))
86
87
 
87
- wp.launch(transform_vec3, dim=n, inputs=[dest, m, c], device=device)
88
- test.assertTrue(np.array_equal(dest.numpy(), np.tile(m @ c, (n, 1))))
88
+ wp.launch(transform_vec3, dim=n, inputs=[dest_right, dest_left, m, c], device=device)
89
+ test.assertTrue(np.array_equal(dest_right.numpy(), np.tile(m @ c, (n, 1))))
90
+ test.assertTrue(np.array_equal(dest_left.numpy(), np.tile(c @ m, (n, 1))))
89
91
 
90
92
 
91
93
  def test_transform_multiply(test, device, n):
92
- a = wp.transform((0.0, 1.0, 0.0), wp.utils.quat_identity())
94
+ a = wp.transform((0.0, 1.0, 0.0), wp.quat_identity())
93
95
 
94
96
  x = []
95
97
  for i in range(10):
96
- x.append(wp.utils.transform_identity())
98
+ x.append(wp.transform_identity())
97
99
 
98
100
  xforms = wp.array(x, dtype=wp.transform, device=device)
99
101
  wp.launch(transform_multiply, dim=n, inputs=[xforms, a], device=device)
100
102
 
101
103
 
104
+ transformf = wp.types.transformation(dtype=wp.float32)
105
+
106
+
107
+ @wp.kernel
108
+ def test_transformation_constructor():
109
+ a = wp.transformation(wp.vec3(0.0), wp.quat_identity())
110
+ b = transformf(wp.vec3(0.0), wp.quat_identity())
111
+ c = wp.transform_identity(dtype=wp.float64)
112
+
113
+
114
+ spatial_vector = wp.types.vector(length=6, dtype=wp.float32)
115
+
116
+
117
+ @wp.kernel
118
+ def test_spatial_vector_constructor():
119
+ a = wp.spatial_vector(wp.vec3(0.0), wp.vec3(0.0))
120
+
121
+
102
122
  # construct kernel + test harness for given matrix / vector types
103
123
  def make_matrix_test(dim, matrix, vector):
104
124
  def test_matrix_kernel(
@@ -126,8 +146,7 @@ def make_matrix_test(dim, matrix, vector):
126
146
  # register a custom kernel (no decorator) function
127
147
  # this lets us register the same function definition
128
148
  # against multiple symbols, with different arg types
129
- module = wp.get_module(test_matrix_kernel.__module__)
130
- kernel = wp.Kernel(func=test_matrix_kernel, key=f"test_mat{dim}{dim}_kernel", module=module)
149
+ kernel = wp.Kernel(func=test_matrix_kernel, key=f"test_mat{dim}{dim}_kernel")
131
150
 
132
151
  def test_matrix(test, device):
133
152
  rng = np.random.default_rng(42)
@@ -535,74 +554,79 @@ def test_transform_matrix():
535
554
  wp.expect_near(r_2, r_0 - t, 1.0e-4)
536
555
 
537
556
 
538
- def register(parent):
539
- devices = get_test_devices()
540
-
541
- class TestCTypes(parent):
542
- pass
543
-
544
- inputs = [
545
- wp.vec2(1.0, 2.0),
546
- wp.vec3(1.0, 2.0, 3.0),
547
- wp.vec4(1.0, 2.0, 3.0, 4.0),
548
- wp.mat22(1.0, 2.0, 3.0, 4.0),
549
- wp.mat33(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0),
550
- wp.mat44(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0),
551
- ]
552
-
553
- add_function_test(TestCTypes, "test_mat22", test_mat22, devices=devices)
554
- add_function_test(TestCTypes, "test_mat33", test_mat33, devices=devices)
555
- add_function_test(TestCTypes, "test_mat44", test_mat44, devices=devices)
556
- add_kernel_test(
557
- TestCTypes,
558
- name="test_scalar_arg_types",
559
- kernel=test_scalar_arg_types,
560
- dim=1,
561
- inputs=[-64, 255, -64, 255, -64, 255, -64, 255, 3.14159, 3.14159],
562
- devices=devices,
563
- )
564
- add_kernel_test(
565
- TestCTypes,
566
- name="test_scalar_arg_types_explicit",
567
- kernel=test_scalar_arg_types,
568
- dim=1,
569
- inputs=[
570
- wp.int8(-64),
571
- wp.uint8(255),
572
- wp.int16(-64),
573
- wp.uint16(255),
574
- wp.int32(-64),
575
- wp.uint32(255),
576
- wp.int64(-64),
577
- wp.uint64(255),
578
- wp.float32(3.14159),
579
- wp.float64(3.14159),
580
- ],
581
- devices=devices,
582
- )
583
- add_kernel_test(
584
- TestCTypes, name="test_vector_arg_types", kernel=test_vector_arg_types, dim=1, inputs=inputs, devices=devices
585
- )
586
- add_kernel_test(TestCTypes, name="test_type_convesrions", kernel=test_type_conversions, dim=1, devices=devices)
587
-
588
- add_function_test(
589
- TestCTypes, "test_scalar_array_load", test_scalar_array_types, devices=devices, load=True, store=False
590
- )
591
- add_function_test(
592
- TestCTypes, "test_scalar_array_store", test_scalar_array_types, devices=devices, load=False, store=True
593
- )
594
- add_function_test(TestCTypes, "test_vec2_arg", test_vec2_arg, devices=devices, n=8)
595
- add_function_test(TestCTypes, "test_vec2_transform", test_vec2_transform, devices=devices, n=8)
596
- add_function_test(TestCTypes, "test_vec3_arg", test_vec3_arg, devices=devices, n=8)
597
- add_function_test(TestCTypes, "test_vec3_transform", test_vec3_transform, devices=devices, n=8)
598
- add_function_test(TestCTypes, "test_transform_multiply", test_transform_multiply, devices=devices, n=8)
599
- add_kernel_test(TestCTypes, name="test_transform_matrix", kernel=test_transform_matrix, dim=1, devices=devices)
600
- add_function_test(TestCTypes, "test_scalar_array", test_scalar_array, devices=devices)
601
- add_function_test(TestCTypes, "test_vector_array", test_vector_array, devices=devices)
602
-
603
- return TestCTypes
557
+ devices = get_test_devices()
558
+
559
+
560
+ class TestCTypes(unittest.TestCase):
561
+ pass
562
+
563
+
564
+ inputs = [
565
+ wp.vec2(1.0, 2.0),
566
+ wp.vec3(1.0, 2.0, 3.0),
567
+ wp.vec4(1.0, 2.0, 3.0, 4.0),
568
+ wp.mat22(1.0, 2.0, 3.0, 4.0),
569
+ wp.mat33(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0),
570
+ wp.mat44(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0),
571
+ ]
572
+
573
+ add_function_test(TestCTypes, "test_mat22", test_mat22, devices=devices)
574
+ add_function_test(TestCTypes, "test_mat33", test_mat33, devices=devices)
575
+ add_function_test(TestCTypes, "test_mat44", test_mat44, devices=devices)
576
+ add_kernel_test(
577
+ TestCTypes, name="test_transformation_constructor", kernel=test_transformation_constructor, dim=1, devices=devices
578
+ )
579
+ add_kernel_test(
580
+ TestCTypes, name="test_spatial_vector_constructor", kernel=test_spatial_vector_constructor, dim=1, devices=devices
581
+ )
582
+ add_kernel_test(
583
+ TestCTypes,
584
+ name="test_scalar_arg_types",
585
+ kernel=test_scalar_arg_types,
586
+ dim=1,
587
+ inputs=[-64, 255, -64, 255, -64, 255, -64, 255, 3.14159, 3.14159],
588
+ devices=devices,
589
+ )
590
+ add_kernel_test(
591
+ TestCTypes,
592
+ name="test_scalar_arg_types_explicit",
593
+ kernel=test_scalar_arg_types,
594
+ dim=1,
595
+ inputs=[
596
+ wp.int8(-64),
597
+ wp.uint8(255),
598
+ wp.int16(-64),
599
+ wp.uint16(255),
600
+ wp.int32(-64),
601
+ wp.uint32(255),
602
+ wp.int64(-64),
603
+ wp.uint64(255),
604
+ wp.float32(3.14159),
605
+ wp.float64(3.14159),
606
+ ],
607
+ devices=devices,
608
+ )
609
+ add_kernel_test(
610
+ TestCTypes, name="test_vector_arg_types", kernel=test_vector_arg_types, dim=1, inputs=inputs, devices=devices
611
+ )
612
+ add_kernel_test(TestCTypes, name="test_type_convesrions", kernel=test_type_conversions, dim=1, devices=devices)
613
+
614
+ add_function_test(
615
+ TestCTypes, "test_scalar_array_load", test_scalar_array_types, devices=devices, load=True, store=False
616
+ )
617
+ add_function_test(
618
+ TestCTypes, "test_scalar_array_store", test_scalar_array_types, devices=devices, load=False, store=True
619
+ )
620
+ add_function_test(TestCTypes, "test_vec2_arg", test_vec2_arg, devices=devices, n=8)
621
+ add_function_test(TestCTypes, "test_vec2_transform", test_vec2_transform, devices=devices, n=8)
622
+ add_function_test(TestCTypes, "test_vec3_arg", test_vec3_arg, devices=devices, n=8)
623
+ add_function_test(TestCTypes, "test_vec3_transform", test_vec3_transform, devices=devices, n=8)
624
+ add_function_test(TestCTypes, "test_transform_multiply", test_transform_multiply, devices=devices, n=8)
625
+ add_kernel_test(TestCTypes, name="test_transform_matrix", kernel=test_transform_matrix, dim=1, devices=devices)
626
+ add_function_test(TestCTypes, "test_scalar_array", test_scalar_array, devices=devices)
627
+ add_function_test(TestCTypes, "test_vector_array", test_vector_array, devices=devices)
604
628
 
605
629
 
606
630
  if __name__ == "__main__":
607
- c = register(unittest.TestCase)
631
+ wp.build.clear_kernel_cache()
608
632
  unittest.main(verbosity=2)
warp/tests/test_dense.py CHANGED
@@ -1,11 +1,15 @@
1
- import numpy as np
2
- import math
3
-
4
- import warp as wp
5
- from warp.tests.test_base import *
1
+ # Copyright (c) 2022 NVIDIA CORPORATION. All rights reserved.
2
+ # NVIDIA CORPORATION and its licensors retain all intellectual property
3
+ # and proprietary rights in and to this software, related documentation
4
+ # and any modifications thereto. Any use, reproduction, disclosure or
5
+ # distribution of this software and related documentation without an express
6
+ # license agreement from NVIDIA CORPORATION is strictly prohibited.
6
7
 
7
8
  import unittest
8
9
 
10
+ import warp as wp
11
+ from warp.tests.unittest_utils import *
12
+
9
13
  wp.init()
10
14
 
11
15
 
@@ -42,19 +46,22 @@ def eval_dense_solve(
42
46
  wp.dense_solve(n, A, L, b, x)
43
47
 
44
48
 
45
- def register(parent):
46
- devices = get_test_devices()
47
-
48
- class TestDense(parent):
49
- pass
50
-
49
+ def test_dense_compilation(test, device):
51
50
  # just testing compilation of the dense matrix routines
52
51
  # most are deprecated / WIP
53
- wp.force_load()
52
+ wp.load_module(device=device)
53
+
54
+
55
+ devices = get_test_devices()
56
+
57
+
58
+ class TestDense(unittest.TestCase):
59
+ pass
60
+
54
61
 
55
- return TestDense
62
+ add_function_test(TestDense, "test_dense_compilation", test_dense_compilation, devices=devices)
56
63
 
57
64
 
58
65
  if __name__ == "__main__":
59
- c = register(unittest.TestCase)
66
+ wp.build.clear_kernel_cache()
60
67
  unittest.main(verbosity=2)
@@ -0,0 +1,98 @@
1
+ # Copyright (c) 2023 NVIDIA CORPORATION. All rights reserved.
2
+ # NVIDIA CORPORATION and its licensors retain all intellectual property
3
+ # and proprietary rights in and to this software, related documentation
4
+ # and any modifications thereto. Any use, reproduction, disclosure or
5
+ # distribution of this software and related documentation without an express
6
+ # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
+
8
+ import unittest
9
+
10
+ import warp as wp
11
+ from warp.tests.unittest_utils import *
12
+
13
+ wp.init()
14
+
15
+
16
+ def test_devices_get_cuda_device_functions(test, device):
17
+ test.assertTrue(device.is_cuda)
18
+ test.assertTrue(wp.is_device_available(device))
19
+
20
+ device_ordinal = device.ordinal
21
+ current_device = wp.get_cuda_device(device_ordinal)
22
+ test.assertEqual(current_device, device)
23
+ current_device = wp.get_cuda_device() # No-ordinal version
24
+ test.assertTrue(wp.is_device_available(current_device))
25
+
26
+ if device == current_device:
27
+ test.assertEqual(device, "cuda")
28
+ else:
29
+ test.assertNotEqual(device, "cuda")
30
+
31
+ preferred_device = wp.get_preferred_device()
32
+ test.assertTrue(wp.is_device_available(preferred_device))
33
+
34
+
35
+ def test_devices_map_cuda_device(test, device):
36
+ with wp.ScopedDevice(device):
37
+ saved_alias = device.alias
38
+ # Map alias twice to check code path
39
+ wp.map_cuda_device("new_alias")
40
+ wp.map_cuda_device("new_alias")
41
+ wp.context.runtime.rename_device(device, saved_alias)
42
+
43
+
44
+ def test_devices_unmap_imaginary_device(test, device):
45
+ with test.assertRaises(RuntimeError):
46
+ wp.unmap_cuda_device("imaginary_device:0")
47
+
48
+
49
+ def test_devices_verify_cuda_device(test, device):
50
+ verify_cuda_saved = wp.config.verify_cuda
51
+
52
+ wp.config.verify_cuda = True
53
+
54
+ wp.context.runtime.verify_cuda_device(device)
55
+
56
+ wp.config.verify_cuda = verify_cuda_saved
57
+
58
+
59
+ @unittest.skipUnless(wp.is_cuda_available(), "Requires CUDA")
60
+ def test_devices_can_access_self(test, device):
61
+ test.assertTrue(device.can_access(device))
62
+
63
+ for warp_device in wp.get_devices():
64
+ device_str = str(warp_device)
65
+
66
+ if (device.is_cpu and warp_device.is_cuda) or (device.is_cuda and warp_device.is_cpu):
67
+ test.assertFalse(device.can_access(warp_device))
68
+ test.assertNotEqual(device, warp_device)
69
+ test.assertNotEqual(device, device_str)
70
+
71
+
72
+ devices = get_test_devices()
73
+
74
+
75
+ class TestDevices(unittest.TestCase):
76
+ pass
77
+
78
+
79
+ add_function_test(
80
+ TestDevices,
81
+ "test_devices_get_cuda_device_functions",
82
+ test_devices_get_cuda_device_functions,
83
+ devices=get_unique_cuda_test_devices(),
84
+ )
85
+ add_function_test(
86
+ TestDevices, "test_devices_map_cuda_device", test_devices_map_cuda_device, devices=get_unique_cuda_test_devices()
87
+ )
88
+ add_function_test(
89
+ TestDevices, "test_devices_unmap_imaginary_device", test_devices_unmap_imaginary_device, devices=devices
90
+ )
91
+ add_function_test(TestDevices, "test_devices_verify_cuda_device", test_devices_verify_cuda_device, devices=devices)
92
+
93
+ add_function_test(TestDevices, "test_devices_can_access_self", test_devices_can_access_self, devices=devices)
94
+
95
+
96
+ if __name__ == "__main__":
97
+ wp.build.clear_kernel_cache()
98
+ unittest.main(verbosity=2)