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
@@ -5,11 +5,13 @@
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 warp as wp
9
- from warp.tests.test_base import *
8
+ import unittest
10
9
 
11
10
  import numpy as np
12
11
 
12
+ import warp as wp
13
+ from warp.tests.unittest_utils import *
14
+
13
15
  wp.init()
14
16
  # wp.config.cache_kernels = False
15
17
 
@@ -137,139 +139,127 @@ def test_volume_tile_readback_v(volume: wp.uint64, tiles: wp.array2d(dtype=wp.in
137
139
  values[tid * 512 + r] = wp.volume_lookup_v(volume, ii, jj, kk)
138
140
 
139
141
 
140
- rng = np.random.default_rng(101215)
141
-
142
-
143
- def register(parent):
144
- devices = get_test_devices()
145
-
146
- class TestVolumes(parent):
147
- def test_volume_allocation(self):
148
- voxel_size = 0.125
149
- background_value = 123.456
150
- translation = wp.vec3(-12.3, 4.56, -789)
151
-
152
- axis = np.linspace(-11, 11, 23)
153
- points_ref = np.array([[x, y, z] for x in axis for y in axis for z in axis])
154
- values_ref = np.array([x + 100 * y + 10000 * z for x in axis for y in axis for z in axis])
155
- num_points = len(points_ref)
156
- bb_max = np.array([11, 11, 11])
157
- for device in devices:
158
- if device.is_cpu:
159
- continue
160
-
161
- volume_a = wp.Volume.allocate(
162
- -bb_max,
163
- bb_max,
164
- voxel_size=voxel_size,
165
- bg_value=background_value,
166
- translation=translation,
167
- device=device,
168
- )
169
- volume_b = wp.Volume.allocate(
170
- -bb_max * voxel_size + translation,
171
- bb_max * voxel_size + translation,
172
- voxel_size=voxel_size,
173
- bg_value=background_value,
174
- translation=translation,
175
- points_in_world_space=True,
176
- device=device,
177
- )
178
- points = wp.array(points_ref, dtype=wp.vec3, device=device)
179
- values_a = wp.empty(num_points, dtype=wp.float32, device=device)
180
- values_b = wp.empty(num_points, dtype=wp.float32, device=device)
181
- wp.launch(test_volume_store_f, dim=num_points, inputs=[volume_a.id, points], device=device)
182
- wp.launch(test_volume_store_f, dim=num_points, inputs=[volume_b.id, points], device=device)
183
- wp.launch(test_volume_readback_f, dim=num_points, inputs=[volume_a.id, points, values_a], device=device)
184
- wp.launch(test_volume_readback_f, dim=num_points, inputs=[volume_b.id, points, values_b], device=device)
185
-
186
- np.testing.assert_equal(values_a.numpy(), values_ref)
187
- np.testing.assert_equal(values_b.numpy(), values_ref)
188
-
189
- def test_volume_allocate_by_tiles_f(self):
190
- voxel_size = 0.125
191
- background_value = 123.456
192
- translation = wp.vec3(-12.3, 4.56, -789)
193
-
194
- num_tiles = 1000
195
- tiles = rng.integers(-512, 512, size=(num_tiles, 3), dtype=np.int32)
196
- points_is = tiles * 8 # points in index space
197
- points_ws = points_is * voxel_size + translation # points in world space
198
-
199
- values_ref = np.empty(num_tiles * 512)
200
- for t in range(num_tiles):
201
- ti, tj, tk = points_is[t]
202
- for i in range(8):
203
- for j in range(8):
204
- for k in range(8):
205
- values_ref[t * 512 + i * 64 + j * 8 + k] = float(100 * (ti + i) + 10 * (tj + j) + (tk + k))
206
-
207
- for device in devices:
208
- if device.is_cpu:
209
- continue
210
-
211
- points_is_d = wp.array(points_is, dtype=wp.int32, device=device)
212
- points_ws_d = wp.array(points_ws, dtype=wp.vec3, device=device)
213
- volume_a = wp.Volume.allocate_by_tiles(
214
- points_is_d, voxel_size, background_value, translation, device=device
215
- )
216
- volume_b = wp.Volume.allocate_by_tiles(
217
- points_ws_d, voxel_size, background_value, translation, device=device
218
- )
219
- values_a = wp.empty(num_tiles * 512, dtype=wp.float32, device=device)
220
- values_b = wp.empty(num_tiles * 512, dtype=wp.float32, device=device)
221
-
222
- wp.launch(test_volume_tile_store_f, dim=num_tiles, inputs=[volume_a.id, points_is_d], device=device)
223
- wp.launch(test_volume_tile_store_ws_f, dim=num_tiles, inputs=[volume_b.id, points_ws_d], device=device)
224
- wp.launch(
225
- test_volume_tile_readback_f,
226
- dim=num_tiles,
227
- inputs=[volume_a.id, points_is_d, values_a],
228
- device=device,
229
- )
230
- wp.launch(
231
- test_volume_tile_readback_f,
232
- dim=num_tiles,
233
- inputs=[volume_b.id, points_is_d, values_b],
234
- device=device,
235
- )
236
-
237
- np.testing.assert_equal(values_a.numpy(), values_ref)
238
- np.testing.assert_equal(values_b.numpy(), values_ref)
239
-
240
- def test_volume_allocate_by_tiles_v(self):
241
- num_tiles = 1000
242
- tiles = rng.integers(-512, 512, size=(num_tiles, 3), dtype=np.int32)
243
- points_is = tiles * 8
244
-
245
- values_ref = np.empty((len(tiles) * 512, 3))
246
- for t in range(len(tiles)):
247
- ti, tj, tk = points_is[t]
248
- for i in range(8):
249
- for j in range(8):
250
- for k in range(8):
251
- values_ref[t * 512 + i * 64 + j * 8 + k] = [ti + i, tj + j, tk + k]
252
-
253
- for device in devices:
254
- if device.is_cpu:
255
- continue
256
-
257
- points_d = wp.array(points_is, dtype=wp.int32, device=device)
258
- volume = wp.Volume.allocate_by_tiles(points_d, 0.1, wp.vec3(1, 2, 3), device=device)
259
- values = wp.empty(len(points_d) * 512, dtype=wp.vec3, device=device)
260
-
261
- wp.launch(test_volume_tile_store_v, dim=len(points_d), inputs=[volume.id, points_d], device=device)
262
- wp.launch(
263
- test_volume_tile_readback_v, dim=len(points_d), inputs=[volume.id, points_d, values], device=device
264
- )
265
-
266
- values_res = values.numpy()
267
- np.testing.assert_equal(values_res, values_ref)
268
-
269
- return TestVolumes
142
+ def test_volume_allocation(test, device):
143
+ voxel_size = 0.125
144
+ background_value = 123.456
145
+ translation = wp.vec3(-12.3, 4.56, -789)
146
+
147
+ axis = np.linspace(-11, 11, 23)
148
+ points_ref = np.array([[x, y, z] for x in axis for y in axis for z in axis])
149
+ values_ref = np.array([x + 100 * y + 10000 * z for x in axis for y in axis for z in axis])
150
+ num_points = len(points_ref)
151
+ bb_max = np.array([11, 11, 11])
152
+ volume_a = wp.Volume.allocate(
153
+ -bb_max,
154
+ bb_max,
155
+ voxel_size=voxel_size,
156
+ bg_value=background_value,
157
+ translation=translation,
158
+ device=device,
159
+ )
160
+ volume_b = wp.Volume.allocate(
161
+ -bb_max * voxel_size + translation,
162
+ bb_max * voxel_size + translation,
163
+ voxel_size=voxel_size,
164
+ bg_value=background_value,
165
+ translation=translation,
166
+ points_in_world_space=True,
167
+ device=device,
168
+ )
169
+ points = wp.array(points_ref, dtype=wp.vec3, device=device)
170
+ values_a = wp.empty(num_points, dtype=wp.float32, device=device)
171
+ values_b = wp.empty(num_points, dtype=wp.float32, device=device)
172
+ wp.launch(test_volume_store_f, dim=num_points, inputs=[volume_a.id, points], device=device)
173
+ wp.launch(test_volume_store_f, dim=num_points, inputs=[volume_b.id, points], device=device)
174
+ wp.launch(test_volume_readback_f, dim=num_points, inputs=[volume_a.id, points, values_a], device=device)
175
+ wp.launch(test_volume_readback_f, dim=num_points, inputs=[volume_b.id, points, values_b], device=device)
176
+
177
+ np.testing.assert_equal(values_a.numpy(), values_ref)
178
+ np.testing.assert_equal(values_b.numpy(), values_ref)
179
+
180
+
181
+ def test_volume_allocate_by_tiles_f(test, device):
182
+ voxel_size = 0.125
183
+ background_value = 123.456
184
+ translation = wp.vec3(-12.3, 4.56, -789)
185
+
186
+ num_tiles = 1000
187
+ rng = np.random.default_rng(101215)
188
+ tiles = rng.integers(-512, 512, size=(num_tiles, 3), dtype=np.int32)
189
+ points_is = tiles * 8 # points in index space
190
+ points_ws = points_is * voxel_size + translation # points in world space
191
+
192
+ values_ref = np.empty(num_tiles * 512)
193
+ for t in range(num_tiles):
194
+ ti, tj, tk = points_is[t]
195
+ for i in range(8):
196
+ for j in range(8):
197
+ for k in range(8):
198
+ values_ref[t * 512 + i * 64 + j * 8 + k] = float(100 * (ti + i) + 10 * (tj + j) + (tk + k))
199
+
200
+ points_is_d = wp.array(points_is, dtype=wp.int32, device=device)
201
+ points_ws_d = wp.array(points_ws, dtype=wp.vec3, device=device)
202
+ volume_a = wp.Volume.allocate_by_tiles(points_is_d, voxel_size, background_value, translation, device=device)
203
+ volume_b = wp.Volume.allocate_by_tiles(points_ws_d, voxel_size, background_value, translation, device=device)
204
+ values_a = wp.empty(num_tiles * 512, dtype=wp.float32, device=device)
205
+ values_b = wp.empty(num_tiles * 512, dtype=wp.float32, device=device)
206
+
207
+ wp.launch(test_volume_tile_store_f, dim=num_tiles, inputs=[volume_a.id, points_is_d], device=device)
208
+ wp.launch(test_volume_tile_store_ws_f, dim=num_tiles, inputs=[volume_b.id, points_ws_d], device=device)
209
+ wp.launch(
210
+ test_volume_tile_readback_f,
211
+ dim=num_tiles,
212
+ inputs=[volume_a.id, points_is_d, values_a],
213
+ device=device,
214
+ )
215
+ wp.launch(
216
+ test_volume_tile_readback_f,
217
+ dim=num_tiles,
218
+ inputs=[volume_b.id, points_is_d, values_b],
219
+ device=device,
220
+ )
221
+
222
+ np.testing.assert_equal(values_a.numpy(), values_ref)
223
+ np.testing.assert_equal(values_b.numpy(), values_ref)
224
+
225
+
226
+ def test_volume_allocate_by_tiles_v(test, device):
227
+ num_tiles = 1000
228
+ rng = np.random.default_rng(101215)
229
+ tiles = rng.integers(-512, 512, size=(num_tiles, 3), dtype=np.int32)
230
+ points_is = tiles * 8
231
+
232
+ values_ref = np.empty((len(tiles) * 512, 3))
233
+ for t in range(len(tiles)):
234
+ ti, tj, tk = points_is[t]
235
+ for i in range(8):
236
+ for j in range(8):
237
+ for k in range(8):
238
+ values_ref[t * 512 + i * 64 + j * 8 + k] = [ti + i, tj + j, tk + k]
239
+
240
+ points_d = wp.array(points_is, dtype=wp.int32, device=device)
241
+ volume = wp.Volume.allocate_by_tiles(points_d, 0.1, wp.vec3(1, 2, 3), device=device)
242
+ values = wp.empty(len(points_d) * 512, dtype=wp.vec3, device=device)
243
+
244
+ wp.launch(test_volume_tile_store_v, dim=len(points_d), inputs=[volume.id, points_d], device=device)
245
+ wp.launch(test_volume_tile_readback_v, dim=len(points_d), inputs=[volume.id, points_d, values], device=device)
246
+
247
+ values_res = values.numpy()
248
+ np.testing.assert_equal(values_res, values_ref)
249
+
250
+
251
+ devices = get_unique_cuda_test_devices()
252
+
253
+
254
+ class TestVolumeWrite(unittest.TestCase):
255
+ pass
256
+
257
+
258
+ add_function_test(TestVolumeWrite, "test_volume_allocation", test_volume_allocation, devices=devices)
259
+ add_function_test(TestVolumeWrite, "test_volume_allocate_by_tiles_f", test_volume_allocate_by_tiles_f, devices=devices)
260
+ add_function_test(TestVolumeWrite, "test_volume_allocate_by_tiles_v", test_volume_allocate_by_tiles_v, devices=devices)
270
261
 
271
262
 
272
263
  if __name__ == "__main__":
273
- wp.force_load()
274
- c = register(unittest.TestCase)
264
+ wp.build.clear_kernel_cache()
275
265
  unittest.main(verbosity=2)
@@ -0,0 +1,35 @@
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 warp as wp
9
+ from warp.tests.unittest_utils import TeamCityTestRunner
10
+
11
+
12
+ def run_suite() -> bool:
13
+ """Run a test suite"""
14
+
15
+ import warp.tests.unittest_suites
16
+
17
+ # force rebuild of all kernels
18
+ wp.build.clear_kernel_cache()
19
+ print("Cleared Warp kernel cache")
20
+
21
+ runner = TeamCityTestRunner(verbosity=2, failfast=False)
22
+
23
+ # Can swap out warp.tests.unittest_suites.explicit_suite()
24
+ suite = warp.tests.unittest_suites.auto_discover_suite()
25
+ print(f"Test suite has {suite.countTestCases()} tests")
26
+
27
+ ret = not runner.run(suite, "WarpTests").wasSuccessful()
28
+ return ret
29
+
30
+
31
+ if __name__ == "__main__":
32
+ ret = run_suite()
33
+ import sys
34
+
35
+ sys.exit(ret)
@@ -0,0 +1,341 @@
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
+ """Warp Test Suites
9
+
10
+ This file is intended to define functions that return TestSuite objects, which
11
+ can be used in parallel or serial unit tests (with optional code coverage)
12
+ """
13
+
14
+ import os
15
+ import sys
16
+ import unittest
17
+
18
+ START_DIRECTORY = os.path.realpath(os.path.dirname(__file__))
19
+ TOP_LEVEL_DIRECTORY = os.path.realpath(os.path.join(START_DIRECTORY, "..", ".."))
20
+
21
+
22
+ def _create_suite_from_test_classes(test_loader, test_classes):
23
+ suite = unittest.TestSuite()
24
+
25
+ for test in test_classes:
26
+ sub_suite = unittest.TestSuite()
27
+ # Note that the test_loader might have testNamePatterns set
28
+ sub_suite.addTest(test_loader.loadTestsFromTestCase(test))
29
+ suite.addTest(sub_suite)
30
+
31
+ return suite
32
+
33
+
34
+ def auto_discover_suite(loader=unittest.defaultTestLoader, pattern="test*.py"):
35
+ """Uses unittest auto-discovery to build a test suite (test_*.py pattern)"""
36
+
37
+ return loader.discover(start_dir=START_DIRECTORY, pattern=pattern, top_level_dir=TOP_LEVEL_DIRECTORY)
38
+
39
+
40
+ def _iter_class_suites(test_suite):
41
+ """Iterate class-level test suites - test suites that contains test cases
42
+
43
+ From unittest_parallel.py
44
+ """
45
+ has_cases = any(isinstance(suite, unittest.TestCase) for suite in test_suite)
46
+ if has_cases:
47
+ yield test_suite
48
+ else:
49
+ for suite in test_suite:
50
+ yield from _iter_class_suites(suite)
51
+
52
+
53
+ def compare_unittest_suites(
54
+ test_loader: unittest.TestLoader, test_suite_name: str, reference_suite: unittest.TestSuite
55
+ ) -> None:
56
+ """Prints the tests in `test_suite` that are not in `reference_suite`."""
57
+
58
+ test_suite_fn = getattr(sys.modules[__name__], test_suite_name + "_suite")
59
+
60
+ test_suite = test_suite_fn(test_loader)
61
+
62
+ test_suite_classes_str = set(
63
+ type(test_suite._tests[0]).__name__
64
+ for test_suite in list(_iter_class_suites(test_suite))
65
+ if test_suite.countTestCases() > 0
66
+ )
67
+
68
+ reference_suite_classes_str = set(
69
+ type(test_suite._tests[0]).__name__
70
+ for test_suite in list(_iter_class_suites(reference_suite))
71
+ if test_suite.countTestCases() > 0
72
+ )
73
+
74
+ set_difference = reference_suite_classes_str - test_suite_classes_str
75
+
76
+ print(f"Selected test suite '{test_suite_name}'")
77
+ if len(set_difference) > 0:
78
+ print(f"Test suite '{test_suite_name}' omits the following test classes:")
79
+ for test_entry in set_difference:
80
+ print(f" {test_entry}")
81
+
82
+ return test_suite
83
+
84
+
85
+ def default_suite(test_loader: unittest.TestLoader):
86
+ """Example of a manually constructed test suite.
87
+
88
+ Intended to be modified to create additional test suites
89
+ """
90
+ from warp.tests.test_adam import TestAdam
91
+ from warp.tests.test_arithmetic import TestArithmetic
92
+ from warp.tests.test_array import TestArray
93
+ from warp.tests.test_array_reduce import TestArrayReduce
94
+ from warp.tests.test_atomic import TestAtomic
95
+ from warp.tests.test_bool import TestBool
96
+ from warp.tests.test_builtins_resolution import TestBuiltinsResolution
97
+ from warp.tests.test_bvh import TestBvh
98
+ from warp.tests.test_closest_point_edge_edge import TestClosestPointEdgeEdgeMethods
99
+ from warp.tests.test_codegen import TestCodeGen
100
+ from warp.tests.test_compile_consts import TestConstants
101
+ from warp.tests.test_conditional import TestConditional
102
+ from warp.tests.test_copy import TestCopy
103
+ from warp.tests.test_ctypes import TestCTypes
104
+ from warp.tests.test_dense import TestDense
105
+ from warp.tests.test_devices import TestDevices
106
+ from warp.tests.test_dlpack import TestDLPack
107
+ from warp.tests.test_examples import TestExamples, TestFemExamples, TestSimExamples
108
+ from warp.tests.test_fabricarray import TestFabricArray
109
+ from warp.tests.test_fast_math import TestFastMath
110
+ from warp.tests.test_fem import TestFem, TestFemShapeFunctions
111
+ from warp.tests.test_fp16 import TestFp16
112
+ from warp.tests.test_func import TestFunc
113
+ from warp.tests.test_generics import TestGenerics
114
+ from warp.tests.test_grad import TestGrad
115
+ from warp.tests.test_grad_customs import TestGradCustoms
116
+ from warp.tests.test_hash_grid import TestHashGrid
117
+ from warp.tests.test_import import TestImport
118
+ from warp.tests.test_indexedarray import TestIndexedArray
119
+ from warp.tests.test_intersect import TestIntersect
120
+ from warp.tests.test_large import TestLarge
121
+ from warp.tests.test_launch import TestLaunch
122
+ from warp.tests.test_lerp import TestLerp
123
+ from warp.tests.test_linear_solvers import TestLinearSolvers
124
+ from warp.tests.test_lvalue import TestLValue
125
+ from warp.tests.test_marching_cubes import TestMarchingCubes
126
+ from warp.tests.test_mat import TestMat
127
+ from warp.tests.test_mat_lite import TestMatLite
128
+ from warp.tests.test_mat_scalar_ops import TestMatScalarOps
129
+ from warp.tests.test_math import TestMath
130
+ from warp.tests.test_matmul import TestMatmul
131
+ from warp.tests.test_matmul_lite import TestMatmulLite
132
+ from warp.tests.test_mesh import TestMesh
133
+ from warp.tests.test_mesh_query_aabb import TestMeshQueryAABBMethods
134
+ from warp.tests.test_mesh_query_point import TestMeshQueryPoint
135
+ from warp.tests.test_mesh_query_ray import TestMeshQueryRay
136
+ from warp.tests.test_mlp import TestMLP
137
+ from warp.tests.test_model import TestModel
138
+ from warp.tests.test_modules_lite import TestModuleLite
139
+ from warp.tests.test_multigpu import TestMultiGPU
140
+ from warp.tests.test_noise import TestNoise
141
+ from warp.tests.test_operators import TestOperators
142
+ from warp.tests.test_options import TestOptions
143
+ from warp.tests.test_pinned import TestPinned
144
+ from warp.tests.test_print import TestPrint
145
+ from warp.tests.test_quat import TestQuat
146
+ from warp.tests.test_rand import TestRand
147
+ from warp.tests.test_reload import TestReload
148
+ from warp.tests.test_rounding import TestRounding
149
+ from warp.tests.test_runlength_encode import TestRunlengthEncode
150
+ from warp.tests.test_smoothstep import TestSmoothstep
151
+ from warp.tests.test_snippet import TestSnippets
152
+ from warp.tests.test_sparse import TestSparse
153
+ from warp.tests.test_spatial import TestSpatial
154
+ from warp.tests.test_streams import TestStreams
155
+ from warp.tests.test_struct import TestStruct
156
+ from warp.tests.test_tape import TestTape
157
+ from warp.tests.test_torch import TestTorch
158
+ from warp.tests.test_transient_module import TestTransientModule
159
+ from warp.tests.test_types import TestTypes
160
+ from warp.tests.test_utils import TestUtils
161
+ from warp.tests.test_vec import TestVec
162
+ from warp.tests.test_vec_lite import TestVecLite
163
+ from warp.tests.test_vec_scalar_ops import TestVecScalarOps
164
+ from warp.tests.test_volume import TestVolume
165
+ from warp.tests.test_volume_write import TestVolumeWrite
166
+
167
+ test_classes = [
168
+ TestAdam,
169
+ TestArithmetic,
170
+ TestArray,
171
+ TestArrayReduce,
172
+ TestAtomic,
173
+ TestBool,
174
+ TestBuiltinsResolution,
175
+ TestBvh,
176
+ TestClosestPointEdgeEdgeMethods,
177
+ TestCodeGen,
178
+ TestConstants,
179
+ TestConditional,
180
+ TestCopy,
181
+ TestCTypes,
182
+ TestDense,
183
+ TestDevices,
184
+ TestDLPack,
185
+ TestExamples,
186
+ TestFemExamples,
187
+ TestSimExamples,
188
+ TestFabricArray,
189
+ TestFastMath,
190
+ TestFem,
191
+ TestFemShapeFunctions,
192
+ TestFp16,
193
+ TestFunc,
194
+ TestGenerics,
195
+ TestGrad,
196
+ TestGradCustoms,
197
+ TestHashGrid,
198
+ TestImport,
199
+ TestIndexedArray,
200
+ TestIntersect,
201
+ TestLarge,
202
+ TestLaunch,
203
+ TestLerp,
204
+ TestLinearSolvers,
205
+ TestLValue,
206
+ TestMarchingCubes,
207
+ TestMat,
208
+ TestMatLite,
209
+ TestMatScalarOps,
210
+ TestMath,
211
+ TestMatmul,
212
+ TestMatmulLite,
213
+ TestMesh,
214
+ TestMeshQueryAABBMethods,
215
+ TestMeshQueryPoint,
216
+ TestMeshQueryRay,
217
+ TestMLP,
218
+ TestModel,
219
+ TestModuleLite,
220
+ TestMultiGPU,
221
+ TestNoise,
222
+ TestOperators,
223
+ TestOptions,
224
+ TestPinned,
225
+ TestPrint,
226
+ TestQuat,
227
+ TestRand,
228
+ TestReload,
229
+ TestRounding,
230
+ TestRunlengthEncode,
231
+ TestSmoothstep,
232
+ TestSparse,
233
+ TestSnippets,
234
+ TestSpatial,
235
+ TestStreams,
236
+ TestStruct,
237
+ TestTape,
238
+ TestTorch,
239
+ TestTransientModule,
240
+ TestTypes,
241
+ TestUtils,
242
+ TestVec,
243
+ TestVecLite,
244
+ TestVecScalarOps,
245
+ TestVolume,
246
+ TestVolumeWrite,
247
+ ]
248
+
249
+ return _create_suite_from_test_classes(test_loader, test_classes)
250
+
251
+
252
+ def kit_suite(test_loader: unittest.TestLoader):
253
+ """Tries to mimic the test suite used for testing omni.warp.core in Kit
254
+
255
+ Requires manual updates with test_ext.py for now.
256
+ """
257
+ from warp.tests.test_array import TestArray
258
+ from warp.tests.test_array_reduce import TestArrayReduce
259
+ from warp.tests.test_bvh import TestBvh
260
+ from warp.tests.test_codegen import TestCodeGen
261
+ from warp.tests.test_compile_consts import TestConstants
262
+ from warp.tests.test_conditional import TestConditional
263
+ from warp.tests.test_ctypes import TestCTypes
264
+ from warp.tests.test_devices import TestDevices
265
+ from warp.tests.test_dlpack import TestDLPack
266
+ from warp.tests.test_fabricarray import TestFabricArray
267
+ from warp.tests.test_func import TestFunc
268
+ from warp.tests.test_generics import TestGenerics
269
+ from warp.tests.test_grad_customs import TestGradCustoms
270
+ from warp.tests.test_hash_grid import TestHashGrid
271
+ from warp.tests.test_indexedarray import TestIndexedArray
272
+ from warp.tests.test_launch import TestLaunch
273
+ from warp.tests.test_marching_cubes import TestMarchingCubes
274
+ from warp.tests.test_mat_lite import TestMatLite
275
+ from warp.tests.test_math import TestMath
276
+ from warp.tests.test_matmul_lite import TestMatmulLite
277
+ from warp.tests.test_mesh import TestMesh
278
+ from warp.tests.test_mesh_query_aabb import TestMeshQueryAABBMethods
279
+ from warp.tests.test_mesh_query_point import TestMeshQueryPoint
280
+ from warp.tests.test_mesh_query_ray import TestMeshQueryRay
281
+ from warp.tests.test_modules_lite import TestModuleLite
282
+ from warp.tests.test_noise import TestNoise
283
+ from warp.tests.test_operators import TestOperators
284
+ from warp.tests.test_quat import TestQuat
285
+ from warp.tests.test_rand import TestRand
286
+ from warp.tests.test_rounding import TestRounding
287
+ from warp.tests.test_runlength_encode import TestRunlengthEncode
288
+ from warp.tests.test_sparse import TestSparse
289
+ from warp.tests.test_streams import TestStreams
290
+ from warp.tests.test_tape import TestTape
291
+ from warp.tests.test_transient_module import TestTransientModule
292
+ from warp.tests.test_types import TestTypes
293
+ from warp.tests.test_utils import TestUtils
294
+ from warp.tests.test_vec_lite import TestVecLite
295
+ from warp.tests.test_volume import TestVolume
296
+ from warp.tests.test_volume_write import TestVolumeWrite
297
+
298
+ test_classes = [
299
+ TestArray,
300
+ TestArrayReduce,
301
+ TestBvh,
302
+ TestCodeGen,
303
+ TestConstants,
304
+ TestConditional,
305
+ TestCTypes,
306
+ TestDevices,
307
+ TestDLPack,
308
+ TestFabricArray,
309
+ TestFunc,
310
+ TestGenerics,
311
+ TestGradCustoms,
312
+ TestHashGrid,
313
+ TestIndexedArray,
314
+ TestLaunch,
315
+ TestMarchingCubes,
316
+ TestMatLite,
317
+ TestMath,
318
+ TestMatmulLite,
319
+ TestMesh,
320
+ TestMeshQueryAABBMethods,
321
+ TestMeshQueryPoint,
322
+ TestMeshQueryRay,
323
+ TestModuleLite,
324
+ TestNoise,
325
+ TestOperators,
326
+ TestQuat,
327
+ TestRand,
328
+ TestRounding,
329
+ TestRunlengthEncode,
330
+ TestSparse,
331
+ TestStreams,
332
+ TestTape,
333
+ TestTransientModule,
334
+ TestTypes,
335
+ TestUtils,
336
+ TestVecLite,
337
+ TestVolume,
338
+ TestVolumeWrite,
339
+ ]
340
+
341
+ return _create_suite_from_test_classes(test_loader, test_classes)