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,12 +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
- # include parent path
9
8
  import sys
10
9
  import unittest
11
10
 
12
11
  import warp as wp
13
- from warp.tests.test_base import *
12
+ from warp.tests.unittest_utils import *
14
13
 
15
14
  # wp.config.mode = "debug"
16
15
 
@@ -212,6 +211,18 @@ def test_break_early(n: int):
212
211
  wp.expect_eq(a, 1)
213
212
 
214
213
 
214
+ @wp.kernel
215
+ def test_break_unroll():
216
+ a = int(0)
217
+
218
+ for i in range(0, 10):
219
+ if i > 5:
220
+ a = i
221
+ break
222
+
223
+ wp.expect_eq(a, 6)
224
+
225
+
215
226
  @wp.kernel
216
227
  def test_break_multiple(n: int):
217
228
  a = int(0)
@@ -245,6 +256,19 @@ def test_continue(n: int):
245
256
  wp.expect_eq(a, n - 1)
246
257
 
247
258
 
259
+ @wp.kernel
260
+ def test_continue_unroll():
261
+ a = int(0)
262
+
263
+ for i in range(0, 10):
264
+ if i == 5:
265
+ continue
266
+
267
+ a += 1
268
+
269
+ wp.expect_eq(a, 9)
270
+
271
+
248
272
  lower = wp.constant(-3)
249
273
  upper = wp.constant(3)
250
274
  step = wp.constant(2)
@@ -292,9 +316,36 @@ def test_range_constant_dynamic_nested(m: int):
292
316
  wp.expect_eq(s, N * m * N)
293
317
 
294
318
 
319
+ @wp.kernel
320
+ def test_range_expression():
321
+ idx = 1
322
+ batch_size = 100
323
+
324
+ a = wp.float(0.0)
325
+ c = wp.float(1.0)
326
+
327
+ # constant expression with a function
328
+ for i in range(4 * idx, wp.min(4 * idx + 4, batch_size)):
329
+ a += c
330
+
331
+ for i in range(4 * idx, min(4 * idx + 4, batch_size)):
332
+ a += c
333
+
334
+ tid = wp.tid()
335
+
336
+ # dynamic expression with a function
337
+ for i in range(4 * idx, wp.min(4 * idx, tid + 1000)):
338
+ a += c
339
+
340
+ for i in range(4 * idx, min(4 * idx, tid + 1000)):
341
+ a += c
342
+
343
+ wp.expect_eq(a, 8.0)
344
+
345
+
295
346
  def test_unresolved_func(test, device):
296
347
  # kernel with unresolved function must be in a separate module, otherwise the current module would fail to load
297
- from warp.tests.test_unresolved_func import unresolved_func_kernel
348
+ from warp.tests.aux_test_unresolved_func import unresolved_func_kernel
298
349
 
299
350
  # ensure that an appropriate exception is raised when the bad module gets loaded
300
351
  with test.assertRaisesRegex(RuntimeError, "Could not find function wp.missing_func"):
@@ -302,13 +353,13 @@ def test_unresolved_func(test, device):
302
353
 
303
354
  # remove all references to the bad module so that subsequent calls to wp.force_load()
304
355
  # won't try to load it unless we explicitly re-import it again
305
- del wp.context.user_modules["warp.tests.test_unresolved_func"]
306
- del sys.modules["warp.tests.test_unresolved_func"]
356
+ del wp.context.user_modules["warp.tests.aux_test_unresolved_func"]
357
+ del sys.modules["warp.tests.aux_test_unresolved_func"]
307
358
 
308
359
 
309
360
  def test_unresolved_symbol(test, device):
310
361
  # kernel with unresolved symbol must be in a separate module, otherwise the current module would fail to load
311
- from warp.tests.test_unresolved_symbol import unresolved_symbol_kernel
362
+ from warp.tests.aux_test_unresolved_symbol import unresolved_symbol_kernel
312
363
 
313
364
  # ensure that an appropriate exception is raised when the bad module gets loaded
314
365
  with test.assertRaisesRegex(KeyError, "Referencing undefined symbol: missing_symbol"):
@@ -316,133 +367,187 @@ def test_unresolved_symbol(test, device):
316
367
 
317
368
  # remove all references to the bad module so that subsequent calls to wp.force_load()
318
369
  # won't try to load it unless we explicitly re-import it again
319
- del wp.context.user_modules["warp.tests.test_unresolved_symbol"]
320
- del sys.modules["warp.tests.test_unresolved_symbol"]
321
-
322
-
323
- def register(parent):
324
- class TestCodeGen(parent):
325
- pass
326
-
327
- devices = get_test_devices()
328
-
329
- add_kernel_test(TestCodeGen, name="test_inplace", kernel=test_inplace, dim=1, devices=devices)
330
- add_kernel_test(TestCodeGen, name="test_rename", kernel=test_rename, dim=1, devices=devices)
331
- add_kernel_test(TestCodeGen, name="test_constant", kernel=test_constant, inputs=[1.0], dim=1, devices=devices)
332
- add_kernel_test(
333
- TestCodeGen, name="test_dynamic_for_rename", kernel=test_dynamic_for_rename, inputs=[10], dim=1, devices=devices
334
- )
335
- add_kernel_test(
336
- TestCodeGen,
337
- name="test_dynamic_for_inplace",
338
- kernel=test_dynamic_for_inplace,
339
- inputs=[10],
340
- dim=1,
341
- devices=devices,
342
- )
343
- add_kernel_test(TestCodeGen, name="test_reassign", kernel=test_reassign, dim=1, devices=devices)
344
- add_kernel_test(
345
- TestCodeGen, name="test_dynamic_reassign", kernel=test_dynamic_reassign, inputs=[2], dim=1, devices=devices
346
- )
370
+ del wp.context.user_modules["warp.tests.aux_test_unresolved_symbol"]
371
+ del sys.modules["warp.tests.aux_test_unresolved_symbol"]
347
372
 
348
- add_kernel_test(
349
- TestCodeGen,
350
- name="test_range_dynamic_forward",
351
- kernel=test_range_dynamic,
352
- dim=1,
353
- inputs=[0, 4, 1],
354
- expect=[0, 1, 2, 3],
355
- devices=devices,
356
- )
357
- add_kernel_test(
358
- TestCodeGen,
359
- name="test_range_dynamic_reverse",
360
- kernel=test_range_dynamic,
361
- dim=1,
362
- inputs=[4, 0, -1],
363
- expect=[4, 3, 2, 1],
364
- devices=devices,
365
- )
366
- add_kernel_test(
367
- TestCodeGen,
368
- name="test_range_dynamic_foward_step",
369
- kernel=test_range_dynamic,
370
- dim=1,
371
- inputs=[0, 8, 2],
372
- expect=[0, 2, 4, 6],
373
- devices=devices,
374
- )
375
- add_kernel_test(
376
- TestCodeGen,
377
- name="test_range_dynamic_reverse_step",
378
- kernel=test_range_dynamic,
379
- dim=1,
380
- inputs=[8, 0, -2],
381
- expect=[8, 6, 4, 2],
382
- devices=devices,
383
- )
384
-
385
- add_kernel_test(
386
- TestCodeGen,
387
- name="test_range_static_sum",
388
- kernel=test_range_static_sum,
389
- dim=1,
390
- expect=[10, 10, 10],
391
- devices=devices,
392
- )
393
- add_kernel_test(
394
- TestCodeGen,
395
- name="test_range_dynamic_sum",
396
- kernel=test_range_dynamic_sum,
397
- dim=1,
398
- inputs=[0, 10, 2],
399
- expect=[10, 10, 10, 10],
400
- devices=devices,
401
- )
402
- add_kernel_test(
403
- TestCodeGen,
404
- name="test_range_dynamic_sum_zero",
405
- kernel=test_range_dynamic_sum,
406
- dim=1,
407
- inputs=[0, 0, 1],
408
- expect=[0, 0, 0, 0],
409
- devices=devices,
410
- )
411
- add_kernel_test(TestCodeGen, name="test_range_constant", kernel=test_range_constant, dim=1, devices=devices)
412
- add_kernel_test(
413
- TestCodeGen,
414
- name="test_range_constant_dynamic_nested",
415
- kernel=test_range_constant_dynamic_nested,
416
- dim=1,
417
- inputs=[10],
418
- devices=devices,
419
- )
420
- add_kernel_test(
421
- TestCodeGen,
422
- name="test_range_dynamic_nested",
423
- kernel=test_range_dynamic_nested,
424
- dim=1,
425
- inputs=[4],
426
- devices=devices,
427
- )
428
-
429
- add_kernel_test(TestCodeGen, name="test_while_zero", kernel=test_while, dim=1, inputs=[0], devices=devices)
430
- add_kernel_test(TestCodeGen, name="test_while_positive", kernel=test_while, dim=1, inputs=[16], devices=devices)
431
- add_kernel_test(TestCodeGen, name="test_pass", kernel=test_pass, dim=1, inputs=[16], devices=devices)
432
373
 
433
- add_kernel_test(TestCodeGen, name="test_break", kernel=test_break, dim=1, inputs=[10], devices=devices)
434
- add_kernel_test(TestCodeGen, name="test_break_early", kernel=test_break_early, dim=1, inputs=[10], devices=devices)
435
- add_kernel_test(
436
- TestCodeGen, name="test_break_multiple", kernel=test_break_multiple, dim=1, inputs=[10], devices=devices
374
+ def test_error_global_var(test, device):
375
+ arr = wp.array(
376
+ (1.0, 2.0, 3.0),
377
+ dtype=float,
378
+ device=device,
437
379
  )
438
- add_kernel_test(TestCodeGen, name="test_continue", kernel=test_continue, dim=1, inputs=[10], devices=devices)
439
-
440
- add_function_test(TestCodeGen, func=test_unresolved_func, name="test_unresolved_func", devices=devices)
441
- add_function_test(TestCodeGen, func=test_unresolved_symbol, name="test_unresolved_symbol", devices=devices)
442
380
 
443
- return TestCodeGen
381
+ def kernel_1_fn(
382
+ out: wp.array(dtype=float),
383
+ ):
384
+ out[0] = arr[0]
385
+
386
+ def kernel_2_fn(
387
+ out: wp.array(dtype=float),
388
+ ):
389
+ out[0] = arr
390
+
391
+ def kernel_3_fn(
392
+ out: wp.array(dtype=float),
393
+ ):
394
+ out[0] = wp.lower_bound(arr, 2.0)
395
+
396
+ out = wp.empty_like(arr)
397
+
398
+ kernel = wp.Kernel(func=kernel_1_fn)
399
+ with test.assertRaisesRegex(
400
+ RuntimeError,
401
+ r"Cannot reference a global variable from a kernel unless `wp.constant\(\)` is being used",
402
+ ):
403
+ wp.launch(kernel, dim=out.shape, inputs=(), outputs=(out,))
404
+
405
+ kernel = wp.Kernel(func=kernel_2_fn)
406
+ with test.assertRaisesRegex(
407
+ RuntimeError,
408
+ r"Cannot reference a global variable from a kernel unless `wp.constant\(\)` is being used",
409
+ ):
410
+ wp.launch(kernel, dim=out.shape, inputs=(), outputs=(out,))
411
+
412
+ kernel = wp.Kernel(func=kernel_3_fn)
413
+ with test.assertRaisesRegex(
414
+ RuntimeError,
415
+ r"Cannot reference a global variable from a kernel unless `wp.constant\(\)` is being used",
416
+ ):
417
+ wp.launch(kernel, dim=out.shape, inputs=(), outputs=(out,))
418
+
419
+
420
+ class TestCodeGen(unittest.TestCase):
421
+ pass
422
+
423
+
424
+ devices = get_test_devices()
425
+
426
+ add_kernel_test(TestCodeGen, name="test_inplace", kernel=test_inplace, dim=1, devices=devices)
427
+ add_kernel_test(TestCodeGen, name="test_rename", kernel=test_rename, dim=1, devices=devices)
428
+ add_kernel_test(TestCodeGen, name="test_constant", kernel=test_constant, inputs=[1.0], dim=1, devices=devices)
429
+ add_kernel_test(
430
+ TestCodeGen, name="test_dynamic_for_rename", kernel=test_dynamic_for_rename, inputs=[10], dim=1, devices=devices
431
+ )
432
+ add_kernel_test(
433
+ TestCodeGen,
434
+ name="test_dynamic_for_inplace",
435
+ kernel=test_dynamic_for_inplace,
436
+ inputs=[10],
437
+ dim=1,
438
+ devices=devices,
439
+ )
440
+ add_kernel_test(TestCodeGen, name="test_reassign", kernel=test_reassign, dim=1, devices=devices)
441
+ add_kernel_test(
442
+ TestCodeGen, name="test_dynamic_reassign", kernel=test_dynamic_reassign, inputs=[2], dim=1, devices=devices
443
+ )
444
+
445
+ add_kernel_test(
446
+ TestCodeGen,
447
+ name="test_range_dynamic_forward",
448
+ kernel=test_range_dynamic,
449
+ dim=1,
450
+ inputs=[0, 4, 1],
451
+ expect=[0, 1, 2, 3],
452
+ devices=devices,
453
+ )
454
+ add_kernel_test(
455
+ TestCodeGen,
456
+ name="test_range_dynamic_reverse",
457
+ kernel=test_range_dynamic,
458
+ dim=1,
459
+ inputs=[4, 0, -1],
460
+ expect=[4, 3, 2, 1],
461
+ devices=devices,
462
+ )
463
+ add_kernel_test(
464
+ TestCodeGen,
465
+ name="test_range_dynamic_forward_step",
466
+ kernel=test_range_dynamic,
467
+ dim=1,
468
+ inputs=[0, 8, 2],
469
+ expect=[0, 2, 4, 6],
470
+ devices=devices,
471
+ )
472
+ add_kernel_test(
473
+ TestCodeGen,
474
+ name="test_range_dynamic_reverse_step",
475
+ kernel=test_range_dynamic,
476
+ dim=1,
477
+ inputs=[8, 0, -2],
478
+ expect=[8, 6, 4, 2],
479
+ devices=devices,
480
+ )
481
+
482
+ add_kernel_test(
483
+ TestCodeGen,
484
+ name="test_range_static_sum",
485
+ kernel=test_range_static_sum,
486
+ dim=1,
487
+ expect=[10, 10, 10],
488
+ devices=devices,
489
+ )
490
+ add_kernel_test(
491
+ TestCodeGen,
492
+ name="test_range_dynamic_sum",
493
+ kernel=test_range_dynamic_sum,
494
+ dim=1,
495
+ inputs=[0, 10, 2],
496
+ expect=[10, 10, 10, 10],
497
+ devices=devices,
498
+ )
499
+ add_kernel_test(
500
+ TestCodeGen,
501
+ name="test_range_dynamic_sum_zero",
502
+ kernel=test_range_dynamic_sum,
503
+ dim=1,
504
+ inputs=[0, 0, 1],
505
+ expect=[0, 0, 0, 0],
506
+ devices=devices,
507
+ )
508
+ add_kernel_test(TestCodeGen, name="test_range_constant", kernel=test_range_constant, dim=1, devices=devices)
509
+ add_kernel_test(
510
+ TestCodeGen,
511
+ name="test_range_constant_dynamic_nested",
512
+ kernel=test_range_constant_dynamic_nested,
513
+ dim=1,
514
+ inputs=[10],
515
+ devices=devices,
516
+ )
517
+ add_kernel_test(
518
+ TestCodeGen,
519
+ name="test_range_dynamic_nested",
520
+ kernel=test_range_dynamic_nested,
521
+ dim=1,
522
+ inputs=[4],
523
+ devices=devices,
524
+ )
525
+ add_kernel_test(
526
+ TestCodeGen,
527
+ name="test_range_expression",
528
+ kernel=test_range_expression,
529
+ dim=1,
530
+ devices=devices,
531
+ )
532
+
533
+ add_kernel_test(TestCodeGen, name="test_while_zero", kernel=test_while, dim=1, inputs=[0], devices=devices)
534
+ add_kernel_test(TestCodeGen, name="test_while_positive", kernel=test_while, dim=1, inputs=[16], devices=devices)
535
+ add_kernel_test(TestCodeGen, name="test_pass", kernel=test_pass, dim=1, inputs=[16], devices=devices)
536
+
537
+ add_kernel_test(TestCodeGen, name="test_break", kernel=test_break, dim=1, inputs=[10], devices=devices)
538
+ add_kernel_test(TestCodeGen, name="test_break_early", kernel=test_break_early, dim=1, inputs=[10], devices=devices)
539
+ add_kernel_test(TestCodeGen, name="test_break_unroll", kernel=test_break_unroll, dim=1, devices=devices)
540
+ add_kernel_test(
541
+ TestCodeGen, name="test_break_multiple", kernel=test_break_multiple, dim=1, inputs=[10], devices=devices
542
+ )
543
+ add_kernel_test(TestCodeGen, name="test_continue", kernel=test_continue, dim=1, inputs=[10], devices=devices)
544
+ add_kernel_test(TestCodeGen, name="test_continue_unroll", kernel=test_continue_unroll, dim=1, devices=devices)
545
+
546
+ add_function_test(TestCodeGen, func=test_unresolved_func, name="test_unresolved_func", devices=devices)
547
+ add_function_test(TestCodeGen, func=test_unresolved_symbol, name="test_unresolved_symbol", devices=devices)
548
+ add_function_test(TestCodeGen, func=test_error_global_var, name="test_error_global_var", devices=devices)
444
549
 
445
550
 
446
551
  if __name__ == "__main__":
447
- c = register(unittest.TestCase)
552
+ wp.build.clear_kernel_cache()
448
553
  unittest.main(verbosity=2, failfast=True)
@@ -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)