warp-lang 1.6.1__py3-none-macosx_10_13_universal2.whl → 1.7.0__py3-none-macosx_10_13_universal2.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 (401) hide show
  1. warp/__init__.py +21 -7
  2. warp/autograd.py +14 -6
  3. warp/bin/libwarp-clang.dylib +0 -0
  4. warp/bin/libwarp.dylib +0 -0
  5. warp/build.py +424 -6
  6. warp/build_dll.py +20 -20
  7. warp/builtins.py +467 -368
  8. warp/codegen.py +193 -125
  9. warp/config.py +56 -12
  10. warp/constants.py +14 -6
  11. warp/context.py +524 -277
  12. warp/dlpack.py +22 -12
  13. warp/examples/__init__.py +14 -6
  14. warp/examples/assets/nonuniform.usd +0 -0
  15. warp/examples/assets/nvidia_logo.png +0 -0
  16. warp/examples/benchmarks/benchmark_api.py +14 -6
  17. warp/examples/benchmarks/benchmark_cloth.py +14 -6
  18. warp/examples/benchmarks/benchmark_cloth_cupy.py +14 -6
  19. warp/examples/benchmarks/benchmark_cloth_jax.py +14 -6
  20. warp/examples/benchmarks/benchmark_cloth_numba.py +15 -0
  21. warp/examples/benchmarks/benchmark_cloth_numpy.py +14 -6
  22. warp/examples/benchmarks/benchmark_cloth_paddle.py +14 -6
  23. warp/examples/benchmarks/benchmark_cloth_pytorch.py +14 -6
  24. warp/examples/benchmarks/benchmark_cloth_taichi.py +14 -6
  25. warp/examples/benchmarks/benchmark_cloth_warp.py +14 -6
  26. warp/examples/benchmarks/benchmark_gemm.py +82 -48
  27. warp/examples/benchmarks/benchmark_interop_paddle.py +14 -6
  28. warp/examples/benchmarks/benchmark_interop_torch.py +14 -6
  29. warp/examples/benchmarks/benchmark_launches.py +14 -6
  30. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  31. warp/examples/browse.py +14 -6
  32. warp/examples/core/example_cupy.py +14 -6
  33. warp/examples/core/example_dem.py +14 -6
  34. warp/examples/core/example_fluid.py +14 -6
  35. warp/examples/core/example_graph_capture.py +14 -6
  36. warp/examples/core/example_marching_cubes.py +14 -6
  37. warp/examples/core/example_mesh.py +14 -6
  38. warp/examples/core/example_mesh_intersect.py +14 -6
  39. warp/examples/core/example_nvdb.py +14 -6
  40. warp/examples/core/example_raycast.py +14 -6
  41. warp/examples/core/example_raymarch.py +14 -6
  42. warp/examples/core/example_render_opengl.py +14 -6
  43. warp/examples/core/example_sample_mesh.py +300 -0
  44. warp/examples/core/example_sph.py +14 -6
  45. warp/examples/core/example_torch.py +14 -6
  46. warp/examples/core/example_wave.py +14 -6
  47. warp/examples/fem/example_adaptive_grid.py +14 -6
  48. warp/examples/fem/example_apic_fluid.py +15 -7
  49. warp/examples/fem/example_burgers.py +16 -8
  50. warp/examples/fem/example_convection_diffusion.py +14 -6
  51. warp/examples/fem/example_convection_diffusion_dg.py +14 -6
  52. warp/examples/fem/example_deformed_geometry.py +15 -7
  53. warp/examples/fem/example_diffusion.py +14 -6
  54. warp/examples/fem/example_diffusion_3d.py +14 -6
  55. warp/examples/fem/example_diffusion_mgpu.py +14 -6
  56. warp/examples/fem/example_distortion_energy.py +15 -7
  57. warp/examples/fem/example_magnetostatics.py +20 -12
  58. warp/examples/fem/example_mixed_elasticity.py +14 -6
  59. warp/examples/fem/example_navier_stokes.py +14 -6
  60. warp/examples/fem/example_nonconforming_contact.py +14 -6
  61. warp/examples/fem/example_stokes.py +14 -6
  62. warp/examples/fem/example_stokes_transfer.py +14 -6
  63. warp/examples/fem/example_streamlines.py +14 -6
  64. warp/examples/fem/utils.py +24 -3
  65. warp/examples/interop/example_jax_callable.py +116 -0
  66. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  67. warp/examples/interop/example_jax_kernel.py +205 -0
  68. warp/examples/optim/example_bounce.py +14 -6
  69. warp/examples/optim/example_cloth_throw.py +14 -6
  70. warp/examples/optim/example_diffray.py +14 -6
  71. warp/examples/optim/example_drone.py +14 -6
  72. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  73. warp/examples/optim/example_inverse_kinematics.py +14 -6
  74. warp/examples/optim/example_inverse_kinematics_torch.py +14 -6
  75. warp/examples/optim/example_softbody_properties.py +14 -6
  76. warp/examples/optim/example_spring_cage.py +14 -6
  77. warp/examples/optim/example_trajectory.py +14 -6
  78. warp/examples/sim/example_cartpole.py +14 -6
  79. warp/examples/sim/example_cloth.py +14 -6
  80. warp/examples/sim/example_cloth_self_contact.py +14 -6
  81. warp/examples/sim/example_granular.py +14 -6
  82. warp/examples/sim/example_granular_collision_sdf.py +14 -6
  83. warp/examples/sim/example_jacobian_ik.py +14 -6
  84. warp/examples/sim/example_particle_chain.py +14 -6
  85. warp/examples/sim/example_quadruped.py +14 -6
  86. warp/examples/sim/example_rigid_chain.py +14 -6
  87. warp/examples/sim/example_rigid_contact.py +14 -6
  88. warp/examples/sim/example_rigid_force.py +14 -6
  89. warp/examples/sim/example_rigid_gyroscopic.py +14 -6
  90. warp/examples/sim/example_rigid_soft_contact.py +14 -6
  91. warp/examples/sim/example_soft_body.py +14 -6
  92. warp/examples/tile/example_tile_cholesky.py +14 -6
  93. warp/examples/tile/example_tile_convolution.py +14 -6
  94. warp/examples/tile/example_tile_fft.py +14 -6
  95. warp/examples/tile/example_tile_filtering.py +14 -6
  96. warp/examples/tile/example_tile_matmul.py +16 -10
  97. warp/examples/tile/example_tile_mlp.py +14 -6
  98. warp/examples/tile/example_tile_nbody.py +14 -6
  99. warp/examples/tile/example_tile_walker.py +14 -6
  100. warp/fabric.py +15 -0
  101. warp/fem/__init__.py +26 -1
  102. warp/fem/adaptivity.py +19 -4
  103. warp/fem/cache.py +15 -0
  104. warp/fem/dirichlet.py +15 -0
  105. warp/fem/domain.py +15 -0
  106. warp/fem/field/__init__.py +15 -0
  107. warp/fem/field/field.py +15 -0
  108. warp/fem/field/nodal_field.py +37 -68
  109. warp/fem/field/restriction.py +15 -0
  110. warp/fem/field/virtual.py +77 -23
  111. warp/fem/geometry/__init__.py +15 -0
  112. warp/fem/geometry/adaptive_nanogrid.py +24 -10
  113. warp/fem/geometry/closest_point.py +16 -1
  114. warp/fem/geometry/deformed_geometry.py +20 -2
  115. warp/fem/geometry/element.py +15 -0
  116. warp/fem/geometry/geometry.py +20 -0
  117. warp/fem/geometry/grid_2d.py +27 -12
  118. warp/fem/geometry/grid_3d.py +27 -15
  119. warp/fem/geometry/hexmesh.py +20 -7
  120. warp/fem/geometry/nanogrid.py +24 -11
  121. warp/fem/geometry/partition.py +15 -0
  122. warp/fem/geometry/quadmesh.py +28 -13
  123. warp/fem/geometry/tetmesh.py +18 -4
  124. warp/fem/geometry/trimesh.py +18 -8
  125. warp/fem/integrate.py +277 -93
  126. warp/fem/linalg.py +20 -5
  127. warp/fem/operator.py +15 -0
  128. warp/fem/polynomial.py +15 -0
  129. warp/fem/quadrature/__init__.py +15 -0
  130. warp/fem/quadrature/pic_quadrature.py +52 -22
  131. warp/fem/quadrature/quadrature.py +209 -25
  132. warp/fem/space/__init__.py +16 -1
  133. warp/fem/space/basis_function_space.py +19 -2
  134. warp/fem/space/basis_space.py +40 -18
  135. warp/fem/space/dof_mapper.py +15 -0
  136. warp/fem/space/function_space.py +15 -0
  137. warp/fem/space/grid_2d_function_space.py +15 -0
  138. warp/fem/space/grid_3d_function_space.py +15 -0
  139. warp/fem/space/hexmesh_function_space.py +17 -2
  140. warp/fem/space/nanogrid_function_space.py +15 -0
  141. warp/fem/space/partition.py +21 -2
  142. warp/fem/space/quadmesh_function_space.py +23 -8
  143. warp/fem/space/restriction.py +15 -0
  144. warp/fem/space/shape/__init__.py +15 -0
  145. warp/fem/space/shape/cube_shape_function.py +38 -23
  146. warp/fem/space/shape/shape_function.py +15 -0
  147. warp/fem/space/shape/square_shape_function.py +27 -12
  148. warp/fem/space/shape/tet_shape_function.py +15 -0
  149. warp/fem/space/shape/triangle_shape_function.py +16 -1
  150. warp/fem/space/tetmesh_function_space.py +18 -3
  151. warp/fem/space/topology.py +15 -0
  152. warp/fem/space/trimesh_function_space.py +17 -2
  153. warp/fem/types.py +15 -0
  154. warp/fem/utils.py +27 -6
  155. warp/jax.py +28 -7
  156. warp/jax_experimental/__init__.py +16 -0
  157. warp/{jax_experimental.py → jax_experimental/custom_call.py} +28 -33
  158. warp/jax_experimental/ffi.py +698 -0
  159. warp/jax_experimental/xla_ffi.py +602 -0
  160. warp/math.py +103 -6
  161. warp/native/array.h +28 -6
  162. warp/native/builtin.h +44 -9
  163. warp/native/bvh.cpp +18 -7
  164. warp/native/bvh.cu +57 -20
  165. warp/native/bvh.h +17 -7
  166. warp/native/clang/clang.cpp +45 -9
  167. warp/native/coloring.cpp +15 -6
  168. warp/native/crt.cpp +15 -6
  169. warp/native/crt.h +15 -6
  170. warp/native/cuda_crt.h +15 -6
  171. warp/native/cuda_util.cpp +29 -6
  172. warp/native/cuda_util.h +17 -6
  173. warp/native/error.cpp +15 -6
  174. warp/native/error.h +15 -6
  175. warp/native/exports.h +85 -63
  176. warp/native/fabric.h +15 -6
  177. warp/native/hashgrid.cpp +15 -6
  178. warp/native/hashgrid.cu +15 -6
  179. warp/native/hashgrid.h +15 -6
  180. warp/native/initializer_array.h +15 -6
  181. warp/native/intersect.h +41 -32
  182. warp/native/intersect_adj.h +48 -39
  183. warp/native/intersect_tri.h +17 -0
  184. warp/native/marching.cpp +16 -0
  185. warp/native/marching.cu +16 -7
  186. warp/native/marching.h +17 -0
  187. warp/native/mat.h +528 -15
  188. warp/native/mathdx.cpp +15 -6
  189. warp/native/matnn.h +15 -6
  190. warp/native/mesh.cpp +15 -6
  191. warp/native/mesh.cu +15 -6
  192. warp/native/mesh.h +25 -16
  193. warp/native/noise.h +15 -6
  194. warp/native/quat.h +114 -17
  195. warp/native/rand.h +21 -6
  196. warp/native/range.h +15 -6
  197. warp/native/reduce.cpp +15 -6
  198. warp/native/reduce.cu +15 -6
  199. warp/native/runlength_encode.cpp +15 -6
  200. warp/native/runlength_encode.cu +15 -6
  201. warp/native/scan.cpp +15 -6
  202. warp/native/scan.cu +15 -6
  203. warp/native/scan.h +15 -6
  204. warp/native/solid_angle.h +17 -0
  205. warp/native/sort.cpp +137 -65
  206. warp/native/sort.cu +167 -21
  207. warp/native/sort.h +23 -7
  208. warp/native/sparse.cpp +58 -28
  209. warp/native/sparse.cu +67 -23
  210. warp/native/spatial.h +15 -6
  211. warp/native/svd.h +131 -6
  212. warp/native/temp_buffer.h +15 -6
  213. warp/native/tile.h +316 -111
  214. warp/native/tile_reduce.h +61 -9
  215. warp/native/vec.h +83 -13
  216. warp/native/volume.cpp +100 -119
  217. warp/native/volume.cu +15 -6
  218. warp/native/volume.h +15 -6
  219. warp/native/volume_builder.cu +40 -16
  220. warp/native/volume_builder.h +21 -6
  221. warp/native/volume_impl.h +15 -6
  222. warp/native/warp.cpp +20 -12
  223. warp/native/warp.cu +114 -16
  224. warp/native/warp.h +34 -16
  225. warp/optim/__init__.py +14 -6
  226. warp/optim/adam.py +14 -6
  227. warp/optim/linear.py +25 -10
  228. warp/optim/sgd.py +14 -6
  229. warp/paddle.py +14 -6
  230. warp/render/__init__.py +14 -6
  231. warp/render/render_opengl.py +14 -6
  232. warp/render/render_usd.py +14 -6
  233. warp/render/utils.py +14 -6
  234. warp/sim/__init__.py +14 -7
  235. warp/sim/articulation.py +18 -10
  236. warp/sim/collide.py +35 -16
  237. warp/sim/graph_coloring.py +14 -6
  238. warp/sim/import_mjcf.py +463 -162
  239. warp/sim/import_snu.py +14 -7
  240. warp/sim/import_urdf.py +46 -18
  241. warp/sim/import_usd.py +14 -7
  242. warp/sim/inertia.py +14 -6
  243. warp/sim/integrator.py +14 -6
  244. warp/sim/integrator_euler.py +19 -11
  245. warp/sim/integrator_featherstone.py +17 -16
  246. warp/sim/integrator_vbd.py +222 -8
  247. warp/sim/integrator_xpbd.py +19 -11
  248. warp/sim/model.py +56 -19
  249. warp/sim/particles.py +14 -6
  250. warp/sim/render.py +14 -6
  251. warp/sim/utils.py +17 -2
  252. warp/sparse.py +657 -555
  253. warp/stubs.py +231 -19
  254. warp/tape.py +14 -6
  255. warp/tests/aux_test_class_kernel.py +14 -6
  256. warp/tests/aux_test_compile_consts_dummy.py +14 -6
  257. warp/tests/aux_test_conditional_unequal_types_kernels.py +14 -6
  258. warp/tests/aux_test_dependent.py +14 -6
  259. warp/tests/aux_test_grad_customs.py +14 -6
  260. warp/tests/aux_test_instancing_gc.py +14 -6
  261. warp/tests/aux_test_module_unload.py +14 -6
  262. warp/tests/aux_test_name_clash1.py +14 -6
  263. warp/tests/aux_test_name_clash2.py +14 -6
  264. warp/tests/aux_test_unresolved_func.py +14 -6
  265. warp/tests/aux_test_unresolved_symbol.py +14 -6
  266. warp/tests/cuda/__init__.py +0 -0
  267. warp/tests/{test_async.py → cuda/test_async.py} +14 -6
  268. warp/tests/{test_ipc.py → cuda/test_ipc.py} +14 -6
  269. warp/tests/{test_mempool.py → cuda/test_mempool.py} +53 -6
  270. warp/tests/{test_multigpu.py → cuda/test_multigpu.py} +14 -6
  271. warp/tests/{test_peer.py → cuda/test_peer.py} +14 -6
  272. warp/tests/{test_pinned.py → cuda/test_pinned.py} +14 -6
  273. warp/tests/{test_streams.py → cuda/test_streams.py} +85 -6
  274. warp/tests/geometry/__init__.py +0 -0
  275. warp/tests/{test_bvh.py → geometry/test_bvh.py} +14 -6
  276. warp/tests/{test_hash_grid.py → geometry/test_hash_grid.py} +14 -6
  277. warp/tests/{test_marching_cubes.py → geometry/test_marching_cubes.py} +14 -6
  278. warp/tests/{test_mesh.py → geometry/test_mesh.py} +14 -6
  279. warp/tests/{test_mesh_query_aabb.py → geometry/test_mesh_query_aabb.py} +14 -6
  280. warp/tests/{test_mesh_query_point.py → geometry/test_mesh_query_point.py} +80 -69
  281. warp/tests/{test_mesh_query_ray.py → geometry/test_mesh_query_ray.py} +15 -7
  282. warp/tests/{test_volume.py → geometry/test_volume.py} +55 -12
  283. warp/tests/{test_volume_write.py → geometry/test_volume_write.py} +14 -6
  284. warp/tests/interop/__init__.py +0 -0
  285. warp/tests/{test_dlpack.py → interop/test_dlpack.py} +42 -11
  286. warp/tests/{test_jax.py → interop/test_jax.py} +14 -6
  287. warp/tests/{test_paddle.py → interop/test_paddle.py} +14 -6
  288. warp/tests/{test_torch.py → interop/test_torch.py} +14 -6
  289. warp/tests/run_coverage_serial.py +14 -6
  290. warp/tests/sim/__init__.py +0 -0
  291. warp/tests/{disabled_kinematics.py → sim/disabled_kinematics.py} +23 -16
  292. warp/tests/{flaky_test_sim_grad.py → sim/flaky_test_sim_grad.py} +14 -6
  293. warp/tests/{test_collision.py → sim/test_collision.py} +16 -8
  294. warp/tests/{test_coloring.py → sim/test_coloring.py} +14 -7
  295. warp/tests/{test_model.py → sim/test_model.py} +55 -7
  296. warp/tests/{test_sim_grad_bounce_linear.py → sim/test_sim_grad_bounce_linear.py} +14 -6
  297. warp/tests/{test_sim_kinematics.py → sim/test_sim_kinematics.py} +16 -7
  298. warp/tests/sim/test_vbd.py +597 -0
  299. warp/tests/test_adam.py +14 -6
  300. warp/tests/test_arithmetic.py +14 -6
  301. warp/tests/test_array.py +14 -6
  302. warp/tests/test_array_reduce.py +14 -6
  303. warp/tests/test_assert.py +14 -6
  304. warp/tests/test_atomic.py +14 -6
  305. warp/tests/test_bool.py +15 -7
  306. warp/tests/test_builtins_resolution.py +14 -6
  307. warp/tests/test_closest_point_edge_edge.py +14 -6
  308. warp/tests/test_codegen.py +14 -6
  309. warp/tests/test_codegen_instancing.py +14 -6
  310. warp/tests/test_compile_consts.py +14 -6
  311. warp/tests/test_conditional.py +14 -6
  312. warp/tests/test_context.py +14 -6
  313. warp/tests/test_copy.py +14 -6
  314. warp/tests/test_ctypes.py +14 -6
  315. warp/tests/test_dense.py +14 -6
  316. warp/tests/test_devices.py +14 -6
  317. warp/tests/test_examples.py +42 -42
  318. warp/tests/test_fabricarray.py +14 -6
  319. warp/tests/test_fast_math.py +14 -6
  320. warp/tests/test_fem.py +37 -10
  321. warp/tests/test_fp16.py +14 -6
  322. warp/tests/test_func.py +14 -6
  323. warp/tests/test_future_annotations.py +14 -6
  324. warp/tests/test_generics.py +14 -6
  325. warp/tests/test_grad.py +14 -6
  326. warp/tests/test_grad_customs.py +14 -6
  327. warp/tests/test_grad_debug.py +14 -6
  328. warp/tests/test_implicit_init.py +14 -6
  329. warp/tests/test_import.py +14 -6
  330. warp/tests/test_indexedarray.py +14 -6
  331. warp/tests/test_intersect.py +14 -6
  332. warp/tests/test_iter.py +14 -6
  333. warp/tests/test_large.py +14 -6
  334. warp/tests/test_launch.py +14 -6
  335. warp/tests/test_lerp.py +14 -6
  336. warp/tests/test_linear_solvers.py +15 -11
  337. warp/tests/test_lvalue.py +14 -6
  338. warp/tests/test_mat.py +247 -85
  339. warp/tests/test_mat_lite.py +14 -6
  340. warp/tests/test_mat_scalar_ops.py +18 -10
  341. warp/tests/test_math.py +14 -6
  342. warp/tests/test_mlp.py +14 -6
  343. warp/tests/test_module_hashing.py +14 -6
  344. warp/tests/test_modules_lite.py +14 -6
  345. warp/tests/test_noise.py +14 -6
  346. warp/tests/test_operators.py +14 -6
  347. warp/tests/test_options.py +14 -6
  348. warp/tests/test_overwrite.py +15 -60
  349. warp/tests/test_print.py +14 -6
  350. warp/tests/test_quat.py +81 -52
  351. warp/tests/test_rand.py +58 -43
  352. warp/tests/test_reload.py +14 -6
  353. warp/tests/test_rounding.py +14 -6
  354. warp/tests/test_runlength_encode.py +14 -6
  355. warp/tests/test_scalar_ops.py +14 -6
  356. warp/tests/test_smoothstep.py +14 -6
  357. warp/tests/test_snippet.py +15 -0
  358. warp/tests/test_sparse.py +61 -12
  359. warp/tests/test_spatial.py +89 -6
  360. warp/tests/test_special_values.py +14 -6
  361. warp/tests/test_static.py +15 -7
  362. warp/tests/test_struct.py +14 -6
  363. warp/tests/test_tape.py +14 -6
  364. warp/tests/test_transient_module.py +14 -6
  365. warp/tests/test_triangle_closest_point.py +14 -6
  366. warp/tests/test_types.py +14 -6
  367. warp/tests/test_utils.py +98 -10
  368. warp/tests/test_vec.py +60 -40
  369. warp/tests/test_vec_lite.py +14 -6
  370. warp/tests/test_vec_scalar_ops.py +14 -6
  371. warp/tests/test_verify_fp.py +14 -6
  372. warp/tests/tile/__init__.py +0 -0
  373. warp/tests/{test_tile.py → tile/test_tile.py} +150 -57
  374. warp/tests/{test_tile_load.py → tile/test_tile_load.py} +15 -7
  375. warp/tests/{test_tile_mathdx.py → tile/test_tile_mathdx.py} +23 -12
  376. warp/tests/{test_tile_mlp.py → tile/test_tile_mlp.py} +39 -20
  377. warp/tests/{test_tile_reduce.py → tile/test_tile_reduce.py} +74 -7
  378. warp/tests/{test_tile_shared_memory.py → tile/test_tile_shared_memory.py} +14 -6
  379. warp/tests/{test_tile_view.py → tile/test_tile_view.py} +15 -7
  380. warp/tests/unittest_serial.py +15 -6
  381. warp/tests/unittest_suites.py +59 -65
  382. warp/tests/unittest_utils.py +16 -7
  383. warp/tests/walkthrough_debug.py +14 -6
  384. warp/thirdparty/unittest_parallel.py +15 -8
  385. warp/torch.py +14 -6
  386. warp/types.py +124 -664
  387. warp/utils.py +151 -78
  388. {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/METADATA +39 -12
  389. warp_lang-1.7.0.dist-info/RECORD +429 -0
  390. {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/WHEEL +1 -1
  391. warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
  392. warp/examples/optim/example_walker.py +0 -309
  393. warp/native/cutlass_gemm.cpp +0 -34
  394. warp/native/cutlass_gemm.cu +0 -373
  395. warp/tests/test_matmul.py +0 -503
  396. warp/tests/test_matmul_lite.py +0 -403
  397. warp/tests/test_vbd.py +0 -378
  398. warp/tests/unused_test_misc.py +0 -69
  399. warp_lang-1.6.1.dist-info/LICENSE.md +0 -126
  400. warp_lang-1.6.1.dist-info/RECORD +0 -419
  401. {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,597 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ import contextlib
17
+ import io
18
+ import unittest
19
+
20
+ import warp as wp
21
+ import warp.optim
22
+ import warp.sim
23
+ import warp.sim.graph_coloring
24
+ import warp.sim.integrator_vbd
25
+ from warp.sim.model import PARTICLE_FLAG_ACTIVE
26
+ from warp.tests.unittest_utils import *
27
+
28
+ # fmt: off
29
+ CLOTH_POINTS = [
30
+ (-50.0000000, 0.0000000, -50.0000000),
31
+ (-38.8888893, 11.1111107, -50.0000000),
32
+ (-27.7777786, 22.2222214, -50.0000000),
33
+ (-16.6666679, 33.3333321, -50.0000000),
34
+ (-5.5555558, 44.4444427, -50.0000000),
35
+ (5.5555558, 55.5555573, -50.0000000),
36
+ (16.6666679, 66.6666641, -50.0000000),
37
+ (27.7777786, 77.7777786, -50.0000000),
38
+ (38.8888893, 88.8888855, -50.0000000),
39
+ (50.0000000, 100.0000000, -50.0000000),
40
+ (-50.0000000, 0.0000000, -38.8888893),
41
+ (-38.8888893, 11.1111107, -38.8888893),
42
+ (-27.7777786, 22.2222214, -38.8888893),
43
+ (-16.6666679, 33.3333321, -38.8888893),
44
+ (-5.5555558, 44.4444427, -38.8888893),
45
+ (5.5555558, 55.5555573, -38.8888893),
46
+ (16.6666679, 66.6666641, -38.8888893),
47
+ (27.7777786, 77.7777786, -38.8888893),
48
+ (38.8888893, 88.8888855, -38.8888893),
49
+ (50.0000000, 100.0000000, -38.8888893),
50
+ (-50.0000000, 0.0000000, -27.7777786),
51
+ (-38.8888893, 11.1111107, -27.7777786),
52
+ (-27.7777786, 22.2222214, -27.7777786),
53
+ (-16.6666679, 33.3333321, -27.7777786),
54
+ (-5.5555558, 44.4444427, -27.7777786),
55
+ (5.5555558, 55.5555573, -27.7777786),
56
+ (16.6666679, 66.6666641, -27.7777786),
57
+ (27.7777786, 77.7777786, -27.7777786),
58
+ (38.8888893, 88.8888855, -27.7777786),
59
+ (50.0000000, 100.0000000, -27.7777786),
60
+ (-50.0000000, 0.0000000, -16.6666679),
61
+ (-38.8888893, 11.1111107, -16.6666679),
62
+ (-27.7777786, 22.2222214, -16.6666679),
63
+ (-16.6666679, 33.3333321, -16.6666679),
64
+ (-5.5555558, 44.4444427, -16.6666679),
65
+ (5.5555558, 55.5555573, -16.6666679),
66
+ (16.6666679, 66.6666641, -16.6666679),
67
+ (27.7777786, 77.7777786, -16.6666679),
68
+ (38.8888893, 88.8888855, -16.6666679),
69
+ (50.0000000, 100.0000000, -16.6666679),
70
+ (-50.0000000, 0.0000000, -5.5555558),
71
+ (-38.8888893, 11.1111107, -5.5555558),
72
+ (-27.7777786, 22.2222214, -5.5555558),
73
+ (-16.6666679, 33.3333321, -5.5555558),
74
+ (-5.5555558, 44.4444427, -5.5555558),
75
+ (5.5555558, 55.5555573, -5.5555558),
76
+ (16.6666679, 66.6666641, -5.5555558),
77
+ (27.7777786, 77.7777786, -5.5555558),
78
+ (38.8888893, 88.8888855, -5.5555558),
79
+ (50.0000000, 100.0000000, -5.5555558),
80
+ (-50.0000000, 0.0000000, 5.5555558),
81
+ (-38.8888893, 11.1111107, 5.5555558),
82
+ (-27.7777786, 22.2222214, 5.5555558),
83
+ (-16.6666679, 33.3333321, 5.5555558),
84
+ (-5.5555558, 44.4444427, 5.5555558),
85
+ (5.5555558, 55.5555573, 5.5555558),
86
+ (16.6666679, 66.6666641, 5.5555558),
87
+ (27.7777786, 77.7777786, 5.5555558),
88
+ (38.8888893, 88.8888855, 5.5555558),
89
+ (50.0000000, 100.0000000, 5.5555558),
90
+ (-50.0000000, 0.0000000, 16.6666679),
91
+ (-38.8888893, 11.1111107, 16.6666679),
92
+ (-27.7777786, 22.2222214, 16.6666679),
93
+ (-16.6666679, 33.3333321, 16.6666679),
94
+ (-5.5555558, 44.4444427, 16.6666679),
95
+ (5.5555558, 55.5555573, 16.6666679),
96
+ (16.6666679, 66.6666641, 16.6666679),
97
+ (27.7777786, 77.7777786, 16.6666679),
98
+ (38.8888893, 88.8888855, 16.6666679),
99
+ (50.0000000, 100.0000000, 16.6666679),
100
+ (-50.0000000, 0.0000000, 27.7777786),
101
+ (-38.8888893, 11.1111107, 27.7777786),
102
+ (-27.7777786, 22.2222214, 27.7777786),
103
+ (-16.6666679, 33.3333321, 27.7777786),
104
+ (-5.5555558, 44.4444427, 27.7777786),
105
+ (5.5555558, 55.5555573, 27.7777786),
106
+ (16.6666679, 66.6666641, 27.7777786),
107
+ (27.7777786, 77.7777786, 27.7777786),
108
+ (38.8888893, 88.8888855, 27.7777786),
109
+ (50.0000000, 100.0000000, 27.7777786),
110
+ (-50.0000000, 0.0000000, 38.8888893),
111
+ (-38.8888893, 11.1111107, 38.8888893),
112
+ (-27.7777786, 22.2222214, 38.8888893),
113
+ (-16.6666679, 33.3333321, 38.8888893),
114
+ (-5.5555558, 44.4444427, 38.8888893),
115
+ (5.5555558, 55.5555573, 38.8888893),
116
+ (16.6666679, 66.6666641, 38.8888893),
117
+ (27.7777786, 77.7777786, 38.8888893),
118
+ (38.8888893, 88.8888855, 38.8888893),
119
+ (50.0000000, 100.0000000, 38.8888893),
120
+ (-50.0000000, 0.0000000, 50.0000000),
121
+ (-38.8888893, 11.1111107, 50.0000000),
122
+ (-27.7777786, 22.2222214, 50.0000000),
123
+ (-16.6666679, 33.3333321, 50.0000000),
124
+ (-5.5555558, 44.4444427, 50.0000000),
125
+ (5.5555558, 55.5555573, 50.0000000),
126
+ (16.6666679, 66.6666641, 50.0000000),
127
+ (27.7777786, 77.7777786, 50.0000000),
128
+ (38.8888893, 88.8888855, 50.0000000),
129
+ (50.0000000, 100.0000000, 50.0000000),
130
+ ]
131
+
132
+ CLOTH_FACES = [
133
+ 1, 12, 2,
134
+ 1, 11, 12,
135
+ 2, 12, 3,
136
+ 12, 13, 3,
137
+ 3, 14, 4,
138
+ 3, 13, 14,
139
+ 4, 14, 5,
140
+ 14, 15, 5,
141
+ 5, 16, 6,
142
+ 5, 15, 16,
143
+ 6, 16, 7,
144
+ 16, 17, 7,
145
+ 7, 18, 8,
146
+ 7, 17, 18,
147
+ 8, 18, 9,
148
+ 18, 19, 9,
149
+ 9, 20, 10,
150
+ 9, 19, 20,
151
+ 11, 21, 12,
152
+ 21, 22, 12,
153
+ 12, 23, 13,
154
+ 12, 22, 23,
155
+ 13, 23, 14,
156
+ 23, 24, 14,
157
+ 14, 25, 15,
158
+ 14, 24, 25,
159
+ 15, 25, 16,
160
+ 25, 26, 16,
161
+ 16, 27, 17,
162
+ 16, 26, 27,
163
+ 17, 27, 18,
164
+ 27, 28, 18,
165
+ 18, 29, 19,
166
+ 18, 28, 29,
167
+ 19, 29, 20,
168
+ 29, 30, 20,
169
+ 21, 32, 22,
170
+ 21, 31, 32,
171
+ 22, 32, 23,
172
+ 32, 33, 23,
173
+ 23, 34, 24,
174
+ 23, 33, 34,
175
+ 24, 34, 25,
176
+ 34, 35, 25,
177
+ 25, 36, 26,
178
+ 25, 35, 36,
179
+ 26, 36, 27,
180
+ 36, 37, 27,
181
+ 27, 38, 28,
182
+ 27, 37, 38,
183
+ 28, 38, 29,
184
+ 38, 39, 29,
185
+ 29, 40, 30,
186
+ 29, 39, 40,
187
+ 31, 41, 32,
188
+ 41, 42, 32,
189
+ 32, 43, 33,
190
+ 32, 42, 43,
191
+ 33, 43, 34,
192
+ 43, 44, 34,
193
+ 34, 45, 35,
194
+ 34, 44, 45,
195
+ 35, 45, 36,
196
+ 45, 46, 36,
197
+ 36, 47, 37,
198
+ 36, 46, 47,
199
+ 37, 47, 38,
200
+ 47, 48, 38,
201
+ 38, 49, 39,
202
+ 38, 48, 49,
203
+ 39, 49, 40,
204
+ 49, 50, 40,
205
+ 41, 52, 42,
206
+ 41, 51, 52,
207
+ 42, 52, 43,
208
+ 52, 53, 43,
209
+ 43, 54, 44,
210
+ 43, 53, 54,
211
+ 44, 54, 45,
212
+ 54, 55, 45,
213
+ 45, 56, 46,
214
+ 45, 55, 56,
215
+ 46, 56, 47,
216
+ 56, 57, 47,
217
+ 47, 58, 48,
218
+ 47, 57, 58,
219
+ 48, 58, 49,
220
+ 58, 59, 49,
221
+ 49, 60, 50,
222
+ 49, 59, 60,
223
+ 51, 61, 52,
224
+ 61, 62, 52,
225
+ 52, 63, 53,
226
+ 52, 62, 63,
227
+ 53, 63, 54,
228
+ 63, 64, 54,
229
+ 54, 65, 55,
230
+ 54, 64, 65,
231
+ 55, 65, 56,
232
+ 65, 66, 56,
233
+ 56, 67, 57,
234
+ 56, 66, 67,
235
+ 57, 67, 58,
236
+ 67, 68, 58,
237
+ 58, 69, 59,
238
+ 58, 68, 69,
239
+ 59, 69, 60,
240
+ 69, 70, 60,
241
+ 61, 72, 62,
242
+ 61, 71, 72,
243
+ 62, 72, 63,
244
+ 72, 73, 63,
245
+ 63, 74, 64,
246
+ 63, 73, 74,
247
+ 64, 74, 65,
248
+ 74, 75, 65,
249
+ 65, 76, 66,
250
+ 65, 75, 76,
251
+ 66, 76, 67,
252
+ 76, 77, 67,
253
+ 67, 78, 68,
254
+ 67, 77, 78,
255
+ 68, 78, 69,
256
+ 78, 79, 69,
257
+ 69, 80, 70,
258
+ 69, 79, 80,
259
+ 71, 81, 72,
260
+ 81, 82, 72,
261
+ 72, 83, 73,
262
+ 72, 82, 83,
263
+ 73, 83, 74,
264
+ 83, 84, 74,
265
+ 74, 85, 75,
266
+ 74, 84, 85,
267
+ 75, 85, 76,
268
+ 85, 86, 76,
269
+ 76, 87, 77,
270
+ 76, 86, 87,
271
+ 77, 87, 78,
272
+ 87, 88, 78,
273
+ 78, 89, 79,
274
+ 78, 88, 89,
275
+ 79, 89, 80,
276
+ 89, 90, 80,
277
+ 81, 92, 82,
278
+ 81, 91, 92,
279
+ 82, 92, 83,
280
+ 92, 93, 83,
281
+ 83, 94, 84,
282
+ 83, 93, 94,
283
+ 84, 94, 85,
284
+ 94, 95, 85,
285
+ 85, 96, 86,
286
+ 85, 95, 96,
287
+ 86, 96, 87,
288
+ 96, 97, 87,
289
+ 87, 98, 88,
290
+ 87, 97, 98,
291
+ 88, 98, 89,
292
+ 98, 99, 89,
293
+ 89, 100, 90,
294
+ 89, 99, 100
295
+ ]
296
+
297
+ # fmt: on
298
+ class VBDClothSim:
299
+ def __init__(self, device, use_cuda_graph=False):
300
+ self.frame_dt = 1 / 60
301
+ self.num_test_frames = 100
302
+ self.num_substeps = 10
303
+ self.iterations = 10
304
+ self.dt = self.frame_dt / self.num_substeps
305
+ self.device = device
306
+ self.use_cuda_graph = self.device.is_cuda and use_cuda_graph
307
+ self.builder = wp.sim.ModelBuilder()
308
+
309
+ def set_up_sagging_experiment(self):
310
+ stiffness = 1e5
311
+ kd = 1.0e-7
312
+
313
+ self.input_scale_factor = 1.0
314
+ self.renderer_scale_factor = 0.01
315
+ vertices = [wp.vec3(v) * self.input_scale_factor for v in CLOTH_POINTS]
316
+ faces_flatten = [fv - 1 for fv in CLOTH_FACES]
317
+
318
+ self.builder.add_cloth_mesh(
319
+ pos=wp.vec3(0.0, 200.0, 0.0),
320
+ rot=wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), 0.0),
321
+ scale=1.0,
322
+ vertices=vertices,
323
+ indices=faces_flatten,
324
+ vel=wp.vec3(0.0, 0.0, 0.0),
325
+ density=0.02,
326
+ tri_ke=stiffness,
327
+ tri_ka=stiffness,
328
+ tri_kd=kd,
329
+ )
330
+ self.fixed_particles = [0, 9]
331
+
332
+ def set_up_bending_experiment(self):
333
+ stretching_stiffness = 1e4
334
+ stretching_damping = 1e-6
335
+ bending_damping = 1e-3
336
+ # fmt: off
337
+ vs = [[-6.0, 0.0, -6.0], [-3.6, 0.0, -6.0], [-1.2, 0.0, -6.0], [1.2, 0.0, -6.0], [3.6, 0.0, -6.0], [6.0, 0.0, -6.0],
338
+ [-6.0, 0.0, -3.6], [-3.6, 0.0, -3.6], [-1.2, 0.0, -3.6], [1.2, 0.0, -3.6], [3.6, 0.0, -3.6], [6.0, 0.0, -3.6],
339
+ [-6.0, 0.0, -1.2], [-3.6, 0.0, -1.2], [-1.2, 0.0, -1.2], [1.2, 0.0, -1.2], [3.6, 0.0, -1.2], [6.0, 0.0, -1.2],
340
+ [-6.0, 0.0, 1.2], [-3.6, 0.0, 1.2], [-1.2, 0.0, 1.2], [1.2, 0.0, 1.2], [3.6, 0.0, 1.2], [6.0, 0.0, 1.2],
341
+ [-6.0, 0.0, 3.6], [-3.6, 0.0, 3.6], [-1.2, 0.0, 3.6], [1.2, 0.0, 3.6], [3.6, 0.0, 3.6], [6.0, 0.0, 3.6],
342
+ [-6.0, 0.0, 6.0], [-3.6, 0.0, 6.0], [-1.2, 0.0, 6.0], [1.2, 0.0, 6.0], [3.6, 0.0, 6.0], [6.0, 0.0, 6.0]]
343
+
344
+ fs = [0, 7, 1, 0, 6, 7, 1, 7, 2, 7, 8, 2, 2, 9, 3, 2, 8, 9, 3, 9, 4, 9, 10, 4, 4, 11, 5, 4, 10, 11, 6, 12, 7, 12, 13,
345
+ 7, 7, 14, 8, 7, 13, 14, 8, 14, 9, 14, 15, 9, 9, 16, 10, 9, 15, 16, 10, 16, 11, 16, 17, 11, 12, 19, 13, 12, 18,
346
+ 19, 13, 19, 14, 19, 20, 14, 14, 21, 15, 14, 20, 21, 15, 21, 16, 21, 22, 16, 16, 23, 17, 16, 22, 23, 18, 24, 19,
347
+ 24, 25, 19, 19, 26, 20, 19, 25, 26, 20, 26, 21, 26, 27, 21, 21, 28, 22, 21, 27, 28, 22, 28, 23, 28, 29, 23, 24,
348
+ 31, 25, 24, 30, 31, 25, 31, 26, 31, 32, 26, 26, 33, 27, 26, 32, 33, 27, 33, 28, 33, 34, 28, 28, 35, 29, 28, 34,
349
+ 35]
350
+ # fmt: on
351
+
352
+ vs = [wp.vec3(v) for v in vs]
353
+
354
+ self.builder.add_cloth_mesh(
355
+ pos=wp.vec3(0.0, 10.0, 0.0),
356
+ rot=wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), 0.0),
357
+ scale=1.0,
358
+ vertices=vs,
359
+ indices=fs,
360
+ vel=wp.vec3(0.0, 0.0, 0.0),
361
+ density=0.02,
362
+ tri_ke=stretching_stiffness,
363
+ tri_ka=stretching_stiffness,
364
+ tri_kd=stretching_damping,
365
+ edge_ke=10,
366
+ edge_kd=bending_damping,
367
+ )
368
+
369
+ self.builder.add_cloth_mesh(
370
+ pos=wp.vec3(15.0, 10.0, 0.0),
371
+ rot=wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), 0.0),
372
+ scale=1.0,
373
+ vertices=vs,
374
+ indices=fs,
375
+ vel=wp.vec3(0.0, 0.0, 0.0),
376
+ density=0.02,
377
+ tri_ke=stretching_stiffness,
378
+ tri_ka=stretching_stiffness,
379
+ tri_kd=stretching_damping,
380
+ edge_ke=100,
381
+ edge_kd=bending_damping,
382
+ )
383
+
384
+ self.builder.add_cloth_mesh(
385
+ pos=wp.vec3(30.0, 10.0, 0.0),
386
+ rot=wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), 0.0),
387
+ scale=1.0,
388
+ vertices=vs,
389
+ indices=fs,
390
+ vel=wp.vec3(0.0, 0.0, 0.0),
391
+ density=0.02,
392
+ tri_ke=stretching_stiffness,
393
+ tri_ka=stretching_stiffness,
394
+ tri_kd=stretching_damping,
395
+ edge_ke=1000,
396
+ edge_kd=bending_damping,
397
+ )
398
+
399
+ self.fixed_particles = [0, 29, 36, 65, 72, 101]
400
+
401
+ def set_up_non_zero_rest_angle_bending_experiment(self):
402
+ # fmt: off
403
+ vs = [
404
+ [ 0. , 10. , -10. ],
405
+ [ 0. , 10. , 10. ],
406
+ [ 7.07107, 7.07107, -10. ],
407
+ [ 7.07107, 7.07107, 10. ],
408
+ [ 10. , 0. , -10. ],
409
+ [ 10. , -0. , 10. ],
410
+ [ 7.07107, -7.07107, -10. ],
411
+ [ 7.07107, -7.07107, 10. ],
412
+ [ 0. , -10. , -10. ],
413
+ [ 0. , -10. , 10. ],
414
+ [ -7.07107, -7.07107, -10. ],
415
+ [ -7.07107, -7.07107, 10. ],
416
+ [-10. , 0. , -10. ],
417
+ [-10. , -0. , 10. ],
418
+ [ -7.07107, 7.07107, -10. ],
419
+ [ -7.07107, 7.07107, 10. ],
420
+ ]
421
+ fs = [
422
+ 1, 2, 0,
423
+ 3, 4, 2,
424
+ 5, 6, 4,
425
+ 7, 8, 6,
426
+ 9, 10, 8,
427
+ 11, 12, 10,
428
+ 3, 5, 4,
429
+ 13, 14, 12,
430
+ 15, 0, 14,
431
+ 1, 3, 2,
432
+ 5, 7, 6,
433
+ 7, 9, 8,
434
+ 9, 11, 10,
435
+ 11, 13, 12,
436
+ ]
437
+ # fmt: on
438
+
439
+ stretching_stiffness = 1e4
440
+ stretching_damping = 1e-6
441
+ edge_ke = 1000
442
+ bending_damping = 1e-2
443
+ vs = [wp.vec3(v) for v in vs]
444
+
445
+ self.builder.add_cloth_mesh(
446
+ pos=wp.vec3(0.0, 10.0, 0.0),
447
+ rot=wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), np.pi / 2),
448
+ scale=1.0,
449
+ vertices=vs,
450
+ indices=fs,
451
+ vel=wp.vec3(0.0, 0.0, 0.0),
452
+ density=0.02,
453
+ tri_ke=stretching_stiffness,
454
+ tri_ka=stretching_stiffness,
455
+ tri_kd=stretching_damping,
456
+ edge_ke=edge_ke,
457
+ edge_kd=bending_damping,
458
+ )
459
+ self.fixed_particles = [0, 1]
460
+
461
+ def finalize(self):
462
+ self.builder.color()
463
+
464
+ self.model = self.builder.finalize(device=self.device)
465
+ self.model.ground = True
466
+ self.model.gravity = wp.vec3(0, -1000.0, 0)
467
+ self.model.soft_contact_ke = 1.0e4
468
+ self.model.soft_contact_kd = 1.0e2
469
+
470
+ self.set_points_fixed(self.model, self.fixed_particles)
471
+
472
+ self.integrator = wp.sim.VBDIntegrator(self.model, self.iterations)
473
+ self.state0 = self.model.state()
474
+ self.state1 = self.model.state()
475
+
476
+ self.init_pos = np.array(self.state0.particle_q.numpy(), copy=True)
477
+
478
+ self.graph = None
479
+ if self.use_cuda_graph:
480
+ wp.load_module(device=self.device)
481
+ wp.set_module_options({"block_dim": 256}, warp.sim.integrator_vbd)
482
+ wp.load_module(warp.sim.integrator_vbd, device=self.device)
483
+ with wp.ScopedCapture(device=self.device, force_module_load=False) as capture:
484
+ self.simulate()
485
+ self.graph = capture.graph
486
+
487
+ def simulate(self):
488
+ for _step in range(self.num_substeps * self.num_test_frames):
489
+ self.integrator.simulate(self.model, self.state0, self.state1, self.dt, None)
490
+ (self.state0, self.state1) = (self.state1, self.state0)
491
+
492
+ def run(self):
493
+ if self.graph:
494
+ wp.capture_launch(self.graph)
495
+ else:
496
+ self.simulate()
497
+
498
+ def set_points_fixed(self, model, fixed_particles):
499
+ if len(fixed_particles):
500
+ flags = model.particle_flags.numpy()
501
+ for fixed_v_id in fixed_particles:
502
+ flags[fixed_v_id] = wp.uint32(int(flags[fixed_v_id]) & ~int(PARTICLE_FLAG_ACTIVE))
503
+
504
+ model.particle_flags = wp.array(flags, device=model.device)
505
+
506
+
507
+ def test_vbd_cloth(test, device):
508
+ with contextlib.redirect_stdout(io.StringIO()) as f:
509
+ example = VBDClothSim(device)
510
+ example.set_up_bending_experiment()
511
+ example.finalize()
512
+ example.model.ground = False
513
+
514
+ test.assertRegex(
515
+ f.getvalue(),
516
+ r"Warp UserWarning: The graph is not optimizable anymore, terminated with a max/min ratio: 2.0 without reaching the target ratio: 1.1",
517
+ )
518
+
519
+ example.run()
520
+
521
+ # examine that the simulation does not explode
522
+ final_pos = example.state0.particle_q.numpy()
523
+ test.assertTrue((final_pos < 1e5).all())
524
+ # examine that the simulation have moved
525
+ test.assertTrue((example.init_pos != final_pos).any())
526
+
527
+
528
+ def test_vbd_cloth_cuda_graph(test, device):
529
+ with contextlib.redirect_stdout(io.StringIO()) as f:
530
+ example = VBDClothSim(device, use_cuda_graph=True)
531
+ example.set_up_sagging_experiment()
532
+ example.finalize()
533
+
534
+ test.assertRegex(
535
+ f.getvalue(),
536
+ r"Warp UserWarning: The graph is not optimizable anymore, terminated with a max/min ratio: 2.0 without reaching the target ratio: 1.1",
537
+ )
538
+
539
+ example.run()
540
+
541
+ # examine that the simulation does not explode
542
+ final_pos = example.state0.particle_q.numpy()
543
+ test.assertTrue((final_pos < 1e5).all())
544
+ # examine that the simulation have moved
545
+ test.assertTrue((example.init_pos != final_pos).any())
546
+
547
+
548
+ def test_vbd_bending(test, device):
549
+ example = VBDClothSim(device, use_cuda_graph=True)
550
+ example.set_up_bending_experiment()
551
+ example.finalize()
552
+
553
+ example.run()
554
+
555
+ # examine that the simulation does not explode
556
+ final_pos = example.state0.particle_q.numpy()
557
+ test.assertTrue((final_pos < 1e5).all())
558
+ # examine that the simulation have moved
559
+ test.assertTrue((example.init_pos != final_pos).any())
560
+
561
+
562
+ def test_vbd_bending_non_zero_rest_angle_bending(test, device):
563
+ example = VBDClothSim(device, use_cuda_graph=True)
564
+ example.set_up_non_zero_rest_angle_bending_experiment()
565
+ example.finalize()
566
+ example.run()
567
+
568
+ # examine that the simulation does not explode
569
+ final_pos = example.state0.particle_q.numpy()
570
+ test.assertTrue((final_pos < 1e5).all())
571
+ # examine that the simulation have moved
572
+ test.assertTrue((example.init_pos != final_pos).any())
573
+
574
+
575
+ devices = get_test_devices()
576
+ cuda_devices = get_selected_cuda_test_devices()
577
+
578
+
579
+ class TestVbd(unittest.TestCase):
580
+ pass
581
+
582
+
583
+ add_function_test(TestVbd, "test_vbd_cloth", test_vbd_cloth, devices=devices)
584
+ add_function_test(TestVbd, "test_vbd_cloth_cuda_graph", test_vbd_cloth_cuda_graph, devices=cuda_devices)
585
+ add_function_test(TestVbd, "test_vbd_bending", test_vbd_bending, devices=devices, check_output=False)
586
+ add_function_test(
587
+ TestVbd,
588
+ "test_vbd_bending_non_zero_rest_angle_bending",
589
+ test_vbd_bending_non_zero_rest_angle_bending,
590
+ devices=devices,
591
+ check_output=False,
592
+ )
593
+
594
+
595
+ if __name__ == "__main__":
596
+ wp.clear_kernel_cache()
597
+ unittest.main(verbosity=2)
warp/tests/test_adam.py CHANGED
@@ -1,9 +1,17 @@
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.
1
+ # SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
7
15
 
8
16
  import unittest
9
17
 
@@ -1,9 +1,17 @@
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.
1
+ # SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
7
15
 
8
16
  import unittest
9
17
 
warp/tests/test_array.py CHANGED
@@ -1,9 +1,17 @@
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.
1
+ # SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
7
15
 
8
16
  import unittest
9
17
  from typing import Any
@@ -1,9 +1,17 @@
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.
1
+ # SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
7
15
 
8
16
  import unittest
9
17