warp-lang 0.10.1__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 (300) hide show
  1. warp/__init__.py +10 -4
  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 +5 -3
  6. warp/build_dll.py +29 -9
  7. warp/builtins.py +868 -507
  8. warp/codegen.py +1074 -638
  9. warp/config.py +3 -3
  10. warp/constants.py +6 -0
  11. warp/context.py +715 -222
  12. warp/fabric.py +326 -0
  13. warp/fem/__init__.py +27 -0
  14. warp/fem/cache.py +389 -0
  15. warp/fem/dirichlet.py +181 -0
  16. warp/fem/domain.py +263 -0
  17. warp/fem/field/__init__.py +101 -0
  18. warp/fem/field/field.py +149 -0
  19. warp/fem/field/nodal_field.py +299 -0
  20. warp/fem/field/restriction.py +21 -0
  21. warp/fem/field/test.py +181 -0
  22. warp/fem/field/trial.py +183 -0
  23. warp/fem/geometry/__init__.py +19 -0
  24. warp/fem/geometry/closest_point.py +70 -0
  25. warp/fem/geometry/deformed_geometry.py +271 -0
  26. warp/fem/geometry/element.py +744 -0
  27. warp/fem/geometry/geometry.py +186 -0
  28. warp/fem/geometry/grid_2d.py +373 -0
  29. warp/fem/geometry/grid_3d.py +435 -0
  30. warp/fem/geometry/hexmesh.py +953 -0
  31. warp/fem/geometry/partition.py +376 -0
  32. warp/fem/geometry/quadmesh_2d.py +532 -0
  33. warp/fem/geometry/tetmesh.py +840 -0
  34. warp/fem/geometry/trimesh_2d.py +577 -0
  35. warp/fem/integrate.py +1616 -0
  36. warp/fem/operator.py +191 -0
  37. warp/fem/polynomial.py +213 -0
  38. warp/fem/quadrature/__init__.py +2 -0
  39. warp/fem/quadrature/pic_quadrature.py +245 -0
  40. warp/fem/quadrature/quadrature.py +294 -0
  41. warp/fem/space/__init__.py +292 -0
  42. warp/fem/space/basis_space.py +489 -0
  43. warp/fem/space/collocated_function_space.py +105 -0
  44. warp/fem/space/dof_mapper.py +236 -0
  45. warp/fem/space/function_space.py +145 -0
  46. warp/fem/space/grid_2d_function_space.py +267 -0
  47. warp/fem/space/grid_3d_function_space.py +306 -0
  48. warp/fem/space/hexmesh_function_space.py +352 -0
  49. warp/fem/space/partition.py +350 -0
  50. warp/fem/space/quadmesh_2d_function_space.py +369 -0
  51. warp/fem/space/restriction.py +160 -0
  52. warp/fem/space/shape/__init__.py +15 -0
  53. warp/fem/space/shape/cube_shape_function.py +738 -0
  54. warp/fem/space/shape/shape_function.py +103 -0
  55. warp/fem/space/shape/square_shape_function.py +611 -0
  56. warp/fem/space/shape/tet_shape_function.py +567 -0
  57. warp/fem/space/shape/triangle_shape_function.py +429 -0
  58. warp/fem/space/tetmesh_function_space.py +292 -0
  59. warp/fem/space/topology.py +295 -0
  60. warp/fem/space/trimesh_2d_function_space.py +221 -0
  61. warp/fem/types.py +77 -0
  62. warp/fem/utils.py +495 -0
  63. warp/native/array.h +147 -44
  64. warp/native/builtin.h +122 -149
  65. warp/native/bvh.cpp +73 -325
  66. warp/native/bvh.cu +406 -23
  67. warp/native/bvh.h +34 -43
  68. warp/native/clang/clang.cpp +13 -8
  69. warp/native/crt.h +2 -0
  70. warp/native/cuda_crt.h +5 -0
  71. warp/native/cuda_util.cpp +15 -3
  72. warp/native/cuda_util.h +3 -1
  73. warp/native/cutlass/tools/library/scripts/conv2d_operation.py +463 -0
  74. warp/native/cutlass/tools/library/scripts/conv3d_operation.py +321 -0
  75. warp/native/cutlass/tools/library/scripts/gemm_operation.py +988 -0
  76. warp/native/cutlass/tools/library/scripts/generator.py +4625 -0
  77. warp/native/cutlass/tools/library/scripts/library.py +799 -0
  78. warp/native/cutlass/tools/library/scripts/manifest.py +402 -0
  79. warp/native/cutlass/tools/library/scripts/pycutlass/docs/source/conf.py +96 -0
  80. warp/native/cutlass/tools/library/scripts/pycutlass/profile/conv/conv2d_f16_sm80.py +106 -0
  81. warp/native/cutlass/tools/library/scripts/pycutlass/profile/gemm/gemm_f32_sm80.py +91 -0
  82. warp/native/cutlass/tools/library/scripts/pycutlass/setup.py +80 -0
  83. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/__init__.py +48 -0
  84. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/arguments.py +118 -0
  85. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/c_types.py +241 -0
  86. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/compiler.py +432 -0
  87. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/conv2d_operation.py +631 -0
  88. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/epilogue.py +1026 -0
  89. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/frontend.py +104 -0
  90. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/gemm_operation.py +1276 -0
  91. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/library.py +744 -0
  92. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/memory_manager.py +74 -0
  93. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/operation.py +110 -0
  94. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/parser.py +619 -0
  95. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/reduction_operation.py +398 -0
  96. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/tensor_ref.py +70 -0
  97. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/__init__.py +4 -0
  98. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/conv2d_testbed.py +646 -0
  99. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_grouped_testbed.py +235 -0
  100. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_testbed.py +557 -0
  101. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/profiler.py +70 -0
  102. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/type_hint.py +39 -0
  103. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/__init__.py +1 -0
  104. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/device.py +76 -0
  105. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/reference_model.py +255 -0
  106. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/__init__.py +0 -0
  107. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +201 -0
  108. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +177 -0
  109. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +98 -0
  110. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +95 -0
  111. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_few_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +163 -0
  112. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_fixed_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +187 -0
  113. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +309 -0
  114. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +54 -0
  115. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
  116. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
  117. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_strided_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +253 -0
  118. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +97 -0
  119. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +242 -0
  120. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
  121. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
  122. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/run_all_tests.py +10 -0
  123. warp/native/cutlass/tools/library/scripts/pycutlass/test/frontend/test_frontend.py +146 -0
  124. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/__init__.py +0 -0
  125. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_bf16_sm80.py +96 -0
  126. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f16_sm80.py +447 -0
  127. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f32_sm80.py +146 -0
  128. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f64_sm80.py +102 -0
  129. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_grouped_sm80.py +203 -0
  130. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_s8_sm80.py +229 -0
  131. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/run_all_tests.py +9 -0
  132. warp/native/cutlass/tools/library/scripts/pycutlass/test/unit/test_sm80.py +453 -0
  133. warp/native/cutlass/tools/library/scripts/rank_2k_operation.py +398 -0
  134. warp/native/cutlass/tools/library/scripts/rank_k_operation.py +387 -0
  135. warp/native/cutlass/tools/library/scripts/rt.py +796 -0
  136. warp/native/cutlass/tools/library/scripts/symm_operation.py +400 -0
  137. warp/native/cutlass/tools/library/scripts/trmm_operation.py +407 -0
  138. warp/native/cutlass_gemm.cu +5 -3
  139. warp/native/exports.h +1240 -952
  140. warp/native/fabric.h +228 -0
  141. warp/native/hashgrid.cpp +4 -4
  142. warp/native/hashgrid.h +22 -2
  143. warp/native/intersect.h +22 -7
  144. warp/native/intersect_adj.h +8 -8
  145. warp/native/intersect_tri.h +1 -1
  146. warp/native/marching.cu +157 -161
  147. warp/native/mat.h +80 -19
  148. warp/native/matnn.h +2 -2
  149. warp/native/mesh.cpp +33 -108
  150. warp/native/mesh.cu +114 -23
  151. warp/native/mesh.h +446 -46
  152. warp/native/noise.h +272 -329
  153. warp/native/quat.h +51 -8
  154. warp/native/rand.h +45 -35
  155. warp/native/range.h +6 -2
  156. warp/native/reduce.cpp +1 -1
  157. warp/native/reduce.cu +10 -12
  158. warp/native/runlength_encode.cu +6 -10
  159. warp/native/scan.cu +8 -11
  160. warp/native/sparse.cpp +4 -4
  161. warp/native/sparse.cu +164 -154
  162. warp/native/spatial.h +2 -2
  163. warp/native/temp_buffer.h +14 -30
  164. warp/native/vec.h +107 -23
  165. warp/native/volume.h +120 -0
  166. warp/native/warp.cpp +560 -30
  167. warp/native/warp.cu +431 -44
  168. warp/native/warp.h +13 -4
  169. warp/optim/__init__.py +1 -0
  170. warp/optim/linear.py +922 -0
  171. warp/optim/sgd.py +92 -0
  172. warp/render/render_opengl.py +335 -119
  173. warp/render/render_usd.py +11 -11
  174. warp/sim/__init__.py +2 -2
  175. warp/sim/articulation.py +385 -185
  176. warp/sim/collide.py +8 -0
  177. warp/sim/import_mjcf.py +297 -106
  178. warp/sim/import_urdf.py +389 -210
  179. warp/sim/import_usd.py +198 -97
  180. warp/sim/inertia.py +17 -18
  181. warp/sim/integrator_euler.py +14 -8
  182. warp/sim/integrator_xpbd.py +158 -16
  183. warp/sim/model.py +795 -291
  184. warp/sim/render.py +3 -3
  185. warp/sim/utils.py +3 -0
  186. warp/sparse.py +640 -150
  187. warp/stubs.py +606 -267
  188. warp/tape.py +61 -10
  189. warp/tests/__main__.py +3 -6
  190. warp/tests/assets/curlnoise_golden.npy +0 -0
  191. warp/tests/assets/pnoise_golden.npy +0 -0
  192. warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
  193. warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
  194. warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
  195. warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
  196. warp/tests/aux_test_unresolved_func.py +14 -0
  197. warp/tests/aux_test_unresolved_symbol.py +14 -0
  198. warp/tests/disabled_kinematics.py +239 -0
  199. warp/tests/run_coverage_serial.py +31 -0
  200. warp/tests/test_adam.py +103 -106
  201. warp/tests/test_arithmetic.py +128 -74
  202. warp/tests/test_array.py +212 -97
  203. warp/tests/test_array_reduce.py +57 -23
  204. warp/tests/test_atomic.py +64 -28
  205. warp/tests/test_bool.py +99 -0
  206. warp/tests/test_builtins_resolution.py +1292 -0
  207. warp/tests/test_bvh.py +42 -18
  208. warp/tests/test_closest_point_edge_edge.py +54 -57
  209. warp/tests/test_codegen.py +208 -130
  210. warp/tests/test_compile_consts.py +28 -20
  211. warp/tests/test_conditional.py +108 -24
  212. warp/tests/test_copy.py +10 -12
  213. warp/tests/test_ctypes.py +112 -88
  214. warp/tests/test_dense.py +21 -14
  215. warp/tests/test_devices.py +98 -0
  216. warp/tests/test_dlpack.py +75 -75
  217. warp/tests/test_examples.py +277 -0
  218. warp/tests/test_fabricarray.py +955 -0
  219. warp/tests/test_fast_math.py +15 -11
  220. warp/tests/test_fem.py +1271 -0
  221. warp/tests/test_fp16.py +53 -19
  222. warp/tests/test_func.py +187 -86
  223. warp/tests/test_generics.py +194 -49
  224. warp/tests/test_grad.py +178 -109
  225. warp/tests/test_grad_customs.py +176 -0
  226. warp/tests/test_hash_grid.py +52 -37
  227. warp/tests/test_import.py +10 -23
  228. warp/tests/test_indexedarray.py +32 -31
  229. warp/tests/test_intersect.py +18 -9
  230. warp/tests/test_large.py +141 -0
  231. warp/tests/test_launch.py +14 -41
  232. warp/tests/test_lerp.py +64 -65
  233. warp/tests/test_linear_solvers.py +154 -0
  234. warp/tests/test_lvalue.py +493 -0
  235. warp/tests/test_marching_cubes.py +12 -13
  236. warp/tests/test_mat.py +517 -2898
  237. warp/tests/test_mat_lite.py +115 -0
  238. warp/tests/test_mat_scalar_ops.py +2889 -0
  239. warp/tests/test_math.py +103 -9
  240. warp/tests/test_matmul.py +305 -69
  241. warp/tests/test_matmul_lite.py +410 -0
  242. warp/tests/test_mesh.py +71 -14
  243. warp/tests/test_mesh_query_aabb.py +41 -25
  244. warp/tests/test_mesh_query_point.py +140 -22
  245. warp/tests/test_mesh_query_ray.py +39 -22
  246. warp/tests/test_mlp.py +30 -22
  247. warp/tests/test_model.py +92 -89
  248. warp/tests/test_modules_lite.py +39 -0
  249. warp/tests/test_multigpu.py +88 -114
  250. warp/tests/test_noise.py +12 -11
  251. warp/tests/test_operators.py +16 -20
  252. warp/tests/test_options.py +11 -11
  253. warp/tests/test_pinned.py +17 -18
  254. warp/tests/test_print.py +32 -11
  255. warp/tests/test_quat.py +275 -129
  256. warp/tests/test_rand.py +18 -16
  257. warp/tests/test_reload.py +38 -34
  258. warp/tests/test_rounding.py +50 -43
  259. warp/tests/test_runlength_encode.py +168 -20
  260. warp/tests/test_smoothstep.py +9 -11
  261. warp/tests/test_snippet.py +143 -0
  262. warp/tests/test_sparse.py +261 -63
  263. warp/tests/test_spatial.py +276 -243
  264. warp/tests/test_streams.py +110 -85
  265. warp/tests/test_struct.py +268 -63
  266. warp/tests/test_tape.py +39 -21
  267. warp/tests/test_torch.py +118 -89
  268. warp/tests/test_transient_module.py +12 -13
  269. warp/tests/test_types.py +614 -0
  270. warp/tests/test_utils.py +494 -0
  271. warp/tests/test_vec.py +354 -2050
  272. warp/tests/test_vec_lite.py +73 -0
  273. warp/tests/test_vec_scalar_ops.py +2099 -0
  274. warp/tests/test_volume.py +457 -293
  275. warp/tests/test_volume_write.py +124 -134
  276. warp/tests/unittest_serial.py +35 -0
  277. warp/tests/unittest_suites.py +341 -0
  278. warp/tests/unittest_utils.py +568 -0
  279. warp/tests/unused_test_misc.py +71 -0
  280. warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
  281. warp/thirdparty/appdirs.py +36 -45
  282. warp/thirdparty/unittest_parallel.py +549 -0
  283. warp/torch.py +9 -6
  284. warp/types.py +1089 -366
  285. warp/utils.py +93 -387
  286. warp_lang-0.11.0.dist-info/METADATA +238 -0
  287. warp_lang-0.11.0.dist-info/RECORD +332 -0
  288. {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/WHEEL +1 -1
  289. warp/tests/test_all.py +0 -219
  290. warp/tests/test_array_scan.py +0 -60
  291. warp/tests/test_base.py +0 -208
  292. warp/tests/test_unresolved_func.py +0 -7
  293. warp/tests/test_unresolved_symbol.py +0 -7
  294. warp_lang-0.10.1.dist-info/METADATA +0 -21
  295. warp_lang-0.10.1.dist-info/RECORD +0 -188
  296. /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
  297. /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
  298. /warp/tests/{test_square.py → aux_test_square.py} +0 -0
  299. {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/LICENSE.md +0 -0
  300. {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/top_level.txt +0 -0
@@ -5,14 +5,11 @@
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
- import os
9
- import sys
10
-
11
8
  import unittest
12
- from warp.tests.test_base import *
13
- import warp.tests.test_compile_consts_dummy
14
9
 
15
10
  import warp as wp
11
+ import warp.tests.aux_test_compile_consts_dummy
12
+ from warp.tests.unittest_utils import *
16
13
 
17
14
  wp.init()
18
15
 
@@ -20,6 +17,8 @@ LOCAL_ONE = wp.constant(1)
20
17
 
21
18
  SQRT3_OVER_3 = wp.constant(0.57735026919)
22
19
  UNIT_VEC = wp.constant(wp.vec3(SQRT3_OVER_3, SQRT3_OVER_3, SQRT3_OVER_3))
20
+ ONE_FP16 = wp.constant(wp.float16(1.0))
21
+ TEST_BOOL = wp.constant(True)
23
22
 
24
23
 
25
24
  class Foobar:
@@ -27,10 +26,18 @@ class Foobar:
27
26
  TWO = wp.constant(2)
28
27
 
29
28
 
29
+ @wp.kernel
30
+ def test_constants_bool():
31
+ if TEST_BOOL:
32
+ expect_eq(1.0, 1.0)
33
+ else:
34
+ expect_eq(1.0, -1.0)
35
+
36
+
30
37
  @wp.kernel
31
38
  def test_constants_int(a: int):
32
39
  if Foobar.ONE > 0:
33
- a = 123 + Foobar.TWO + warp.tests.test_compile_consts_dummy.MINUS_ONE
40
+ a = 123 + Foobar.TWO + warp.tests.aux_test_compile_consts_dummy.MINUS_ONE
34
41
  else:
35
42
  a = 456 + LOCAL_ONE
36
43
  expect_eq(a, 124)
@@ -45,6 +52,9 @@ def test_constants_float(x: float):
45
52
  approx_one = wp.dot(UNIT_VEC, UNIT_VEC)
46
53
  expect_near(approx_one, 1.0, 1e-6)
47
54
 
55
+ # test casting
56
+ expect_near(wp.float32(ONE_FP16), 1.0, 1e-6)
57
+
48
58
 
49
59
  def test_constant_math(test, device):
50
60
  # test doing math with Python defined constants in *Python* scope
@@ -60,8 +70,7 @@ def test_constant_closure_capture(test, device):
60
70
  def closure_kernel_fn(expected: int):
61
71
  wp.expect_eq(cst, expected)
62
72
 
63
- key = f"test_constant_closure_capture_{cst}"
64
- return wp.Kernel(func=closure_kernel_fn, key=key, module=wp.get_module(closure_kernel_fn.__module__))
73
+ return wp.Kernel(func=closure_kernel_fn)
65
74
 
66
75
  one_closure = make_closure_kernel(Foobar.ONE)
67
76
  two_closure = make_closure_kernel(Foobar.TWO)
@@ -70,24 +79,23 @@ def test_constant_closure_capture(test, device):
70
79
  wp.launch(two_closure, dim=(1), inputs=[2], device=device)
71
80
 
72
81
 
73
- def register(parent):
74
- class TestConstants(parent):
75
- pass
82
+ class TestConstants(unittest.TestCase):
83
+ pass
76
84
 
77
- a = 0
78
- x = 0.0
79
85
 
80
- devices = get_test_devices()
86
+ a = 0
87
+ x = 0.0
81
88
 
82
- add_kernel_test(TestConstants, test_constants_int, dim=1, inputs=[a], devices=devices)
83
- add_kernel_test(TestConstants, test_constants_float, dim=1, inputs=[x], devices=devices)
89
+ devices = get_test_devices()
84
90
 
85
- add_function_test(TestConstants, "test_constant_math", test_constant_math, devices=devices)
86
- add_function_test(TestConstants, "test_constant_closure_capture", test_constant_closure_capture, devices=devices)
91
+ add_kernel_test(TestConstants, test_constants_bool, dim=1, inputs=[], devices=devices)
92
+ add_kernel_test(TestConstants, test_constants_int, dim=1, inputs=[a], devices=devices)
93
+ add_kernel_test(TestConstants, test_constants_float, dim=1, inputs=[x], devices=devices)
87
94
 
88
- return TestConstants
95
+ add_function_test(TestConstants, "test_constant_math", test_constant_math, devices=devices)
96
+ add_function_test(TestConstants, "test_constant_closure_capture", test_constant_closure_capture, devices=devices)
89
97
 
90
98
 
91
99
  if __name__ == "__main__":
92
- c = register(unittest.TestCase)
100
+ wp.build.clear_kernel_cache()
93
101
  unittest.main(verbosity=2)
@@ -5,17 +5,10 @@
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
9
- import os
10
- import sys
11
- import numpy as np
12
- import math
13
- import ctypes
8
+ import unittest
14
9
 
15
10
  import warp as wp
16
- from warp.tests.test_base import *
17
-
18
- import unittest
11
+ from warp.tests.unittest_utils import *
19
12
 
20
13
  wp.init()
21
14
 
@@ -138,25 +131,116 @@ def test_bool_param_conditional(foo: bool):
138
131
  wp.expect_eq(x, 123)
139
132
 
140
133
 
141
- def register(parent):
142
- devices = get_test_devices()
134
+ @wp.kernel
135
+ def test_conditional_chain_basic():
136
+ x = -1
137
+
138
+ if 0 < x < 1:
139
+ success = False
140
+ else:
141
+ success = True
142
+ wp.expect_eq(success, True)
143
+
144
+
145
+ @wp.kernel
146
+ def test_conditional_chain_empty_range():
147
+ x = -1
148
+ y = 4
149
+
150
+ if -2 <= x <= 10 <= y:
151
+ success = False
152
+ else:
153
+ success = True
154
+ wp.expect_eq(success, True)
155
+
156
+
157
+ @wp.kernel
158
+ def test_conditional_chain_faker():
159
+ x = -1
160
+
161
+ # Not actually a chained inequality
162
+ if (-2 < x) < (1 > 0):
163
+ success = False
164
+ else:
165
+ success = True
166
+ wp.expect_eq(success, True)
167
+
168
+
169
+ @wp.kernel
170
+ def test_conditional_chain_and():
171
+ x = -1
172
+
173
+ if (-2 < x < 0) and (-1 <= x <= -1):
174
+ success = True
175
+ else:
176
+ success = False
177
+ wp.expect_eq(success, True)
178
+
179
+
180
+ @wp.kernel
181
+ def test_conditional_chain_eqs():
182
+ x = wp.int32(10)
183
+ y = 10
184
+ z = -10
185
+
186
+ if x == y != z:
187
+ success = True
188
+ else:
189
+ success = False
190
+ wp.expect_eq(success, True)
191
+
192
+
193
+ @wp.kernel
194
+ def test_conditional_chain_mixed():
195
+ x = 0
196
+
197
+ if x < 10 == 1:
198
+ success = False
199
+ else:
200
+ success = True
201
+ wp.expect_eq(success, True)
202
+
203
+
204
+ def test_conditional_unequal_types(test: unittest.TestCase, device):
205
+ # The bad kernel must be in a separate module, otherwise the current module would fail to load
206
+ from warp.tests.aux_test_conditional_unequal_types_kernels import (
207
+ unequal_types_kernel,
208
+ )
209
+
210
+ with test.assertRaises(TypeError):
211
+ wp.launch(unequal_types_kernel, dim=(1,), inputs=[], device=device)
212
+
213
+ # remove all references to the bad module so that subsequent calls to wp.force_load()
214
+ # won't try to load it unless we explicitly re-import it again
215
+ del wp.context.user_modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
216
+ del sys.modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
217
+
218
+
219
+ devices = get_test_devices()
220
+
143
221
 
144
- class TestConditional(parent):
145
- pass
222
+ class TestConditional(unittest.TestCase):
223
+ pass
146
224
 
147
- add_kernel_test(TestConditional, kernel=test_conditional_if_else, dim=1, devices=devices)
148
- add_kernel_test(TestConditional, kernel=test_conditional_if_else_nested, dim=1, devices=devices)
149
- add_kernel_test(TestConditional, kernel=test_boolean_and, dim=1, devices=devices)
150
- add_kernel_test(TestConditional, kernel=test_boolean_or, dim=1, devices=devices)
151
- add_kernel_test(TestConditional, kernel=test_boolean_compound, dim=1, devices=devices)
152
- add_kernel_test(TestConditional, kernel=test_boolean_literal, dim=1, devices=devices)
153
- add_kernel_test(TestConditional, kernel=test_int_logical_not, dim=1, devices=devices)
154
- add_kernel_test(TestConditional, kernel=test_int_conditional_assign_overload, dim=1, devices=devices)
155
- add_kernel_test(TestConditional, kernel=test_bool_param_conditional, dim=1, inputs=[True], devices=devices)
156
225
 
157
- return TestConditional
226
+ add_kernel_test(TestConditional, kernel=test_conditional_if_else, dim=1, devices=devices)
227
+ add_kernel_test(TestConditional, kernel=test_conditional_if_else_nested, dim=1, devices=devices)
228
+ add_kernel_test(TestConditional, kernel=test_boolean_and, dim=1, devices=devices)
229
+ add_kernel_test(TestConditional, kernel=test_boolean_or, dim=1, devices=devices)
230
+ add_kernel_test(TestConditional, kernel=test_boolean_compound, dim=1, devices=devices)
231
+ add_kernel_test(TestConditional, kernel=test_boolean_literal, dim=1, devices=devices)
232
+ add_kernel_test(TestConditional, kernel=test_int_logical_not, dim=1, devices=devices)
233
+ add_kernel_test(TestConditional, kernel=test_int_conditional_assign_overload, dim=1, devices=devices)
234
+ add_kernel_test(TestConditional, kernel=test_bool_param_conditional, dim=1, inputs=[True], devices=devices)
235
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_basic, dim=1, devices=devices)
236
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_empty_range, dim=1, devices=devices)
237
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_faker, dim=1, devices=devices)
238
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_and, dim=1, devices=devices)
239
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_eqs, dim=1, devices=devices)
240
+ add_kernel_test(TestConditional, kernel=test_conditional_chain_mixed, dim=1, devices=devices)
241
+ add_function_test(TestConditional, "test_conditional_unequal_types", test_conditional_unequal_types, devices=devices)
158
242
 
159
243
 
160
244
  if __name__ == "__main__":
161
- c = register(unittest.TestCase)
245
+ wp.build.clear_kernel_cache()
162
246
  unittest.main(verbosity=2)
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)