warp-lang 1.0.0b5__py3-none-manylinux2014_x86_64.whl → 1.0.0b6__py3-none-manylinux2014_x86_64.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.
Files changed (187) hide show
  1. docs/conf.py +3 -4
  2. examples/env/env_ant.py +1 -1
  3. examples/env/env_cartpole.py +1 -1
  4. examples/env/env_humanoid.py +1 -1
  5. examples/example_dem.py +28 -26
  6. examples/example_diffray.py +37 -30
  7. examples/example_fluid.py +7 -3
  8. examples/example_jacobian_ik.py +1 -1
  9. examples/example_mesh_intersect.py +10 -7
  10. examples/example_nvdb.py +3 -3
  11. examples/example_render_opengl.py +19 -10
  12. examples/example_sim_cartpole.py +9 -5
  13. examples/example_sim_cloth.py +29 -25
  14. examples/example_sim_fk_grad.py +2 -2
  15. examples/example_sim_fk_grad_torch.py +3 -3
  16. examples/example_sim_grad_bounce.py +11 -8
  17. examples/example_sim_grad_cloth.py +12 -9
  18. examples/example_sim_granular.py +2 -2
  19. examples/example_sim_granular_collision_sdf.py +13 -13
  20. examples/example_sim_neo_hookean.py +3 -3
  21. examples/example_sim_particle_chain.py +2 -2
  22. examples/example_sim_quadruped.py +8 -5
  23. examples/example_sim_rigid_chain.py +8 -5
  24. examples/example_sim_rigid_contact.py +13 -10
  25. examples/example_sim_rigid_fem.py +2 -2
  26. examples/example_sim_rigid_gyroscopic.py +2 -2
  27. examples/example_sim_rigid_kinematics.py +1 -1
  28. examples/example_sim_trajopt.py +3 -2
  29. examples/fem/example_apic_fluid.py +5 -7
  30. examples/fem/example_diffusion_mgpu.py +18 -16
  31. warp/__init__.py +3 -2
  32. warp/bin/warp.so +0 -0
  33. warp/build_dll.py +29 -9
  34. warp/builtins.py +206 -7
  35. warp/codegen.py +58 -38
  36. warp/config.py +3 -1
  37. warp/context.py +234 -128
  38. warp/fem/__init__.py +2 -2
  39. warp/fem/cache.py +2 -1
  40. warp/fem/field/nodal_field.py +18 -17
  41. warp/fem/geometry/hexmesh.py +11 -6
  42. warp/fem/geometry/quadmesh_2d.py +16 -12
  43. warp/fem/geometry/tetmesh.py +19 -8
  44. warp/fem/geometry/trimesh_2d.py +18 -7
  45. warp/fem/integrate.py +341 -196
  46. warp/fem/quadrature/__init__.py +1 -1
  47. warp/fem/quadrature/pic_quadrature.py +138 -53
  48. warp/fem/quadrature/quadrature.py +81 -9
  49. warp/fem/space/__init__.py +1 -1
  50. warp/fem/space/basis_space.py +169 -51
  51. warp/fem/space/grid_2d_function_space.py +2 -2
  52. warp/fem/space/grid_3d_function_space.py +2 -2
  53. warp/fem/space/hexmesh_function_space.py +2 -2
  54. warp/fem/space/partition.py +9 -6
  55. warp/fem/space/quadmesh_2d_function_space.py +2 -2
  56. warp/fem/space/shape/cube_shape_function.py +27 -15
  57. warp/fem/space/shape/square_shape_function.py +29 -18
  58. warp/fem/space/tetmesh_function_space.py +2 -2
  59. warp/fem/space/topology.py +10 -0
  60. warp/fem/space/trimesh_2d_function_space.py +2 -2
  61. warp/fem/utils.py +10 -5
  62. warp/native/array.h +49 -8
  63. warp/native/builtin.h +31 -14
  64. warp/native/cuda_util.cpp +8 -3
  65. warp/native/cuda_util.h +1 -0
  66. warp/native/exports.h +1177 -1108
  67. warp/native/intersect.h +4 -4
  68. warp/native/intersect_adj.h +8 -8
  69. warp/native/mat.h +65 -6
  70. warp/native/mesh.h +126 -5
  71. warp/native/quat.h +28 -4
  72. warp/native/vec.h +76 -14
  73. warp/native/warp.cu +1 -6
  74. warp/render/render_opengl.py +261 -109
  75. warp/sim/import_mjcf.py +13 -7
  76. warp/sim/import_urdf.py +14 -14
  77. warp/sim/inertia.py +17 -18
  78. warp/sim/model.py +67 -67
  79. warp/sim/render.py +1 -1
  80. warp/sparse.py +6 -6
  81. warp/stubs.py +19 -81
  82. warp/tape.py +1 -1
  83. warp/tests/__main__.py +3 -6
  84. warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
  85. warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
  86. warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
  87. warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
  88. warp/tests/aux_test_unresolved_func.py +14 -0
  89. warp/tests/aux_test_unresolved_symbol.py +14 -0
  90. warp/tests/{test_kinematics.py → disabled_kinematics.py} +10 -12
  91. warp/tests/run_coverage_serial.py +31 -0
  92. warp/tests/test_adam.py +102 -106
  93. warp/tests/test_arithmetic.py +39 -40
  94. warp/tests/test_array.py +46 -48
  95. warp/tests/test_array_reduce.py +25 -19
  96. warp/tests/test_atomic.py +62 -26
  97. warp/tests/test_bool.py +16 -11
  98. warp/tests/test_builtins_resolution.py +1292 -0
  99. warp/tests/test_bvh.py +9 -12
  100. warp/tests/test_closest_point_edge_edge.py +53 -57
  101. warp/tests/test_codegen.py +164 -134
  102. warp/tests/test_compile_consts.py +13 -19
  103. warp/tests/test_conditional.py +30 -32
  104. warp/tests/test_copy.py +9 -12
  105. warp/tests/test_ctypes.py +90 -98
  106. warp/tests/test_dense.py +20 -14
  107. warp/tests/test_devices.py +34 -35
  108. warp/tests/test_dlpack.py +74 -75
  109. warp/tests/test_examples.py +215 -97
  110. warp/tests/test_fabricarray.py +15 -21
  111. warp/tests/test_fast_math.py +14 -11
  112. warp/tests/test_fem.py +280 -97
  113. warp/tests/test_fp16.py +19 -15
  114. warp/tests/test_func.py +177 -194
  115. warp/tests/test_generics.py +71 -77
  116. warp/tests/test_grad.py +83 -32
  117. warp/tests/test_grad_customs.py +7 -9
  118. warp/tests/test_hash_grid.py +6 -10
  119. warp/tests/test_import.py +9 -23
  120. warp/tests/test_indexedarray.py +19 -21
  121. warp/tests/test_intersect.py +15 -9
  122. warp/tests/test_large.py +17 -19
  123. warp/tests/test_launch.py +14 -17
  124. warp/tests/test_lerp.py +63 -63
  125. warp/tests/test_lvalue.py +84 -35
  126. warp/tests/test_marching_cubes.py +9 -13
  127. warp/tests/test_mat.py +388 -3004
  128. warp/tests/test_mat_lite.py +9 -12
  129. warp/tests/test_mat_scalar_ops.py +2889 -0
  130. warp/tests/test_math.py +10 -11
  131. warp/tests/test_matmul.py +104 -100
  132. warp/tests/test_matmul_lite.py +72 -98
  133. warp/tests/test_mesh.py +35 -32
  134. warp/tests/test_mesh_query_aabb.py +18 -25
  135. warp/tests/test_mesh_query_point.py +39 -23
  136. warp/tests/test_mesh_query_ray.py +9 -21
  137. warp/tests/test_mlp.py +8 -9
  138. warp/tests/test_model.py +89 -93
  139. warp/tests/test_modules_lite.py +15 -25
  140. warp/tests/test_multigpu.py +87 -114
  141. warp/tests/test_noise.py +10 -12
  142. warp/tests/test_operators.py +14 -21
  143. warp/tests/test_options.py +10 -11
  144. warp/tests/test_pinned.py +16 -18
  145. warp/tests/test_print.py +16 -20
  146. warp/tests/test_quat.py +121 -88
  147. warp/tests/test_rand.py +12 -13
  148. warp/tests/test_reload.py +27 -32
  149. warp/tests/test_rounding.py +7 -10
  150. warp/tests/test_runlength_encode.py +105 -106
  151. warp/tests/test_smoothstep.py +8 -9
  152. warp/tests/test_snippet.py +13 -22
  153. warp/tests/test_sparse.py +30 -29
  154. warp/tests/test_spatial.py +179 -174
  155. warp/tests/test_streams.py +100 -107
  156. warp/tests/test_struct.py +98 -67
  157. warp/tests/test_tape.py +11 -17
  158. warp/tests/test_torch.py +89 -86
  159. warp/tests/test_transient_module.py +9 -12
  160. warp/tests/test_types.py +328 -50
  161. warp/tests/test_utils.py +217 -218
  162. warp/tests/test_vec.py +133 -2133
  163. warp/tests/test_vec_lite.py +8 -11
  164. warp/tests/test_vec_scalar_ops.py +2099 -0
  165. warp/tests/test_volume.py +391 -382
  166. warp/tests/test_volume_write.py +122 -135
  167. warp/tests/unittest_serial.py +35 -0
  168. warp/tests/unittest_suites.py +291 -0
  169. warp/tests/{test_base.py → unittest_utils.py} +138 -25
  170. warp/tests/{test_misc.py → unused_test_misc.py} +13 -5
  171. warp/tests/{test_debug.py → walkthough_debug.py} +2 -15
  172. warp/thirdparty/unittest_parallel.py +257 -54
  173. warp/types.py +119 -98
  174. warp/utils.py +14 -0
  175. {warp_lang-1.0.0b5.dist-info → warp_lang-1.0.0b6.dist-info}/METADATA +2 -1
  176. {warp_lang-1.0.0b5.dist-info → warp_lang-1.0.0b6.dist-info}/RECORD +182 -178
  177. {warp_lang-1.0.0b5.dist-info → warp_lang-1.0.0b6.dist-info}/WHEEL +1 -1
  178. warp/tests/test_all.py +0 -239
  179. warp/tests/test_conditional_unequal_types_kernels.py +0 -14
  180. warp/tests/test_coverage.py +0 -38
  181. warp/tests/test_unresolved_func.py +0 -7
  182. warp/tests/test_unresolved_symbol.py +0 -7
  183. /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
  184. /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
  185. /warp/tests/{test_square.py → aux_test_square.py} +0 -0
  186. {warp_lang-1.0.0b5.dist-info → warp_lang-1.0.0b6.dist-info}/LICENSE.md +0 -0
  187. {warp_lang-1.0.0b5.dist-info → warp_lang-1.0.0b6.dist-info}/top_level.txt +0 -0
warp/tests/test_bvh.py CHANGED
@@ -10,8 +10,7 @@ import unittest
10
10
  import numpy as np
11
11
 
12
12
  import warp as wp
13
- from warp.tests.test_base import *
14
-
13
+ from warp.tests.unittest_utils import *
15
14
 
16
15
  wp.init()
17
16
 
@@ -118,8 +117,8 @@ def test_bvh(test, type, device):
118
117
  if test_case == 0:
119
118
  lowers = rng.random(size=(num_bounds, 3)) * 5.0
120
119
  uppers = lowers + rng.random(size=(num_bounds, 3)) * 5.0
121
- wp.copy(device_lowers, wp.array(lowers, dtype=wp.vec3))
122
- wp.copy(device_uppers, wp.array(uppers, dtype=wp.vec3))
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))
123
122
  bvh.refit()
124
123
  bounds_intersected.zero_()
125
124
 
@@ -132,19 +131,17 @@ def test_bvh_query_ray(test, device):
132
131
  test_bvh(test, "ray", device)
133
132
 
134
133
 
135
- def register(parent):
136
- devices = get_test_devices()
134
+ devices = get_test_devices()
135
+
137
136
 
138
- class TestBvh(parent):
139
- pass
137
+ class TestBvh(unittest.TestCase):
138
+ pass
140
139
 
141
- add_function_test(TestBvh, "test_bvh_aabb", test_bvh_query_aabb, devices=devices)
142
- add_function_test(TestBvh, "test_bvh_ray", test_bvh_query_ray, devices=devices)
143
140
 
144
- return TestBvh
141
+ add_function_test(TestBvh, "test_bvh_aabb", test_bvh_query_aabb, devices=devices)
142
+ add_function_test(TestBvh, "test_bvh_ray", test_bvh_query_ray, devices=devices)
145
143
 
146
144
 
147
145
  if __name__ == "__main__":
148
146
  wp.build.clear_kernel_cache()
149
- _ = register(unittest.TestCase)
150
147
  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,62 +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
227
  wp.build.clear_kernel_cache()
231
- _ = register(unittest.TestCase)
232
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,136 +367,140 @@ 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
351
-
352
- devices = get_test_devices()
353
-
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
359
- )
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
-
470
- return TestCodeGen
370
+ del wp.context.user_modules["warp.tests.aux_test_unresolved_symbol"]
371
+ del sys.modules["warp.tests.aux_test_unresolved_symbol"]
372
+
373
+
374
+ class TestCodeGen(unittest.TestCase):
375
+ pass
376
+
377
+
378
+ devices = get_test_devices()
379
+
380
+ add_kernel_test(TestCodeGen, name="test_inplace", kernel=test_inplace, dim=1, devices=devices)
381
+ add_kernel_test(TestCodeGen, name="test_rename", kernel=test_rename, dim=1, devices=devices)
382
+ add_kernel_test(TestCodeGen, name="test_constant", kernel=test_constant, inputs=[1.0], dim=1, devices=devices)
383
+ add_kernel_test(
384
+ TestCodeGen, name="test_dynamic_for_rename", kernel=test_dynamic_for_rename, inputs=[10], dim=1, devices=devices
385
+ )
386
+ add_kernel_test(
387
+ TestCodeGen,
388
+ name="test_dynamic_for_inplace",
389
+ kernel=test_dynamic_for_inplace,
390
+ inputs=[10],
391
+ dim=1,
392
+ devices=devices,
393
+ )
394
+ add_kernel_test(TestCodeGen, name="test_reassign", kernel=test_reassign, dim=1, devices=devices)
395
+ add_kernel_test(
396
+ TestCodeGen, name="test_dynamic_reassign", kernel=test_dynamic_reassign, inputs=[2], dim=1, devices=devices
397
+ )
398
+
399
+ add_kernel_test(
400
+ TestCodeGen,
401
+ name="test_range_dynamic_forward",
402
+ kernel=test_range_dynamic,
403
+ dim=1,
404
+ inputs=[0, 4, 1],
405
+ expect=[0, 1, 2, 3],
406
+ devices=devices,
407
+ )
408
+ add_kernel_test(
409
+ TestCodeGen,
410
+ name="test_range_dynamic_reverse",
411
+ kernel=test_range_dynamic,
412
+ dim=1,
413
+ inputs=[4, 0, -1],
414
+ expect=[4, 3, 2, 1],
415
+ devices=devices,
416
+ )
417
+ add_kernel_test(
418
+ TestCodeGen,
419
+ name="test_range_dynamic_forward_step",
420
+ kernel=test_range_dynamic,
421
+ dim=1,
422
+ inputs=[0, 8, 2],
423
+ expect=[0, 2, 4, 6],
424
+ devices=devices,
425
+ )
426
+ add_kernel_test(
427
+ TestCodeGen,
428
+ name="test_range_dynamic_reverse_step",
429
+ kernel=test_range_dynamic,
430
+ dim=1,
431
+ inputs=[8, 0, -2],
432
+ expect=[8, 6, 4, 2],
433
+ devices=devices,
434
+ )
435
+
436
+ add_kernel_test(
437
+ TestCodeGen,
438
+ name="test_range_static_sum",
439
+ kernel=test_range_static_sum,
440
+ dim=1,
441
+ expect=[10, 10, 10],
442
+ devices=devices,
443
+ )
444
+ add_kernel_test(
445
+ TestCodeGen,
446
+ name="test_range_dynamic_sum",
447
+ kernel=test_range_dynamic_sum,
448
+ dim=1,
449
+ inputs=[0, 10, 2],
450
+ expect=[10, 10, 10, 10],
451
+ devices=devices,
452
+ )
453
+ add_kernel_test(
454
+ TestCodeGen,
455
+ name="test_range_dynamic_sum_zero",
456
+ kernel=test_range_dynamic_sum,
457
+ dim=1,
458
+ inputs=[0, 0, 1],
459
+ expect=[0, 0, 0, 0],
460
+ devices=devices,
461
+ )
462
+ add_kernel_test(TestCodeGen, name="test_range_constant", kernel=test_range_constant, dim=1, devices=devices)
463
+ add_kernel_test(
464
+ TestCodeGen,
465
+ name="test_range_constant_dynamic_nested",
466
+ kernel=test_range_constant_dynamic_nested,
467
+ dim=1,
468
+ inputs=[10],
469
+ devices=devices,
470
+ )
471
+ add_kernel_test(
472
+ TestCodeGen,
473
+ name="test_range_dynamic_nested",
474
+ kernel=test_range_dynamic_nested,
475
+ dim=1,
476
+ inputs=[4],
477
+ devices=devices,
478
+ )
479
+ add_kernel_test(
480
+ TestCodeGen,
481
+ name="test_range_expression",
482
+ kernel=test_range_expression,
483
+ dim=1,
484
+ devices=devices,
485
+ )
486
+
487
+ add_kernel_test(TestCodeGen, name="test_while_zero", kernel=test_while, dim=1, inputs=[0], devices=devices)
488
+ add_kernel_test(TestCodeGen, name="test_while_positive", kernel=test_while, dim=1, inputs=[16], devices=devices)
489
+ add_kernel_test(TestCodeGen, name="test_pass", kernel=test_pass, dim=1, inputs=[16], devices=devices)
490
+
491
+ add_kernel_test(TestCodeGen, name="test_break", kernel=test_break, dim=1, inputs=[10], devices=devices)
492
+ add_kernel_test(TestCodeGen, name="test_break_early", kernel=test_break_early, dim=1, inputs=[10], devices=devices)
493
+ add_kernel_test(TestCodeGen, name="test_break_unroll", kernel=test_break_unroll, dim=1, devices=devices)
494
+ add_kernel_test(
495
+ TestCodeGen, name="test_break_multiple", kernel=test_break_multiple, dim=1, inputs=[10], devices=devices
496
+ )
497
+ add_kernel_test(TestCodeGen, name="test_continue", kernel=test_continue, dim=1, inputs=[10], devices=devices)
498
+ add_kernel_test(TestCodeGen, name="test_continue_unroll", kernel=test_continue_unroll, dim=1, devices=devices)
499
+
500
+ add_function_test(TestCodeGen, func=test_unresolved_func, name="test_unresolved_func", devices=devices)
501
+ add_function_test(TestCodeGen, func=test_unresolved_symbol, name="test_unresolved_symbol", devices=devices)
471
502
 
472
503
 
473
504
  if __name__ == "__main__":
474
505
  wp.build.clear_kernel_cache()
475
- _ = register(unittest.TestCase)
476
506
  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
 
@@ -40,7 +37,7 @@ def test_constants_bool():
40
37
  @wp.kernel
41
38
  def test_constants_int(a: int):
42
39
  if Foobar.ONE > 0:
43
- 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
44
41
  else:
45
42
  a = 456 + LOCAL_ONE
46
43
  expect_eq(a, 124)
@@ -82,26 +79,23 @@ def test_constant_closure_capture(test, device):
82
79
  wp.launch(two_closure, dim=(1), inputs=[2], device=device)
83
80
 
84
81
 
85
- def register(parent):
86
- class TestConstants(parent):
87
- pass
82
+ class TestConstants(unittest.TestCase):
83
+ pass
88
84
 
89
- a = 0
90
- x = 0.0
91
85
 
92
- devices = get_test_devices()
86
+ a = 0
87
+ x = 0.0
93
88
 
94
- add_kernel_test(TestConstants, test_constants_bool, dim=1, inputs=[], devices=devices)
95
- add_kernel_test(TestConstants, test_constants_int, dim=1, inputs=[a], devices=devices)
96
- add_kernel_test(TestConstants, test_constants_float, dim=1, inputs=[x], devices=devices)
89
+ devices = get_test_devices()
97
90
 
98
- add_function_test(TestConstants, "test_constant_math", test_constant_math, devices=devices)
99
- 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)
100
94
 
101
- 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)
102
97
 
103
98
 
104
99
  if __name__ == "__main__":
105
100
  wp.build.clear_kernel_cache()
106
- _ = register(unittest.TestCase)
107
101
  unittest.main(verbosity=2)
@@ -8,7 +8,7 @@
8
8
  import unittest
9
9
 
10
10
  import warp as wp
11
- from warp.tests.test_base import *
11
+ from warp.tests.unittest_utils import *
12
12
 
13
13
  wp.init()
14
14
 
@@ -203,46 +203,44 @@ def test_conditional_chain_mixed():
203
203
 
204
204
  def test_conditional_unequal_types(test: unittest.TestCase, device):
205
205
  # The bad kernel must be in a separate module, otherwise the current module would fail to load
206
- from warp.tests.test_conditional_unequal_types_kernels import unequal_types_kernel
206
+ from warp.tests.aux_test_conditional_unequal_types_kernels import (
207
+ unequal_types_kernel,
208
+ )
207
209
 
208
210
  with test.assertRaises(TypeError):
209
211
  wp.launch(unequal_types_kernel, dim=(1,), inputs=[], device=device)
210
212
 
211
213
  # remove all references to the bad module so that subsequent calls to wp.force_load()
212
214
  # won't try to load it unless we explicitly re-import it again
213
- del wp.context.user_modules["warp.tests.test_conditional_unequal_types_kernels"]
214
- del sys.modules["warp.tests.test_conditional_unequal_types_kernels"]
215
-
216
-
217
- def register(parent):
218
- devices = get_test_devices()
219
-
220
- class TestConditional(parent):
221
- pass
222
-
223
- add_kernel_test(TestConditional, kernel=test_conditional_if_else, dim=1, devices=devices)
224
- add_kernel_test(TestConditional, kernel=test_conditional_if_else_nested, dim=1, devices=devices)
225
- add_kernel_test(TestConditional, kernel=test_boolean_and, dim=1, devices=devices)
226
- add_kernel_test(TestConditional, kernel=test_boolean_or, dim=1, devices=devices)
227
- add_kernel_test(TestConditional, kernel=test_boolean_compound, dim=1, devices=devices)
228
- add_kernel_test(TestConditional, kernel=test_boolean_literal, dim=1, devices=devices)
229
- add_kernel_test(TestConditional, kernel=test_int_logical_not, dim=1, devices=devices)
230
- add_kernel_test(TestConditional, kernel=test_int_conditional_assign_overload, dim=1, devices=devices)
231
- add_kernel_test(TestConditional, kernel=test_bool_param_conditional, dim=1, inputs=[True], devices=devices)
232
- add_kernel_test(TestConditional, kernel=test_conditional_chain_basic, dim=1, devices=devices)
233
- add_kernel_test(TestConditional, kernel=test_conditional_chain_empty_range, dim=1, devices=devices)
234
- add_kernel_test(TestConditional, kernel=test_conditional_chain_faker, dim=1, devices=devices)
235
- add_kernel_test(TestConditional, kernel=test_conditional_chain_and, dim=1, devices=devices)
236
- add_kernel_test(TestConditional, kernel=test_conditional_chain_eqs, dim=1, devices=devices)
237
- add_kernel_test(TestConditional, kernel=test_conditional_chain_mixed, dim=1, devices=devices)
238
- add_function_test(
239
- TestConditional, "test_conditional_unequal_types", test_conditional_unequal_types, devices=devices
240
- )
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
+
221
+
222
+ class TestConditional(unittest.TestCase):
223
+ pass
224
+
241
225
 
242
- 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)
243
242
 
244
243
 
245
244
  if __name__ == "__main__":
246
245
  wp.build.clear_kernel_cache()
247
- _ = register(unittest.TestCase)
248
246
  unittest.main(verbosity=2)