warp-lang 1.0.0b2__py3-none-win_amd64.whl → 1.0.0b6__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 (271) hide show
  1. docs/conf.py +17 -5
  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/env/env_usd.py +4 -1
  6. examples/env/environment.py +8 -9
  7. examples/example_dem.py +34 -33
  8. examples/example_diffray.py +364 -337
  9. examples/example_fluid.py +32 -23
  10. examples/example_jacobian_ik.py +97 -93
  11. examples/example_marching_cubes.py +6 -16
  12. examples/example_mesh.py +6 -16
  13. examples/example_mesh_intersect.py +16 -14
  14. examples/example_nvdb.py +14 -16
  15. examples/example_raycast.py +14 -13
  16. examples/example_raymarch.py +16 -23
  17. examples/example_render_opengl.py +19 -10
  18. examples/example_sim_cartpole.py +82 -78
  19. examples/example_sim_cloth.py +45 -48
  20. examples/example_sim_fk_grad.py +51 -44
  21. examples/example_sim_fk_grad_torch.py +47 -40
  22. examples/example_sim_grad_bounce.py +108 -133
  23. examples/example_sim_grad_cloth.py +99 -113
  24. examples/example_sim_granular.py +5 -6
  25. examples/{example_sim_sdf_shape.py → example_sim_granular_collision_sdf.py} +37 -26
  26. examples/example_sim_neo_hookean.py +51 -55
  27. examples/example_sim_particle_chain.py +4 -4
  28. examples/example_sim_quadruped.py +126 -81
  29. examples/example_sim_rigid_chain.py +54 -61
  30. examples/example_sim_rigid_contact.py +66 -70
  31. examples/example_sim_rigid_fem.py +3 -3
  32. examples/example_sim_rigid_force.py +1 -1
  33. examples/example_sim_rigid_gyroscopic.py +3 -4
  34. examples/example_sim_rigid_kinematics.py +28 -39
  35. examples/example_sim_trajopt.py +112 -110
  36. examples/example_sph.py +9 -8
  37. examples/example_wave.py +7 -7
  38. examples/fem/bsr_utils.py +30 -17
  39. examples/fem/example_apic_fluid.py +85 -69
  40. examples/fem/example_convection_diffusion.py +97 -93
  41. examples/fem/example_convection_diffusion_dg.py +142 -149
  42. examples/fem/example_convection_diffusion_dg0.py +141 -136
  43. examples/fem/example_deformed_geometry.py +146 -0
  44. examples/fem/example_diffusion.py +115 -84
  45. examples/fem/example_diffusion_3d.py +116 -86
  46. examples/fem/example_diffusion_mgpu.py +102 -79
  47. examples/fem/example_mixed_elasticity.py +139 -100
  48. examples/fem/example_navier_stokes.py +175 -162
  49. examples/fem/example_stokes.py +143 -111
  50. examples/fem/example_stokes_transfer.py +186 -157
  51. examples/fem/mesh_utils.py +59 -97
  52. examples/fem/plot_utils.py +138 -17
  53. tools/ci/publishing/build_nodes_info.py +54 -0
  54. warp/__init__.py +4 -3
  55. warp/__init__.pyi +1 -0
  56. warp/bin/warp-clang.dll +0 -0
  57. warp/bin/warp.dll +0 -0
  58. warp/build.py +5 -3
  59. warp/build_dll.py +29 -9
  60. warp/builtins.py +836 -492
  61. warp/codegen.py +864 -553
  62. warp/config.py +3 -1
  63. warp/context.py +389 -172
  64. warp/fem/__init__.py +24 -6
  65. warp/fem/cache.py +318 -25
  66. warp/fem/dirichlet.py +7 -3
  67. warp/fem/domain.py +14 -0
  68. warp/fem/field/__init__.py +30 -38
  69. warp/fem/field/field.py +149 -0
  70. warp/fem/field/nodal_field.py +244 -138
  71. warp/fem/field/restriction.py +8 -6
  72. warp/fem/field/test.py +127 -59
  73. warp/fem/field/trial.py +117 -60
  74. warp/fem/geometry/__init__.py +5 -1
  75. warp/fem/geometry/deformed_geometry.py +271 -0
  76. warp/fem/geometry/element.py +24 -1
  77. warp/fem/geometry/geometry.py +86 -14
  78. warp/fem/geometry/grid_2d.py +112 -54
  79. warp/fem/geometry/grid_3d.py +134 -65
  80. warp/fem/geometry/hexmesh.py +953 -0
  81. warp/fem/geometry/partition.py +85 -33
  82. warp/fem/geometry/quadmesh_2d.py +532 -0
  83. warp/fem/geometry/tetmesh.py +451 -115
  84. warp/fem/geometry/trimesh_2d.py +197 -92
  85. warp/fem/integrate.py +534 -268
  86. warp/fem/operator.py +58 -31
  87. warp/fem/polynomial.py +11 -0
  88. warp/fem/quadrature/__init__.py +1 -1
  89. warp/fem/quadrature/pic_quadrature.py +150 -58
  90. warp/fem/quadrature/quadrature.py +209 -57
  91. warp/fem/space/__init__.py +230 -53
  92. warp/fem/space/basis_space.py +489 -0
  93. warp/fem/space/collocated_function_space.py +105 -0
  94. warp/fem/space/dof_mapper.py +49 -2
  95. warp/fem/space/function_space.py +90 -39
  96. warp/fem/space/grid_2d_function_space.py +149 -496
  97. warp/fem/space/grid_3d_function_space.py +173 -538
  98. warp/fem/space/hexmesh_function_space.py +352 -0
  99. warp/fem/space/partition.py +129 -76
  100. warp/fem/space/quadmesh_2d_function_space.py +369 -0
  101. warp/fem/space/restriction.py +46 -34
  102. warp/fem/space/shape/__init__.py +15 -0
  103. warp/fem/space/shape/cube_shape_function.py +738 -0
  104. warp/fem/space/shape/shape_function.py +103 -0
  105. warp/fem/space/shape/square_shape_function.py +611 -0
  106. warp/fem/space/shape/tet_shape_function.py +567 -0
  107. warp/fem/space/shape/triangle_shape_function.py +429 -0
  108. warp/fem/space/tetmesh_function_space.py +132 -1039
  109. warp/fem/space/topology.py +295 -0
  110. warp/fem/space/trimesh_2d_function_space.py +104 -742
  111. warp/fem/types.py +13 -11
  112. warp/fem/utils.py +335 -60
  113. warp/native/array.h +120 -34
  114. warp/native/builtin.h +101 -72
  115. warp/native/bvh.cpp +73 -325
  116. warp/native/bvh.cu +406 -23
  117. warp/native/bvh.h +22 -40
  118. warp/native/clang/clang.cpp +1 -0
  119. warp/native/crt.h +2 -0
  120. warp/native/cuda_util.cpp +8 -3
  121. warp/native/cuda_util.h +1 -0
  122. warp/native/exports.h +1522 -1243
  123. warp/native/intersect.h +19 -4
  124. warp/native/intersect_adj.h +8 -8
  125. warp/native/mat.h +76 -17
  126. warp/native/mesh.cpp +33 -108
  127. warp/native/mesh.cu +114 -18
  128. warp/native/mesh.h +395 -40
  129. warp/native/noise.h +272 -329
  130. warp/native/quat.h +51 -8
  131. warp/native/rand.h +44 -34
  132. warp/native/reduce.cpp +1 -1
  133. warp/native/sparse.cpp +4 -4
  134. warp/native/sparse.cu +163 -155
  135. warp/native/spatial.h +2 -2
  136. warp/native/temp_buffer.h +18 -14
  137. warp/native/vec.h +103 -21
  138. warp/native/warp.cpp +2 -1
  139. warp/native/warp.cu +28 -3
  140. warp/native/warp.h +4 -3
  141. warp/render/render_opengl.py +261 -109
  142. warp/sim/__init__.py +1 -2
  143. warp/sim/articulation.py +385 -185
  144. warp/sim/import_mjcf.py +59 -48
  145. warp/sim/import_urdf.py +15 -15
  146. warp/sim/import_usd.py +174 -102
  147. warp/sim/inertia.py +17 -18
  148. warp/sim/integrator_xpbd.py +4 -3
  149. warp/sim/model.py +330 -250
  150. warp/sim/render.py +1 -1
  151. warp/sparse.py +625 -152
  152. warp/stubs.py +341 -309
  153. warp/tape.py +9 -6
  154. warp/tests/__main__.py +3 -6
  155. warp/tests/assets/curlnoise_golden.npy +0 -0
  156. warp/tests/assets/pnoise_golden.npy +0 -0
  157. warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
  158. warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
  159. warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
  160. warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
  161. warp/tests/aux_test_unresolved_func.py +14 -0
  162. warp/tests/aux_test_unresolved_symbol.py +14 -0
  163. warp/tests/disabled_kinematics.py +239 -0
  164. warp/tests/run_coverage_serial.py +31 -0
  165. warp/tests/test_adam.py +103 -106
  166. warp/tests/test_arithmetic.py +94 -74
  167. warp/tests/test_array.py +82 -101
  168. warp/tests/test_array_reduce.py +57 -23
  169. warp/tests/test_atomic.py +64 -28
  170. warp/tests/test_bool.py +22 -12
  171. warp/tests/test_builtins_resolution.py +1292 -0
  172. warp/tests/test_bvh.py +18 -18
  173. warp/tests/test_closest_point_edge_edge.py +54 -57
  174. warp/tests/test_codegen.py +165 -134
  175. warp/tests/test_compile_consts.py +28 -20
  176. warp/tests/test_conditional.py +108 -24
  177. warp/tests/test_copy.py +10 -12
  178. warp/tests/test_ctypes.py +112 -88
  179. warp/tests/test_dense.py +21 -14
  180. warp/tests/test_devices.py +98 -0
  181. warp/tests/test_dlpack.py +75 -75
  182. warp/tests/test_examples.py +237 -0
  183. warp/tests/test_fabricarray.py +22 -24
  184. warp/tests/test_fast_math.py +15 -11
  185. warp/tests/test_fem.py +1034 -124
  186. warp/tests/test_fp16.py +23 -16
  187. warp/tests/test_func.py +187 -86
  188. warp/tests/test_generics.py +194 -49
  189. warp/tests/test_grad.py +123 -181
  190. warp/tests/test_grad_customs.py +176 -0
  191. warp/tests/test_hash_grid.py +35 -34
  192. warp/tests/test_import.py +10 -23
  193. warp/tests/test_indexedarray.py +24 -25
  194. warp/tests/test_intersect.py +18 -9
  195. warp/tests/test_large.py +141 -0
  196. warp/tests/test_launch.py +14 -41
  197. warp/tests/test_lerp.py +64 -65
  198. warp/tests/test_lvalue.py +493 -0
  199. warp/tests/test_marching_cubes.py +12 -13
  200. warp/tests/test_mat.py +517 -2898
  201. warp/tests/test_mat_lite.py +115 -0
  202. warp/tests/test_mat_scalar_ops.py +2889 -0
  203. warp/tests/test_math.py +103 -9
  204. warp/tests/test_matmul.py +304 -69
  205. warp/tests/test_matmul_lite.py +410 -0
  206. warp/tests/test_mesh.py +60 -22
  207. warp/tests/test_mesh_query_aabb.py +21 -25
  208. warp/tests/test_mesh_query_point.py +111 -22
  209. warp/tests/test_mesh_query_ray.py +12 -24
  210. warp/tests/test_mlp.py +30 -22
  211. warp/tests/test_model.py +92 -89
  212. warp/tests/test_modules_lite.py +39 -0
  213. warp/tests/test_multigpu.py +88 -114
  214. warp/tests/test_noise.py +12 -11
  215. warp/tests/test_operators.py +16 -20
  216. warp/tests/test_options.py +11 -11
  217. warp/tests/test_pinned.py +17 -18
  218. warp/tests/test_print.py +32 -11
  219. warp/tests/test_quat.py +275 -129
  220. warp/tests/test_rand.py +18 -16
  221. warp/tests/test_reload.py +38 -34
  222. warp/tests/test_rounding.py +50 -43
  223. warp/tests/test_runlength_encode.py +168 -20
  224. warp/tests/test_smoothstep.py +9 -11
  225. warp/tests/test_snippet.py +143 -0
  226. warp/tests/test_sparse.py +261 -63
  227. warp/tests/test_spatial.py +276 -243
  228. warp/tests/test_streams.py +110 -85
  229. warp/tests/test_struct.py +268 -63
  230. warp/tests/test_tape.py +39 -21
  231. warp/tests/test_torch.py +90 -86
  232. warp/tests/test_transient_module.py +10 -12
  233. warp/tests/test_types.py +363 -0
  234. warp/tests/test_utils.py +451 -0
  235. warp/tests/test_vec.py +354 -2050
  236. warp/tests/test_vec_lite.py +73 -0
  237. warp/tests/test_vec_scalar_ops.py +2099 -0
  238. warp/tests/test_volume.py +418 -376
  239. warp/tests/test_volume_write.py +124 -134
  240. warp/tests/unittest_serial.py +35 -0
  241. warp/tests/unittest_suites.py +291 -0
  242. warp/tests/unittest_utils.py +342 -0
  243. warp/tests/{test_misc.py → unused_test_misc.py} +13 -5
  244. warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
  245. warp/thirdparty/appdirs.py +36 -45
  246. warp/thirdparty/unittest_parallel.py +589 -0
  247. warp/types.py +622 -211
  248. warp/utils.py +54 -393
  249. warp_lang-1.0.0b6.dist-info/METADATA +238 -0
  250. warp_lang-1.0.0b6.dist-info/RECORD +409 -0
  251. {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/WHEEL +1 -1
  252. examples/example_cache_management.py +0 -40
  253. examples/example_multigpu.py +0 -54
  254. examples/example_struct.py +0 -65
  255. examples/fem/example_stokes_transfer_3d.py +0 -210
  256. warp/bin/warp-clang.so +0 -0
  257. warp/bin/warp.so +0 -0
  258. warp/fem/field/discrete_field.py +0 -80
  259. warp/fem/space/nodal_function_space.py +0 -233
  260. warp/tests/test_all.py +0 -223
  261. warp/tests/test_array_scan.py +0 -60
  262. warp/tests/test_base.py +0 -208
  263. warp/tests/test_unresolved_func.py +0 -7
  264. warp/tests/test_unresolved_symbol.py +0 -7
  265. warp_lang-1.0.0b2.dist-info/METADATA +0 -26
  266. warp_lang-1.0.0b2.dist-info/RECORD +0 -380
  267. /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
  268. /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
  269. /warp/tests/{test_square.py → aux_test_square.py} +0 -0
  270. {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/LICENSE.md +0 -0
  271. {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/top_level.txt +0 -0
warp/tests/test_dlpack.py CHANGED
@@ -5,13 +5,14 @@
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
- import unittest
10
- import os
11
8
  import ctypes
9
+ import os
10
+ import unittest
11
+
12
+ import numpy as np
12
13
 
13
14
  import warp as wp
14
- from warp.tests.test_base import *
15
+ from warp.tests.unittest_utils import *
15
16
 
16
17
  wp.init()
17
18
 
@@ -299,78 +300,77 @@ def test_dlpack_jax_to_warp(test, device):
299
300
  assert_np_equal(a2.numpy(), np.asarray(j))
300
301
 
301
302
 
302
- def register(parent):
303
- class TestDLPack(parent):
304
- pass
305
-
306
- devices = get_test_devices()
307
-
308
- add_function_test(TestDLPack, "test_dlpack_warp_to_warp", test_dlpack_warp_to_warp, devices=devices)
309
- add_function_test(TestDLPack, "test_dlpack_dtypes_and_shapes", test_dlpack_dtypes_and_shapes, devices=devices)
310
-
311
- # torch interop via dlpack
312
- try:
313
- import torch
314
- import torch.utils.dlpack
315
-
316
- # check which Warp devices work with Torch
317
- # CUDA devices may fail if Torch was not compiled with CUDA support
318
- test_devices = get_test_devices()
319
- torch_compatible_devices = []
320
- for d in test_devices:
321
- try:
322
- t = torch.arange(10, device=wp.device_to_torch(d))
323
- t += 1
324
- torch_compatible_devices.append(d)
325
- except Exception as e:
326
- print(f"Skipping Torch DLPack tests on device '{d}' due to exception: {e}")
327
-
328
- if torch_compatible_devices:
329
- add_function_test(
330
- TestDLPack, "test_dlpack_warp_to_torch", test_dlpack_warp_to_torch, devices=torch_compatible_devices
331
- )
332
- add_function_test(
333
- TestDLPack, "test_dlpack_torch_to_warp", test_dlpack_torch_to_warp, devices=torch_compatible_devices
334
- )
335
-
336
- except Exception as e:
337
- print(f"Skipping Torch DLPack tests due to exception: {e}")
338
-
339
- # jax interop via dlpack
340
- try:
341
- # prevent Jax from gobbling up GPU memory
342
- os.environ["XLA_PYTHON_CLIENT_PREALLOCATE"] = "false"
343
-
344
- import jax
345
- import jax.dlpack
346
-
347
- # check which Warp devices work with Jax
348
- # CUDA devices may fail if Jax cannot find a CUDA Toolkit
349
- test_devices = get_test_devices()
350
- jax_compatible_devices = []
351
- for d in test_devices:
352
- try:
353
- with jax.default_device(wp.device_to_jax(d)):
354
- j = jax.numpy.arange(10, dtype=jax.numpy.float32)
355
- j += 1
356
- jax_compatible_devices.append(d)
357
- except Exception as e:
358
- print(f"Skipping Jax DLPack tests on device '{d}' due to exception: {e}")
359
-
360
- if jax_compatible_devices:
361
- add_function_test(
362
- TestDLPack, "test_dlpack_warp_to_jax", test_dlpack_warp_to_jax, devices=jax_compatible_devices
363
- )
364
- add_function_test(
365
- TestDLPack, "test_dlpack_jax_to_warp", test_dlpack_jax_to_warp, devices=jax_compatible_devices
366
- )
367
-
368
- except Exception as e:
369
- print(f"Skipping Jax DLPack tests due to exception: {e}")
370
-
371
- return TestDLPack
303
+ class TestDLPack(unittest.TestCase):
304
+ pass
305
+
306
+
307
+ devices = get_test_devices()
308
+
309
+ add_function_test(TestDLPack, "test_dlpack_warp_to_warp", test_dlpack_warp_to_warp, devices=devices)
310
+ add_function_test(TestDLPack, "test_dlpack_dtypes_and_shapes", test_dlpack_dtypes_and_shapes, devices=devices)
311
+
312
+ # torch interop via dlpack
313
+ try:
314
+ import torch
315
+ import torch.utils.dlpack
316
+
317
+ # check which Warp devices work with Torch
318
+ # CUDA devices may fail if Torch was not compiled with CUDA support
319
+ test_devices = get_test_devices()
320
+ torch_compatible_devices = []
321
+ for d in test_devices:
322
+ try:
323
+ t = torch.arange(10, device=wp.device_to_torch(d))
324
+ t += 1
325
+ torch_compatible_devices.append(d)
326
+ except Exception as e:
327
+ print(f"Skipping Torch DLPack tests on device '{d}' due to exception: {e}")
328
+
329
+ if torch_compatible_devices:
330
+ add_function_test(
331
+ TestDLPack, "test_dlpack_warp_to_torch", test_dlpack_warp_to_torch, devices=torch_compatible_devices
332
+ )
333
+ add_function_test(
334
+ TestDLPack, "test_dlpack_torch_to_warp", test_dlpack_torch_to_warp, devices=torch_compatible_devices
335
+ )
336
+
337
+ except Exception as e:
338
+ print(f"Skipping Torch DLPack tests due to exception: {e}")
339
+
340
+ # jax interop via dlpack
341
+ try:
342
+ # prevent Jax from gobbling up GPU memory
343
+ os.environ["XLA_PYTHON_CLIENT_PREALLOCATE"] = "false"
344
+ os.environ["XLA_PYTHON_CLIENT_ALLOCATOR"] = "platform"
345
+
346
+ import jax
347
+ import jax.dlpack
348
+
349
+ # check which Warp devices work with Jax
350
+ # CUDA devices may fail if Jax cannot find a CUDA Toolkit
351
+ test_devices = get_test_devices()
352
+ jax_compatible_devices = []
353
+ for d in test_devices:
354
+ try:
355
+ with jax.default_device(wp.device_to_jax(d)):
356
+ j = jax.numpy.arange(10, dtype=jax.numpy.float32)
357
+ j += 1
358
+ jax_compatible_devices.append(d)
359
+ except Exception as e:
360
+ print(f"Skipping Jax DLPack tests on device '{d}' due to exception: {e}")
361
+
362
+ if jax_compatible_devices:
363
+ add_function_test(
364
+ TestDLPack, "test_dlpack_warp_to_jax", test_dlpack_warp_to_jax, devices=jax_compatible_devices
365
+ )
366
+ add_function_test(
367
+ TestDLPack, "test_dlpack_jax_to_warp", test_dlpack_jax_to_warp, devices=jax_compatible_devices
368
+ )
369
+
370
+ except Exception as e:
371
+ print(f"Skipping Jax DLPack tests due to exception: {e}")
372
372
 
373
373
 
374
374
  if __name__ == "__main__":
375
- c = register(unittest.TestCase)
375
+ wp.build.clear_kernel_cache()
376
376
  unittest.main(verbosity=2)
@@ -0,0 +1,237 @@
1
+ # Copyright (c) 2023 NVIDIA CORPORATION. All rights reserved.
2
+ # NVIDIA CORPORATION and its licensors retain all intellectual property
3
+ # and proprietary rights in and to this software, related documentation
4
+ # and any modifications thereto. Any use, reproduction, disclosure or
5
+ # distribution of this software and related documentation without an express
6
+ # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
+
8
+ import importlib
9
+ import os
10
+ import unittest
11
+
12
+ import warp as wp
13
+ from warp.tests.unittest_utils import get_unique_cuda_test_devices, sanitize_identifier
14
+
15
+ wp.init()
16
+
17
+
18
+ # registers an example to run as a TestCase
19
+ def add_example_test(cls, name, devices=None, options={}):
20
+ def run(test, device):
21
+ # The copy() is needed because pop() is used to avoid passing extra args to Example()
22
+ # Can remove once all examples accept **kwargs and we no longer need to pop()
23
+ test_options = options.copy()
24
+
25
+ try:
26
+ module = importlib.import_module(f"examples.{name}")
27
+
28
+ torch_cuda_required = test_options.setdefault("torch_cuda_required", False)
29
+ test_options.pop("torch_cuda_required", None)
30
+ if torch_cuda_required and wp.get_device(device).is_cuda:
31
+ # Ensure torch has CUDA support
32
+ import torch
33
+
34
+ if not torch.cuda.is_available():
35
+ test.skipTest("Torch not compiled with CUDA support")
36
+
37
+ except Exception as e:
38
+ test.skipTest(f"{e}")
39
+
40
+ # create default USD stage output path which many examples expect
41
+ test_options.setdefault(
42
+ "stage", os.path.join(os.path.dirname(__file__), f"outputs/{name}_{sanitize_identifier(device)}.usd")
43
+ )
44
+
45
+ try:
46
+ os.remove(test_options["stage"])
47
+ except OSError:
48
+ pass
49
+
50
+ num_frames = test_options.get("num_frames", 10)
51
+ test_options.pop("num_frames", None)
52
+
53
+ # Don't want to force load all modules by default for serial test runner
54
+ wp.config.graph_capture_module_load_default = False
55
+
56
+ try:
57
+ enable_backward = test_options.get("enable_backward", True)
58
+ wp.set_module_options({"enable_backward": enable_backward}, module)
59
+ test_options.pop("enable_backward", None)
60
+
61
+ with wp.ScopedDevice(device):
62
+ wp.load_module(module, device=wp.get_device())
63
+ extra_load_modules = test_options.get("load_modules", [])
64
+ for module_name in extra_load_modules:
65
+ wp.load_module(module_name, device=wp.get_device())
66
+ test_options.pop("load_modules", None)
67
+
68
+ e = module.Example(**test_options)
69
+
70
+ # disable scoped timer to avoid log spam from time steps
71
+ wp.ScopedTimer.enabled = False
72
+
73
+ for _ in range(num_frames):
74
+ e.update()
75
+ e.render()
76
+ except Exception as e:
77
+ test.fail(f"{e}")
78
+ finally:
79
+ wp.ScopedTimer.enabled = True
80
+ wp.config.graph_capture_module_load_default = True
81
+
82
+ from warp.tests.unittest_utils import add_function_test
83
+
84
+ add_function_test(cls, f"test_{name}", run, devices=devices, check_output=False)
85
+
86
+
87
+ # TODO: Make the example classes use the passed in device
88
+ cuda_test_devices = get_unique_cuda_test_devices()
89
+
90
+ # NOTE: To give the parallel test runner more opportunities to parallelize test cases,
91
+ # we break up the tests into multiple TestCase classes that should be non-conflicting
92
+ # w.r.t. kernel compilation
93
+
94
+
95
+ class TestExamples(unittest.TestCase):
96
+ pass
97
+
98
+
99
+ # Exclude unless we can run headless somehow
100
+ # add_example_test(TestExamples, name="example_render_opengl", options={})
101
+
102
+ add_example_test(TestExamples, name="example_dem", devices=cuda_test_devices)
103
+ add_example_test(TestExamples, name="example_diffray", devices=cuda_test_devices)
104
+ add_example_test(TestExamples, name="example_fluid", devices=cuda_test_devices)
105
+ add_example_test(TestExamples, name="example_jacobian_ik", devices=cuda_test_devices)
106
+ add_example_test(TestExamples, name="example_marching_cubes", devices=cuda_test_devices)
107
+ add_example_test(TestExamples, name="example_mesh", devices=cuda_test_devices)
108
+ add_example_test(TestExamples, name="example_mesh_intersect", devices=cuda_test_devices, options={"num_frames": 1})
109
+ add_example_test(TestExamples, name="example_nvdb", devices=cuda_test_devices)
110
+ add_example_test(TestExamples, name="example_raycast", devices=cuda_test_devices)
111
+ add_example_test(TestExamples, name="example_raymarch", devices=cuda_test_devices)
112
+ add_example_test(TestExamples, name="example_sph", devices=cuda_test_devices)
113
+ add_example_test(TestExamples, name="example_wave", devices=cuda_test_devices, options={"resx": 256, "resy": 256})
114
+
115
+
116
+ class TestSimExamples(unittest.TestCase):
117
+ pass
118
+
119
+
120
+ add_example_test(
121
+ TestSimExamples,
122
+ name="example_sim_cartpole",
123
+ devices=cuda_test_devices,
124
+ options={"load_modules": ["warp.sim.collide", "warp.sim.integrator_euler", "warp.sim.articulation"]},
125
+ )
126
+ add_example_test(
127
+ TestSimExamples,
128
+ name="example_sim_cloth",
129
+ devices=cuda_test_devices,
130
+ options={"load_modules": ["warp.sim.collide", "warp.sim.integrator_euler", "warp.sim.particles"]},
131
+ )
132
+ add_example_test(TestSimExamples, name="example_sim_fk_grad", devices=cuda_test_devices)
133
+ add_example_test(
134
+ TestSimExamples, name="example_sim_fk_grad_torch", devices=cuda_test_devices, options={"torch_cuda_required": True}
135
+ )
136
+ add_example_test(
137
+ TestSimExamples,
138
+ name="example_sim_grad_bounce",
139
+ devices=cuda_test_devices,
140
+ options={"load_modules": ["warp.sim.integrator_euler", "warp.sim.particles"]},
141
+ )
142
+ add_example_test(
143
+ TestSimExamples,
144
+ name="example_sim_grad_cloth",
145
+ devices=cuda_test_devices,
146
+ options={"load_modules": ["warp.sim.integrator_euler", "warp.sim.particles"]},
147
+ )
148
+ add_example_test(TestSimExamples, name="example_sim_granular", devices=cuda_test_devices)
149
+ add_example_test(TestSimExamples, name="example_sim_granular_collision_sdf", devices=cuda_test_devices)
150
+ add_example_test(TestSimExamples, name="example_sim_neo_hookean", devices=cuda_test_devices)
151
+ add_example_test(TestSimExamples, name="example_sim_particle_chain", devices=cuda_test_devices)
152
+ add_example_test(
153
+ TestSimExamples,
154
+ name="example_sim_quadruped",
155
+ devices=cuda_test_devices,
156
+ options={"load_modules": ["warp.sim.integrator_xpbd", "warp.sim.integrator_euler"]},
157
+ )
158
+ add_example_test(
159
+ TestSimExamples,
160
+ name="example_sim_rigid_chain",
161
+ devices=cuda_test_devices,
162
+ options={"load_modules": ["warp.sim.integrator_xpbd", "warp.sim.integrator_euler"]},
163
+ )
164
+ add_example_test(
165
+ TestSimExamples,
166
+ name="example_sim_rigid_contact",
167
+ devices=cuda_test_devices,
168
+ options={"load_modules": ["warp.sim.integrator_euler"]},
169
+ )
170
+ add_example_test(TestSimExamples, name="example_sim_rigid_fem", devices=cuda_test_devices)
171
+ add_example_test(TestSimExamples, name="example_sim_rigid_force", devices=cuda_test_devices)
172
+ add_example_test(TestSimExamples, name="example_sim_rigid_gyroscopic", devices=cuda_test_devices)
173
+ add_example_test(TestSimExamples, name="example_sim_rigid_kinematics", devices=cuda_test_devices)
174
+ add_example_test(TestSimExamples, name="example_sim_trajopt", devices=cuda_test_devices)
175
+
176
+
177
+ class TestFemExamples(unittest.TestCase):
178
+ pass
179
+
180
+
181
+ add_example_test(
182
+ TestFemExamples,
183
+ name="fem.example_diffusion_mgpu",
184
+ devices=cuda_test_devices,
185
+ options={"quiet": True, "num_frames": 1, "enable_backward": False},
186
+ )
187
+
188
+ # The following examples do not need CUDA, but they need USD
189
+ add_example_test(
190
+ TestFemExamples,
191
+ name="fem.example_apic_fluid",
192
+ devices=cuda_test_devices,
193
+ options={"quiet": True, "res": [16, 16, 16], "enable_backward": False},
194
+ )
195
+ add_example_test(
196
+ TestFemExamples,
197
+ name="fem.example_diffusion",
198
+ devices=cuda_test_devices,
199
+ options={"quiet": True, "resolution": 10, "mesh": "tri", "num_frames": 1, "enable_backward": False},
200
+ )
201
+ add_example_test(
202
+ TestFemExamples,
203
+ name="fem.example_diffusion_3d",
204
+ devices=cuda_test_devices,
205
+ options={"quiet": True, "resolution": 10, "num_frames": 1, "enable_backward": False},
206
+ )
207
+ add_example_test(
208
+ TestFemExamples,
209
+ name="fem.example_deformed_geometry",
210
+ devices=cuda_test_devices,
211
+ options={"quiet": True, "resolution": 10, "num_frames": 1, "mesh": "tri", "enable_backward": False},
212
+ )
213
+ add_example_test(
214
+ TestFemExamples,
215
+ name="fem.example_convection_diffusion",
216
+ devices=cuda_test_devices,
217
+ options={"quiet": True, "resolution": 20, "enable_backward": False},
218
+ )
219
+ add_example_test(
220
+ TestFemExamples,
221
+ name="fem.example_mixed_elasticity",
222
+ devices=cuda_test_devices,
223
+ options={"quiet": True, "nonconforming_stresses": True, "mesh": "quad", "num_frames": 1, "enable_backward": False},
224
+ )
225
+ add_example_test(
226
+ TestFemExamples,
227
+ name="fem.example_stokes_transfer",
228
+ devices=cuda_test_devices,
229
+ options={"quiet": True, "num_frames": 1, "enable_backward": False},
230
+ )
231
+
232
+
233
+ if __name__ == "__main__":
234
+ # force rebuild of all kernels
235
+ wp.build.clear_kernel_cache()
236
+
237
+ unittest.main(verbosity=2, failfast=True)
@@ -5,7 +5,6 @@
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 math
10
9
  import unittest
11
10
  from typing import Any
@@ -13,7 +12,7 @@ from typing import Any
13
12
  import numpy as np
14
13
 
15
14
  import warp as wp
16
- from warp.tests.test_base import *
15
+ from warp.tests.unittest_utils import *
17
16
 
18
17
  wp.init()
19
18
 
@@ -87,6 +86,8 @@ def _create_fabric_array_interface(data: wp.array, attrib: str, bucket_sizes: li
87
86
  raise RuntimeError("Bucket sizes don't add up to the size of data array")
88
87
 
89
88
  elif data.size > 0:
89
+ rng = np.random.default_rng(123)
90
+
90
91
  # generate random bucket sizes
91
92
  bucket_min = 1
92
93
  bucket_max = math.ceil(0.5 * data.size)
@@ -95,7 +96,7 @@ def _create_fabric_array_interface(data: wp.array, attrib: str, bucket_sizes: li
95
96
 
96
97
  bucket_sizes = []
97
98
  while size_remaining >= bucket_max:
98
- bucket_size = np.random.randint(bucket_min, bucket_max)
99
+ bucket_size = rng.integers(bucket_min, high=bucket_max, dtype=int)
99
100
  bucket_sizes.append(bucket_size)
100
101
  size_remaining -= bucket_size
101
102
 
@@ -156,6 +157,8 @@ def _create_fabric_array_array_interface(data: list, attrib: str, bucket_sizes:
156
157
  raise RuntimeError("Bucket sizes don't add up to the number of given arrays")
157
158
 
158
159
  else:
160
+ rng = np.random.default_rng(123)
161
+
159
162
  # generate random bucket sizes
160
163
  bucket_min = 1
161
164
  bucket_max = math.ceil(0.5 * num_arrays)
@@ -164,7 +167,7 @@ def _create_fabric_array_array_interface(data: list, attrib: str, bucket_sizes:
164
167
 
165
168
  bucket_sizes = []
166
169
  while size_remaining >= bucket_max:
167
- bucket_size = np.random.randint(bucket_min, bucket_max)
170
+ bucket_size = rng.integers(bucket_min, high=bucket_max, dtype=int)
168
171
  bucket_sizes.append(bucket_size)
169
172
  size_remaining -= bucket_size
170
173
 
@@ -927,31 +930,26 @@ for T in _fabric_types:
927
930
  wp.overload(fa_generic_sums_kernel_indexed, [wp.indexedfabricarrayarray(dtype=T), wp.array(dtype=T)])
928
931
 
929
932
 
930
- def register(parent):
931
- devices = get_test_devices()
933
+ devices = get_test_devices()
934
+
932
935
 
933
- class TestFabricArray(parent):
934
- pass
936
+ class TestFabricArray(unittest.TestCase):
937
+ pass
935
938
 
936
- # fabric arrays
937
- add_function_test(TestFabricArray, "test_fabricarray_kernel", test_fabricarray_kernel, devices=devices)
938
- add_function_test(TestFabricArray, "test_fabricarray_empty", test_fabricarray_empty, devices=devices)
939
- add_function_test(
940
- TestFabricArray, "test_fabricarray_generic_dtype", test_fabricarray_generic_dtype, devices=devices
941
- )
942
- add_function_test(
943
- TestFabricArray, "test_fabricarray_generic_array", test_fabricarray_generic_array, devices=devices
944
- )
945
- add_function_test(TestFabricArray, "test_fabricarray_fill_scalar", test_fabricarray_fill_scalar, devices=devices)
946
- add_function_test(TestFabricArray, "test_fabricarray_fill_vector", test_fabricarray_fill_vector, devices=devices)
947
- add_function_test(TestFabricArray, "test_fabricarray_fill_matrix", test_fabricarray_fill_matrix, devices=devices)
948
939
 
949
- # fabric arrays of arrays
950
- add_function_test(TestFabricArray, "test_fabricarrayarray", test_fabricarrayarray, devices=devices)
940
+ # fabric arrays
941
+ add_function_test(TestFabricArray, "test_fabricarray_kernel", test_fabricarray_kernel, devices=devices)
942
+ add_function_test(TestFabricArray, "test_fabricarray_empty", test_fabricarray_empty, devices=devices)
943
+ add_function_test(TestFabricArray, "test_fabricarray_generic_dtype", test_fabricarray_generic_dtype, devices=devices)
944
+ add_function_test(TestFabricArray, "test_fabricarray_generic_array", test_fabricarray_generic_array, devices=devices)
945
+ add_function_test(TestFabricArray, "test_fabricarray_fill_scalar", test_fabricarray_fill_scalar, devices=devices)
946
+ add_function_test(TestFabricArray, "test_fabricarray_fill_vector", test_fabricarray_fill_vector, devices=devices)
947
+ add_function_test(TestFabricArray, "test_fabricarray_fill_matrix", test_fabricarray_fill_matrix, devices=devices)
951
948
 
952
- return TestFabricArray
949
+ # fabric arrays of arrays
950
+ add_function_test(TestFabricArray, "test_fabricarrayarray", test_fabricarrayarray, devices=devices)
953
951
 
954
952
 
955
953
  if __name__ == "__main__":
956
- c = register(unittest.TestCase)
954
+ wp.build.clear_kernel_cache()
957
955
  unittest.main(verbosity=2)
@@ -1,11 +1,14 @@
1
- import warp as wp
2
- import numpy as np
1
+ # Copyright (c) 2022 NVIDIA CORPORATION. All rights reserved.
2
+ # NVIDIA CORPORATION and its licensors retain all intellectual property
3
+ # and proprietary rights in and to this software, related documentation
4
+ # and any modifications thereto. Any use, reproduction, disclosure or
5
+ # distribution of this software and related documentation without an express
6
+ # license agreement from NVIDIA CORPORATION is strictly prohibited.
3
7
 
4
8
  import unittest
5
9
 
6
10
  import warp as wp
7
- from warp.tests.test_base import *
8
-
11
+ from warp.tests.unittest_utils import *
9
12
 
10
13
  wp.init()
11
14
 
@@ -33,18 +36,19 @@ def test_fast_math(test, device):
33
36
  with CheckOutput():
34
37
  wp.launch(test_pow, dim=1, inputs=[-2.0, 2.0, 2.0], device=device)
35
38
 
39
+ # Turn fast math back off
40
+ wp.set_module_options({"fast_math": False})
41
+
36
42
 
37
- def register(parent):
38
- class TestFastMath(parent):
39
- pass
43
+ class TestFastMath(unittest.TestCase):
44
+ pass
40
45
 
41
- devices = get_test_devices()
42
46
 
43
- add_function_test(TestFastMath, "test_fast_math", test_fast_math, devices=devices)
47
+ devices = get_test_devices()
44
48
 
45
- return TestFastMath
49
+ add_function_test(TestFastMath, "test_fast_math", test_fast_math, devices=devices)
46
50
 
47
51
 
48
52
  if __name__ == "__main__":
49
- c = register(unittest.TestCase)
53
+ wp.build.clear_kernel_cache()
50
54
  unittest.main(verbosity=2)