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
warp/tests/test_bvh.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
- np.random.seed(42)
13
+ from warp.tests.unittest_utils import *
15
14
 
16
15
  wp.init()
17
16
 
@@ -71,9 +70,11 @@ def intersect_ray_aabb(start, dir, lower, upper):
71
70
 
72
71
 
73
72
  def test_bvh(test, type, device):
73
+ rng = np.random.default_rng(123)
74
+
74
75
  num_bounds = 100
75
- lowers = np.random.rand(num_bounds, 3) * 5.0
76
- uppers = lowers + np.random.rand(num_bounds, 3) * 5.0
76
+ lowers = rng.random(size=(num_bounds, 3)) * 5.0
77
+ uppers = lowers + rng.random(size=(num_bounds, 3)) * 5.0
77
78
 
78
79
  device_lowers = wp.array(lowers, dtype=wp.vec3, device=device)
79
80
  device_uppers = wp.array(uppers, dtype=wp.vec3, device=device)
@@ -114,10 +115,10 @@ def test_bvh(test, type, device):
114
115
  test.assertEqual(host_intersected, device_intersected[i])
115
116
 
116
117
  if test_case == 0:
117
- lowers = np.random.rand(num_bounds, 3) * 5.0
118
- uppers = lowers + np.random.rand(num_bounds, 3) * 5.0
119
- wp.copy(device_lowers, wp.array(lowers, dtype=wp.vec3))
120
- wp.copy(device_uppers, wp.array(uppers, dtype=wp.vec3))
118
+ lowers = rng.random(size=(num_bounds, 3)) * 5.0
119
+ uppers = lowers + rng.random(size=(num_bounds, 3)) * 5.0
120
+ wp.copy(device_lowers, wp.array(lowers, dtype=wp.vec3, device=device))
121
+ wp.copy(device_uppers, wp.array(uppers, dtype=wp.vec3, device=device))
121
122
  bvh.refit()
122
123
  bounds_intersected.zero_()
123
124
 
@@ -130,18 +131,41 @@ def test_bvh_query_ray(test, device):
130
131
  test_bvh(test, "ray", device)
131
132
 
132
133
 
133
- def register(parent):
134
- devices = get_test_devices()
134
+ def test_bvh_codegen_adjoints_with_select(test, device):
135
+ def kernel_fn(
136
+ bvh: wp.uint64,
137
+ ):
138
+ v = wp.vec3(0.0, 0.0, 0.0)
139
+ bounds_nr = int(0)
140
+
141
+ if True:
142
+ query_1 = wp.bvh_query_aabb(bvh, v, v)
143
+ query_2 = wp.bvh_query_ray(bvh, v, v)
144
+
145
+ wp.bvh_query_next(query_1, bounds_nr)
146
+ wp.bvh_query_next(query_2, bounds_nr)
147
+ else:
148
+ query_1 = wp.bvh_query_aabb(bvh, v, v)
149
+ query_2 = wp.bvh_query_ray(bvh, v, v)
150
+
151
+ wp.bvh_query_next(query_1, bounds_nr)
152
+ wp.bvh_query_next(query_2, bounds_nr)
153
+
154
+ wp.Kernel(func=kernel_fn)
155
+
156
+
157
+ devices = get_test_devices()
158
+
135
159
 
136
- class TestBvh(parent):
137
- pass
160
+ class TestBvh(unittest.TestCase):
161
+ pass
138
162
 
139
- add_function_test(TestBvh, "test_bvh_aabb", test_bvh_query_aabb, devices=devices)
140
- add_function_test(TestBvh, "test_bvh_ray", test_bvh_query_ray, devices=devices)
141
163
 
142
- return TestBvh
164
+ add_function_test(TestBvh, "test_bvh_aabb", test_bvh_query_aabb, devices=devices)
165
+ add_function_test(TestBvh, "test_bvh_ray", test_bvh_query_ray, devices=devices)
166
+ add_function_test(TestBvh, "test_bvh_codegen_adjoints_with_select", test_bvh_codegen_adjoints_with_select, devices=devices)
143
167
 
144
168
 
145
169
  if __name__ == "__main__":
146
- c = register(unittest.TestCase)
170
+ wp.build.clear_kernel_cache()
147
171
  unittest.main(verbosity=2)
@@ -5,12 +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
- import numpy as np
9
-
10
8
  import unittest
11
9
 
10
+ import numpy as np
11
+
12
12
  import warp as wp
13
- from warp.tests.test_base import *
13
+ from warp.tests.unittest_utils import *
14
14
 
15
15
  wp.init()
16
16
  epsilon = 0.00001
@@ -171,61 +171,58 @@ def test_edge_edge_perpendicular_s0_t1(test, device):
171
171
  test.assertAlmostEqual(st0[1], 1.0) # t value
172
172
 
173
173
 
174
- def register(parent):
175
- devices = get_test_devices()
176
-
177
- class TestClosestPointEdgeEdgeMethods(parent):
178
- pass
179
-
180
- add_function_test(
181
- TestClosestPointEdgeEdgeMethods,
182
- "test_edge_edge_middle_crossing",
183
- test_edge_edge_middle_crossing,
184
- devices=devices,
185
- )
186
- add_function_test(
187
- TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel_s1_t0", test_edge_edge_parallel_s1_t0, devices=devices
188
- )
189
- add_function_test(
190
- TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel_s0_t1", test_edge_edge_parallel_s0_t1, devices=devices
191
- )
192
- add_function_test(
193
- TestClosestPointEdgeEdgeMethods,
194
- "test_edge_edge_both_degenerate_case",
195
- test_edge_edge_both_degenerate_case,
196
- devices=devices,
197
- )
198
- add_function_test(
199
- TestClosestPointEdgeEdgeMethods,
200
- "test_edge_edge_degenerate_first_edge",
201
- test_edge_edge_degenerate_first_edge,
202
- devices=devices,
203
- )
204
- add_function_test(
205
- TestClosestPointEdgeEdgeMethods,
206
- "test_edge_edge_degenerate_second_edge",
207
- test_edge_edge_degenerate_second_edge,
208
- devices=devices,
209
- )
210
- add_function_test(
211
- TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel", test_edge_edge_parallel, devices=devices
212
- )
213
- add_function_test(
214
- TestClosestPointEdgeEdgeMethods,
215
- "test_edge_edge_perpendicular_s1_t0",
216
- test_edge_edge_perpendicular_s1_t0,
217
- devices=devices,
218
- )
219
- add_function_test(
220
- TestClosestPointEdgeEdgeMethods,
221
- "test_edge_edge_perpendicular_s0_t1",
222
- test_edge_edge_perpendicular_s0_t1,
223
- devices=devices,
224
- )
225
-
226
- return TestClosestPointEdgeEdgeMethods
174
+ devices = get_test_devices()
175
+
176
+
177
+ class TestClosestPointEdgeEdgeMethods(unittest.TestCase):
178
+ pass
179
+
180
+
181
+ add_function_test(
182
+ TestClosestPointEdgeEdgeMethods,
183
+ "test_edge_edge_middle_crossing",
184
+ test_edge_edge_middle_crossing,
185
+ devices=devices,
186
+ )
187
+ add_function_test(
188
+ TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel_s1_t0", test_edge_edge_parallel_s1_t0, devices=devices
189
+ )
190
+ add_function_test(
191
+ TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel_s0_t1", test_edge_edge_parallel_s0_t1, devices=devices
192
+ )
193
+ add_function_test(
194
+ TestClosestPointEdgeEdgeMethods,
195
+ "test_edge_edge_both_degenerate_case",
196
+ test_edge_edge_both_degenerate_case,
197
+ devices=devices,
198
+ )
199
+ add_function_test(
200
+ TestClosestPointEdgeEdgeMethods,
201
+ "test_edge_edge_degenerate_first_edge",
202
+ test_edge_edge_degenerate_first_edge,
203
+ devices=devices,
204
+ )
205
+ add_function_test(
206
+ TestClosestPointEdgeEdgeMethods,
207
+ "test_edge_edge_degenerate_second_edge",
208
+ test_edge_edge_degenerate_second_edge,
209
+ devices=devices,
210
+ )
211
+ add_function_test(TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel", test_edge_edge_parallel, devices=devices)
212
+ add_function_test(
213
+ TestClosestPointEdgeEdgeMethods,
214
+ "test_edge_edge_perpendicular_s1_t0",
215
+ test_edge_edge_perpendicular_s1_t0,
216
+ devices=devices,
217
+ )
218
+ add_function_test(
219
+ TestClosestPointEdgeEdgeMethods,
220
+ "test_edge_edge_perpendicular_s0_t1",
221
+ test_edge_edge_perpendicular_s0_t1,
222
+ devices=devices,
223
+ )
227
224
 
228
225
 
229
226
  if __name__ == "__main__":
230
- c = register(unittest.TestCase)
227
+ wp.build.clear_kernel_cache()
231
228
  unittest.main(verbosity=2)
@@ -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
 
@@ -317,9 +316,36 @@ def test_range_constant_dynamic_nested(m: int):
317
316
  wp.expect_eq(s, N * m * N)
318
317
 
319
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
+
320
346
  def test_unresolved_func(test, device):
321
347
  # kernel with unresolved function must be in a separate module, otherwise the current module would fail to load
322
- from warp.tests.test_unresolved_func import unresolved_func_kernel
348
+ from warp.tests.aux_test_unresolved_func import unresolved_func_kernel
323
349
 
324
350
  # ensure that an appropriate exception is raised when the bad module gets loaded
325
351
  with test.assertRaisesRegex(RuntimeError, "Could not find function wp.missing_func"):
@@ -327,13 +353,13 @@ def test_unresolved_func(test, device):
327
353
 
328
354
  # remove all references to the bad module so that subsequent calls to wp.force_load()
329
355
  # won't try to load it unless we explicitly re-import it again
330
- del wp.context.user_modules["warp.tests.test_unresolved_func"]
331
- 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"]
332
358
 
333
359
 
334
360
  def test_unresolved_symbol(test, device):
335
361
  # kernel with unresolved symbol must be in a separate module, otherwise the current module would fail to load
336
- from warp.tests.test_unresolved_symbol import unresolved_symbol_kernel
362
+ from warp.tests.aux_test_unresolved_symbol import unresolved_symbol_kernel
337
363
 
338
364
  # ensure that an appropriate exception is raised when the bad module gets loaded
339
365
  with test.assertRaisesRegex(KeyError, "Referencing undefined symbol: missing_symbol"):
@@ -341,135 +367,187 @@ def test_unresolved_symbol(test, device):
341
367
 
342
368
  # remove all references to the bad module so that subsequent calls to wp.force_load()
343
369
  # won't try to load it unless we explicitly re-import it again
344
- del wp.context.user_modules["warp.tests.test_unresolved_symbol"]
345
- del sys.modules["warp.tests.test_unresolved_symbol"]
346
-
347
-
348
- def register(parent):
349
- class TestCodeGen(parent):
350
- pass
370
+ del wp.context.user_modules["warp.tests.aux_test_unresolved_symbol"]
371
+ del sys.modules["warp.tests.aux_test_unresolved_symbol"]
351
372
 
352
- devices = get_test_devices()
353
373
 
354
- add_kernel_test(TestCodeGen, name="test_inplace", kernel=test_inplace, dim=1, devices=devices)
355
- add_kernel_test(TestCodeGen, name="test_rename", kernel=test_rename, dim=1, devices=devices)
356
- add_kernel_test(TestCodeGen, name="test_constant", kernel=test_constant, inputs=[1.0], dim=1, devices=devices)
357
- add_kernel_test(
358
- TestCodeGen, name="test_dynamic_for_rename", kernel=test_dynamic_for_rename, inputs=[10], dim=1, 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,
359
379
  )
360
- add_kernel_test(
361
- TestCodeGen,
362
- name="test_dynamic_for_inplace",
363
- kernel=test_dynamic_for_inplace,
364
- inputs=[10],
365
- dim=1,
366
- devices=devices,
367
- )
368
- add_kernel_test(TestCodeGen, name="test_reassign", kernel=test_reassign, dim=1, devices=devices)
369
- add_kernel_test(
370
- TestCodeGen, name="test_dynamic_reassign", kernel=test_dynamic_reassign, inputs=[2], dim=1, devices=devices
371
- )
372
-
373
- add_kernel_test(
374
- TestCodeGen,
375
- name="test_range_dynamic_forward",
376
- kernel=test_range_dynamic,
377
- dim=1,
378
- inputs=[0, 4, 1],
379
- expect=[0, 1, 2, 3],
380
- devices=devices,
381
- )
382
- add_kernel_test(
383
- TestCodeGen,
384
- name="test_range_dynamic_reverse",
385
- kernel=test_range_dynamic,
386
- dim=1,
387
- inputs=[4, 0, -1],
388
- expect=[4, 3, 2, 1],
389
- devices=devices,
390
- )
391
- add_kernel_test(
392
- TestCodeGen,
393
- name="test_range_dynamic_foward_step",
394
- kernel=test_range_dynamic,
395
- dim=1,
396
- inputs=[0, 8, 2],
397
- expect=[0, 2, 4, 6],
398
- devices=devices,
399
- )
400
- add_kernel_test(
401
- TestCodeGen,
402
- name="test_range_dynamic_reverse_step",
403
- kernel=test_range_dynamic,
404
- dim=1,
405
- inputs=[8, 0, -2],
406
- expect=[8, 6, 4, 2],
407
- devices=devices,
408
- )
409
-
410
- add_kernel_test(
411
- TestCodeGen,
412
- name="test_range_static_sum",
413
- kernel=test_range_static_sum,
414
- dim=1,
415
- expect=[10, 10, 10],
416
- devices=devices,
417
- )
418
- add_kernel_test(
419
- TestCodeGen,
420
- name="test_range_dynamic_sum",
421
- kernel=test_range_dynamic_sum,
422
- dim=1,
423
- inputs=[0, 10, 2],
424
- expect=[10, 10, 10, 10],
425
- devices=devices,
426
- )
427
- add_kernel_test(
428
- TestCodeGen,
429
- name="test_range_dynamic_sum_zero",
430
- kernel=test_range_dynamic_sum,
431
- dim=1,
432
- inputs=[0, 0, 1],
433
- expect=[0, 0, 0, 0],
434
- devices=devices,
435
- )
436
- add_kernel_test(TestCodeGen, name="test_range_constant", kernel=test_range_constant, dim=1, devices=devices)
437
- add_kernel_test(
438
- TestCodeGen,
439
- name="test_range_constant_dynamic_nested",
440
- kernel=test_range_constant_dynamic_nested,
441
- dim=1,
442
- inputs=[10],
443
- devices=devices,
444
- )
445
- add_kernel_test(
446
- TestCodeGen,
447
- name="test_range_dynamic_nested",
448
- kernel=test_range_dynamic_nested,
449
- dim=1,
450
- inputs=[4],
451
- devices=devices,
452
- )
453
-
454
- add_kernel_test(TestCodeGen, name="test_while_zero", kernel=test_while, dim=1, inputs=[0], devices=devices)
455
- add_kernel_test(TestCodeGen, name="test_while_positive", kernel=test_while, dim=1, inputs=[16], devices=devices)
456
- add_kernel_test(TestCodeGen, name="test_pass", kernel=test_pass, dim=1, inputs=[16], devices=devices)
457
-
458
- add_kernel_test(TestCodeGen, name="test_break", kernel=test_break, dim=1, inputs=[10], devices=devices)
459
- add_kernel_test(TestCodeGen, name="test_break_early", kernel=test_break_early, dim=1, inputs=[10], devices=devices)
460
- add_kernel_test(TestCodeGen, name="test_break_unroll", kernel=test_break_unroll, dim=1, devices=devices)
461
- add_kernel_test(
462
- TestCodeGen, name="test_break_multiple", kernel=test_break_multiple, dim=1, inputs=[10], devices=devices
463
- )
464
- add_kernel_test(TestCodeGen, name="test_continue", kernel=test_continue, dim=1, inputs=[10], devices=devices)
465
- add_kernel_test(TestCodeGen, name="test_continue_unroll", kernel=test_continue_unroll, dim=1, devices=devices)
466
-
467
- add_function_test(TestCodeGen, func=test_unresolved_func, name="test_unresolved_func", devices=devices)
468
- add_function_test(TestCodeGen, func=test_unresolved_symbol, name="test_unresolved_symbol", devices=devices)
469
380
 
470
- 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)
471
549
 
472
550
 
473
551
  if __name__ == "__main__":
474
- c = register(unittest.TestCase)
552
+ wp.build.clear_kernel_cache()
475
553
  unittest.main(verbosity=2, failfast=True)