warp-lang 1.6.2__py3-none-macosx_10_13_universal2.whl → 1.7.1__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 (191) hide show
  1. warp/__init__.py +7 -1
  2. warp/autograd.py +12 -2
  3. warp/bin/libwarp-clang.dylib +0 -0
  4. warp/bin/libwarp.dylib +0 -0
  5. warp/build.py +410 -0
  6. warp/build_dll.py +6 -14
  7. warp/builtins.py +463 -372
  8. warp/codegen.py +196 -124
  9. warp/config.py +42 -6
  10. warp/context.py +496 -271
  11. warp/dlpack.py +8 -6
  12. warp/examples/assets/nonuniform.usd +0 -0
  13. warp/examples/assets/nvidia_logo.png +0 -0
  14. warp/examples/benchmarks/benchmark_cloth.py +1 -1
  15. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  16. warp/examples/core/example_sample_mesh.py +300 -0
  17. warp/examples/distributed/example_jacobi_mpi.py +507 -0
  18. warp/examples/fem/example_apic_fluid.py +1 -1
  19. warp/examples/fem/example_burgers.py +2 -2
  20. warp/examples/fem/example_deformed_geometry.py +1 -1
  21. warp/examples/fem/example_distortion_energy.py +1 -1
  22. warp/examples/fem/example_magnetostatics.py +6 -6
  23. warp/examples/fem/utils.py +9 -3
  24. warp/examples/interop/example_jax_callable.py +116 -0
  25. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  26. warp/examples/interop/example_jax_kernel.py +205 -0
  27. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  28. warp/examples/tile/example_tile_matmul.py +2 -4
  29. warp/fem/__init__.py +11 -1
  30. warp/fem/adaptivity.py +4 -4
  31. warp/fem/field/field.py +11 -1
  32. warp/fem/field/nodal_field.py +56 -88
  33. warp/fem/field/virtual.py +62 -23
  34. warp/fem/geometry/adaptive_nanogrid.py +16 -13
  35. warp/fem/geometry/closest_point.py +1 -1
  36. warp/fem/geometry/deformed_geometry.py +5 -2
  37. warp/fem/geometry/geometry.py +5 -0
  38. warp/fem/geometry/grid_2d.py +12 -12
  39. warp/fem/geometry/grid_3d.py +12 -15
  40. warp/fem/geometry/hexmesh.py +5 -7
  41. warp/fem/geometry/nanogrid.py +9 -11
  42. warp/fem/geometry/quadmesh.py +13 -13
  43. warp/fem/geometry/tetmesh.py +3 -4
  44. warp/fem/geometry/trimesh.py +7 -20
  45. warp/fem/integrate.py +262 -93
  46. warp/fem/linalg.py +5 -5
  47. warp/fem/quadrature/pic_quadrature.py +37 -22
  48. warp/fem/quadrature/quadrature.py +194 -25
  49. warp/fem/space/__init__.py +1 -1
  50. warp/fem/space/basis_function_space.py +4 -2
  51. warp/fem/space/basis_space.py +25 -18
  52. warp/fem/space/hexmesh_function_space.py +2 -2
  53. warp/fem/space/partition.py +6 -2
  54. warp/fem/space/quadmesh_function_space.py +8 -8
  55. warp/fem/space/shape/cube_shape_function.py +23 -23
  56. warp/fem/space/shape/square_shape_function.py +12 -12
  57. warp/fem/space/shape/triangle_shape_function.py +1 -1
  58. warp/fem/space/tetmesh_function_space.py +3 -3
  59. warp/fem/space/trimesh_function_space.py +2 -2
  60. warp/fem/utils.py +12 -6
  61. warp/jax.py +14 -1
  62. warp/jax_experimental/__init__.py +16 -0
  63. warp/{jax_experimental.py → jax_experimental/custom_call.py} +28 -29
  64. warp/jax_experimental/ffi.py +702 -0
  65. warp/jax_experimental/xla_ffi.py +602 -0
  66. warp/math.py +89 -0
  67. warp/native/array.h +13 -0
  68. warp/native/builtin.h +29 -3
  69. warp/native/bvh.cpp +3 -1
  70. warp/native/bvh.cu +42 -14
  71. warp/native/bvh.h +2 -1
  72. warp/native/clang/clang.cpp +30 -3
  73. warp/native/cuda_util.cpp +14 -0
  74. warp/native/cuda_util.h +2 -0
  75. warp/native/exports.h +68 -63
  76. warp/native/intersect.h +26 -26
  77. warp/native/intersect_adj.h +33 -33
  78. warp/native/marching.cu +1 -1
  79. warp/native/mat.h +513 -9
  80. warp/native/mesh.h +10 -10
  81. warp/native/quat.h +99 -11
  82. warp/native/rand.h +6 -0
  83. warp/native/sort.cpp +122 -59
  84. warp/native/sort.cu +152 -15
  85. warp/native/sort.h +8 -1
  86. warp/native/sparse.cpp +43 -22
  87. warp/native/sparse.cu +52 -17
  88. warp/native/svd.h +116 -0
  89. warp/native/tile.h +312 -116
  90. warp/native/tile_reduce.h +46 -3
  91. warp/native/vec.h +68 -7
  92. warp/native/volume.cpp +85 -113
  93. warp/native/volume_builder.cu +25 -10
  94. warp/native/volume_builder.h +6 -0
  95. warp/native/warp.cpp +5 -6
  96. warp/native/warp.cu +100 -11
  97. warp/native/warp.h +19 -10
  98. warp/optim/linear.py +10 -10
  99. warp/render/render_opengl.py +19 -17
  100. warp/render/render_usd.py +93 -3
  101. warp/sim/articulation.py +4 -4
  102. warp/sim/collide.py +32 -19
  103. warp/sim/import_mjcf.py +449 -155
  104. warp/sim/import_urdf.py +32 -12
  105. warp/sim/inertia.py +189 -156
  106. warp/sim/integrator_euler.py +8 -5
  107. warp/sim/integrator_featherstone.py +3 -10
  108. warp/sim/integrator_vbd.py +207 -2
  109. warp/sim/integrator_xpbd.py +8 -5
  110. warp/sim/model.py +71 -25
  111. warp/sim/render.py +4 -0
  112. warp/sim/utils.py +2 -2
  113. warp/sparse.py +642 -555
  114. warp/stubs.py +217 -20
  115. warp/tests/__main__.py +0 -15
  116. warp/tests/assets/torus.usda +1 -1
  117. warp/tests/cuda/__init__.py +0 -0
  118. warp/tests/{test_mempool.py → cuda/test_mempool.py} +39 -0
  119. warp/tests/{test_streams.py → cuda/test_streams.py} +71 -0
  120. warp/tests/geometry/__init__.py +0 -0
  121. warp/tests/{test_mesh_query_point.py → geometry/test_mesh_query_point.py} +66 -63
  122. warp/tests/{test_mesh_query_ray.py → geometry/test_mesh_query_ray.py} +1 -1
  123. warp/tests/{test_volume.py → geometry/test_volume.py} +41 -6
  124. warp/tests/interop/__init__.py +0 -0
  125. warp/tests/{test_dlpack.py → interop/test_dlpack.py} +28 -5
  126. warp/tests/sim/__init__.py +0 -0
  127. warp/tests/{disabled_kinematics.py → sim/disabled_kinematics.py} +9 -10
  128. warp/tests/{test_collision.py → sim/test_collision.py} +236 -205
  129. warp/tests/sim/test_inertia.py +161 -0
  130. warp/tests/{test_model.py → sim/test_model.py} +40 -0
  131. warp/tests/{flaky_test_sim_grad.py → sim/test_sim_grad.py} +4 -0
  132. warp/tests/{test_sim_kinematics.py → sim/test_sim_kinematics.py} +2 -1
  133. warp/tests/sim/test_vbd.py +597 -0
  134. warp/tests/sim/test_xpbd.py +399 -0
  135. warp/tests/test_bool.py +1 -1
  136. warp/tests/test_codegen.py +24 -3
  137. warp/tests/test_examples.py +40 -38
  138. warp/tests/test_fem.py +98 -14
  139. warp/tests/test_linear_solvers.py +0 -11
  140. warp/tests/test_mat.py +577 -156
  141. warp/tests/test_mat_scalar_ops.py +4 -4
  142. warp/tests/test_overwrite.py +0 -60
  143. warp/tests/test_quat.py +356 -151
  144. warp/tests/test_rand.py +44 -37
  145. warp/tests/test_sparse.py +47 -6
  146. warp/tests/test_spatial.py +75 -0
  147. warp/tests/test_static.py +1 -1
  148. warp/tests/test_utils.py +84 -4
  149. warp/tests/test_vec.py +336 -178
  150. warp/tests/tile/__init__.py +0 -0
  151. warp/tests/{test_tile.py → tile/test_tile.py} +136 -51
  152. warp/tests/{test_tile_load.py → tile/test_tile_load.py} +98 -1
  153. warp/tests/{test_tile_mathdx.py → tile/test_tile_mathdx.py} +9 -6
  154. warp/tests/{test_tile_mlp.py → tile/test_tile_mlp.py} +25 -14
  155. warp/tests/{test_tile_reduce.py → tile/test_tile_reduce.py} +60 -1
  156. warp/tests/{test_tile_view.py → tile/test_tile_view.py} +1 -1
  157. warp/tests/unittest_serial.py +1 -0
  158. warp/tests/unittest_suites.py +45 -62
  159. warp/tests/unittest_utils.py +2 -1
  160. warp/thirdparty/unittest_parallel.py +3 -1
  161. warp/types.py +175 -666
  162. warp/utils.py +137 -72
  163. {warp_lang-1.6.2.dist-info → warp_lang-1.7.1.dist-info}/METADATA +46 -12
  164. {warp_lang-1.6.2.dist-info → warp_lang-1.7.1.dist-info}/RECORD +184 -171
  165. {warp_lang-1.6.2.dist-info → warp_lang-1.7.1.dist-info}/WHEEL +1 -1
  166. {warp_lang-1.6.2.dist-info → warp_lang-1.7.1.dist-info/licenses}/LICENSE.md +0 -26
  167. warp/examples/optim/example_walker.py +0 -317
  168. warp/native/cutlass_gemm.cpp +0 -43
  169. warp/native/cutlass_gemm.cu +0 -382
  170. warp/tests/test_matmul.py +0 -511
  171. warp/tests/test_matmul_lite.py +0 -411
  172. warp/tests/test_vbd.py +0 -386
  173. warp/tests/unused_test_misc.py +0 -77
  174. /warp/tests/{test_async.py → cuda/test_async.py} +0 -0
  175. /warp/tests/{test_ipc.py → cuda/test_ipc.py} +0 -0
  176. /warp/tests/{test_multigpu.py → cuda/test_multigpu.py} +0 -0
  177. /warp/tests/{test_peer.py → cuda/test_peer.py} +0 -0
  178. /warp/tests/{test_pinned.py → cuda/test_pinned.py} +0 -0
  179. /warp/tests/{test_bvh.py → geometry/test_bvh.py} +0 -0
  180. /warp/tests/{test_hash_grid.py → geometry/test_hash_grid.py} +0 -0
  181. /warp/tests/{test_marching_cubes.py → geometry/test_marching_cubes.py} +0 -0
  182. /warp/tests/{test_mesh.py → geometry/test_mesh.py} +0 -0
  183. /warp/tests/{test_mesh_query_aabb.py → geometry/test_mesh_query_aabb.py} +0 -0
  184. /warp/tests/{test_volume_write.py → geometry/test_volume_write.py} +0 -0
  185. /warp/tests/{test_jax.py → interop/test_jax.py} +0 -0
  186. /warp/tests/{test_paddle.py → interop/test_paddle.py} +0 -0
  187. /warp/tests/{test_torch.py → interop/test_torch.py} +0 -0
  188. /warp/tests/{test_coloring.py → sim/test_coloring.py} +0 -0
  189. /warp/tests/{test_sim_grad_bounce_linear.py → sim/test_sim_grad_bounce_linear.py} +0 -0
  190. /warp/tests/{test_tile_shared_memory.py → tile/test_tile_shared_memory.py} +0 -0
  191. {warp_lang-1.6.2.dist-info → warp_lang-1.7.1.dist-info}/top_level.txt +0 -0
warp/tests/test_vbd.py DELETED
@@ -1,386 +0,0 @@
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
- from warp.sim.model import (
24
- PARTICLE_FLAG_ACTIVE,
25
- )
26
- from warp.tests.unittest_utils import *
27
-
28
-
29
- class VBDClothSim:
30
- def __init__(self, device):
31
- # fmt: off
32
- self.pts = [
33
- (-50.0000000, 0.0000000, -50.0000000),
34
- (-38.8888893, 11.1111107, -50.0000000),
35
- (-27.7777786, 22.2222214, -50.0000000),
36
- (-16.6666679, 33.3333321, -50.0000000),
37
- (-5.5555558, 44.4444427, -50.0000000),
38
- (5.5555558, 55.5555573, -50.0000000),
39
- (16.6666679, 66.6666641, -50.0000000),
40
- (27.7777786, 77.7777786, -50.0000000),
41
- (38.8888893, 88.8888855, -50.0000000),
42
- (50.0000000, 100.0000000, -50.0000000),
43
- (-50.0000000, 0.0000000, -38.8888893),
44
- (-38.8888893, 11.1111107, -38.8888893),
45
- (-27.7777786, 22.2222214, -38.8888893),
46
- (-16.6666679, 33.3333321, -38.8888893),
47
- (-5.5555558, 44.4444427, -38.8888893),
48
- (5.5555558, 55.5555573, -38.8888893),
49
- (16.6666679, 66.6666641, -38.8888893),
50
- (27.7777786, 77.7777786, -38.8888893),
51
- (38.8888893, 88.8888855, -38.8888893),
52
- (50.0000000, 100.0000000, -38.8888893),
53
- (-50.0000000, 0.0000000, -27.7777786),
54
- (-38.8888893, 11.1111107, -27.7777786),
55
- (-27.7777786, 22.2222214, -27.7777786),
56
- (-16.6666679, 33.3333321, -27.7777786),
57
- (-5.5555558, 44.4444427, -27.7777786),
58
- (5.5555558, 55.5555573, -27.7777786),
59
- (16.6666679, 66.6666641, -27.7777786),
60
- (27.7777786, 77.7777786, -27.7777786),
61
- (38.8888893, 88.8888855, -27.7777786),
62
- (50.0000000, 100.0000000, -27.7777786),
63
- (-50.0000000, 0.0000000, -16.6666679),
64
- (-38.8888893, 11.1111107, -16.6666679),
65
- (-27.7777786, 22.2222214, -16.6666679),
66
- (-16.6666679, 33.3333321, -16.6666679),
67
- (-5.5555558, 44.4444427, -16.6666679),
68
- (5.5555558, 55.5555573, -16.6666679),
69
- (16.6666679, 66.6666641, -16.6666679),
70
- (27.7777786, 77.7777786, -16.6666679),
71
- (38.8888893, 88.8888855, -16.6666679),
72
- (50.0000000, 100.0000000, -16.6666679),
73
- (-50.0000000, 0.0000000, -5.5555558),
74
- (-38.8888893, 11.1111107, -5.5555558),
75
- (-27.7777786, 22.2222214, -5.5555558),
76
- (-16.6666679, 33.3333321, -5.5555558),
77
- (-5.5555558, 44.4444427, -5.5555558),
78
- (5.5555558, 55.5555573, -5.5555558),
79
- (16.6666679, 66.6666641, -5.5555558),
80
- (27.7777786, 77.7777786, -5.5555558),
81
- (38.8888893, 88.8888855, -5.5555558),
82
- (50.0000000, 100.0000000, -5.5555558),
83
- (-50.0000000, 0.0000000, 5.5555558),
84
- (-38.8888893, 11.1111107, 5.5555558),
85
- (-27.7777786, 22.2222214, 5.5555558),
86
- (-16.6666679, 33.3333321, 5.5555558),
87
- (-5.5555558, 44.4444427, 5.5555558),
88
- (5.5555558, 55.5555573, 5.5555558),
89
- (16.6666679, 66.6666641, 5.5555558),
90
- (27.7777786, 77.7777786, 5.5555558),
91
- (38.8888893, 88.8888855, 5.5555558),
92
- (50.0000000, 100.0000000, 5.5555558),
93
- (-50.0000000, 0.0000000, 16.6666679),
94
- (-38.8888893, 11.1111107, 16.6666679),
95
- (-27.7777786, 22.2222214, 16.6666679),
96
- (-16.6666679, 33.3333321, 16.6666679),
97
- (-5.5555558, 44.4444427, 16.6666679),
98
- (5.5555558, 55.5555573, 16.6666679),
99
- (16.6666679, 66.6666641, 16.6666679),
100
- (27.7777786, 77.7777786, 16.6666679),
101
- (38.8888893, 88.8888855, 16.6666679),
102
- (50.0000000, 100.0000000, 16.6666679),
103
- (-50.0000000, 0.0000000, 27.7777786),
104
- (-38.8888893, 11.1111107, 27.7777786),
105
- (-27.7777786, 22.2222214, 27.7777786),
106
- (-16.6666679, 33.3333321, 27.7777786),
107
- (-5.5555558, 44.4444427, 27.7777786),
108
- (5.5555558, 55.5555573, 27.7777786),
109
- (16.6666679, 66.6666641, 27.7777786),
110
- (27.7777786, 77.7777786, 27.7777786),
111
- (38.8888893, 88.8888855, 27.7777786),
112
- (50.0000000, 100.0000000, 27.7777786),
113
- (-50.0000000, 0.0000000, 38.8888893),
114
- (-38.8888893, 11.1111107, 38.8888893),
115
- (-27.7777786, 22.2222214, 38.8888893),
116
- (-16.6666679, 33.3333321, 38.8888893),
117
- (-5.5555558, 44.4444427, 38.8888893),
118
- (5.5555558, 55.5555573, 38.8888893),
119
- (16.6666679, 66.6666641, 38.8888893),
120
- (27.7777786, 77.7777786, 38.8888893),
121
- (38.8888893, 88.8888855, 38.8888893),
122
- (50.0000000, 100.0000000, 38.8888893),
123
- (-50.0000000, 0.0000000, 50.0000000),
124
- (-38.8888893, 11.1111107, 50.0000000),
125
- (-27.7777786, 22.2222214, 50.0000000),
126
- (-16.6666679, 33.3333321, 50.0000000),
127
- (-5.5555558, 44.4444427, 50.0000000),
128
- (5.5555558, 55.5555573, 50.0000000),
129
- (16.6666679, 66.6666641, 50.0000000),
130
- (27.7777786, 77.7777786, 50.0000000),
131
- (38.8888893, 88.8888855, 50.0000000),
132
- (50.0000000, 100.0000000, 50.0000000),
133
- ]
134
-
135
- self.faces = [
136
- 1, 12, 2,
137
- 1, 11, 12,
138
- 2, 12, 3,
139
- 12, 13, 3,
140
- 3, 14, 4,
141
- 3, 13, 14,
142
- 4, 14, 5,
143
- 14, 15, 5,
144
- 5, 16, 6,
145
- 5, 15, 16,
146
- 6, 16, 7,
147
- 16, 17, 7,
148
- 7, 18, 8,
149
- 7, 17, 18,
150
- 8, 18, 9,
151
- 18, 19, 9,
152
- 9, 20, 10,
153
- 9, 19, 20,
154
- 11, 21, 12,
155
- 21, 22, 12,
156
- 12, 23, 13,
157
- 12, 22, 23,
158
- 13, 23, 14,
159
- 23, 24, 14,
160
- 14, 25, 15,
161
- 14, 24, 25,
162
- 15, 25, 16,
163
- 25, 26, 16,
164
- 16, 27, 17,
165
- 16, 26, 27,
166
- 17, 27, 18,
167
- 27, 28, 18,
168
- 18, 29, 19,
169
- 18, 28, 29,
170
- 19, 29, 20,
171
- 29, 30, 20,
172
- 21, 32, 22,
173
- 21, 31, 32,
174
- 22, 32, 23,
175
- 32, 33, 23,
176
- 23, 34, 24,
177
- 23, 33, 34,
178
- 24, 34, 25,
179
- 34, 35, 25,
180
- 25, 36, 26,
181
- 25, 35, 36,
182
- 26, 36, 27,
183
- 36, 37, 27,
184
- 27, 38, 28,
185
- 27, 37, 38,
186
- 28, 38, 29,
187
- 38, 39, 29,
188
- 29, 40, 30,
189
- 29, 39, 40,
190
- 31, 41, 32,
191
- 41, 42, 32,
192
- 32, 43, 33,
193
- 32, 42, 43,
194
- 33, 43, 34,
195
- 43, 44, 34,
196
- 34, 45, 35,
197
- 34, 44, 45,
198
- 35, 45, 36,
199
- 45, 46, 36,
200
- 36, 47, 37,
201
- 36, 46, 47,
202
- 37, 47, 38,
203
- 47, 48, 38,
204
- 38, 49, 39,
205
- 38, 48, 49,
206
- 39, 49, 40,
207
- 49, 50, 40,
208
- 41, 52, 42,
209
- 41, 51, 52,
210
- 42, 52, 43,
211
- 52, 53, 43,
212
- 43, 54, 44,
213
- 43, 53, 54,
214
- 44, 54, 45,
215
- 54, 55, 45,
216
- 45, 56, 46,
217
- 45, 55, 56,
218
- 46, 56, 47,
219
- 56, 57, 47,
220
- 47, 58, 48,
221
- 47, 57, 58,
222
- 48, 58, 49,
223
- 58, 59, 49,
224
- 49, 60, 50,
225
- 49, 59, 60,
226
- 51, 61, 52,
227
- 61, 62, 52,
228
- 52, 63, 53,
229
- 52, 62, 63,
230
- 53, 63, 54,
231
- 63, 64, 54,
232
- 54, 65, 55,
233
- 54, 64, 65,
234
- 55, 65, 56,
235
- 65, 66, 56,
236
- 56, 67, 57,
237
- 56, 66, 67,
238
- 57, 67, 58,
239
- 67, 68, 58,
240
- 58, 69, 59,
241
- 58, 68, 69,
242
- 59, 69, 60,
243
- 69, 70, 60,
244
- 61, 72, 62,
245
- 61, 71, 72,
246
- 62, 72, 63,
247
- 72, 73, 63,
248
- 63, 74, 64,
249
- 63, 73, 74,
250
- 64, 74, 65,
251
- 74, 75, 65,
252
- 65, 76, 66,
253
- 65, 75, 76,
254
- 66, 76, 67,
255
- 76, 77, 67,
256
- 67, 78, 68,
257
- 67, 77, 78,
258
- 68, 78, 69,
259
- 78, 79, 69,
260
- 69, 80, 70,
261
- 69, 79, 80,
262
- 71, 81, 72,
263
- 81, 82, 72,
264
- 72, 83, 73,
265
- 72, 82, 83,
266
- 73, 83, 74,
267
- 83, 84, 74,
268
- 74, 85, 75,
269
- 74, 84, 85,
270
- 75, 85, 76,
271
- 85, 86, 76,
272
- 76, 87, 77,
273
- 76, 86, 87,
274
- 77, 87, 78,
275
- 87, 88, 78,
276
- 78, 89, 79,
277
- 78, 88, 89,
278
- 79, 89, 80,
279
- 89, 90, 80,
280
- 81, 92, 82,
281
- 81, 91, 92,
282
- 82, 92, 83,
283
- 92, 93, 83,
284
- 83, 94, 84,
285
- 83, 93, 94,
286
- 84, 94, 85,
287
- 94, 95, 85,
288
- 85, 96, 86,
289
- 85, 95, 96,
290
- 86, 96, 87,
291
- 96, 97, 87,
292
- 87, 98, 88,
293
- 87, 97, 98,
294
- 88, 98, 89,
295
- 98, 99, 89,
296
- 89, 100, 90,
297
- 89, 99, 100
298
- ]
299
-
300
- # fmt: on
301
-
302
- self.dt = 1 / 60
303
- self.num_test_frames = 100
304
- self.num_substeps = 10
305
- self.iterations = 10
306
-
307
- stiffness = 1e5
308
- kd = 1.0e-7
309
-
310
- self.input_scale_factor = 1.0
311
- self.renderer_scale_factor = 0.01
312
- vertices = [wp.vec3(v) * self.input_scale_factor for v in self.pts]
313
- fs_flatten = [fv - 1 for fv in self.faces]
314
-
315
- builder = wp.sim.ModelBuilder()
316
- builder.add_cloth_mesh(
317
- pos=wp.vec3(0.0, 200.0, 0.0),
318
- rot=wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), 0.0),
319
- scale=1.0,
320
- vertices=vertices,
321
- indices=fs_flatten,
322
- vel=wp.vec3(0.0, 0.0, 0.0),
323
- density=0.02,
324
- tri_ke=stiffness,
325
- tri_ka=stiffness,
326
- tri_kd=kd,
327
- )
328
- builder.color()
329
-
330
- self.model = builder.finalize(device=device)
331
- self.model.ground = True
332
- self.model.gravity = wp.vec3(0, -1000.0, 0)
333
-
334
- self.model.soft_contact_ke = 1.0e4
335
- self.model.soft_contact_kd = 1.0e2
336
-
337
- self.dt = self.dt / self.num_substeps
338
- self.fixed_particles = [0, 9]
339
-
340
- self.set_points_fixed(self.model, self.fixed_particles)
341
-
342
- self.integrator = wp.sim.VBDIntegrator(self.model, self.iterations)
343
- self.state0 = self.model.state()
344
- self.state1 = self.model.state()
345
-
346
- self.init_pos = np.array(self.state0.particle_q.numpy(), copy=True)
347
-
348
- def run(self, test):
349
- for _step in range(self.num_substeps * self.num_test_frames):
350
- self.integrator.simulate(self.model, self.state0, self.state1, self.dt, None)
351
- (self.state0, self.state1) = (self.state1, self.state0)
352
-
353
- # examine that the simulation does not explode
354
- final_pos = self.state0.particle_q.numpy()
355
- test.assertTrue((final_pos < 1e5).all())
356
- # examine that the simulation have moved
357
- test.assertTrue((self.init_pos != final_pos).any())
358
-
359
- def set_points_fixed(self, model, fixed_particles):
360
- if len(fixed_particles):
361
- flags = model.particle_flags.numpy()
362
- for fixed_v_id in fixed_particles:
363
- flags[fixed_v_id] = wp.uint32(int(flags[fixed_v_id]) & ~int(PARTICLE_FLAG_ACTIVE))
364
-
365
- model.particle_flags = wp.array(flags, device=model.device)
366
-
367
-
368
- devices = get_test_devices()
369
-
370
-
371
- class TestVBD(unittest.TestCase):
372
- def test_vbd_cloth(self):
373
- for device in devices:
374
- with contextlib.redirect_stdout(io.StringIO()) as f:
375
- example = VBDClothSim(device)
376
- self.assertRegex(
377
- f.getvalue(),
378
- r"Warp UserWarning: The graph is not optimizable anymore, terminated with a max/min ratio: 2.0 without reaching the target ratio: 1.1",
379
- )
380
-
381
- example.run(self)
382
-
383
-
384
- if __name__ == "__main__":
385
- wp.clear_kernel_cache()
386
- unittest.main(verbosity=2)
@@ -1,77 +0,0 @@
1
- # SPDX-FileCopyrightText: Copyright (c) 2021 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 numpy as np
17
-
18
- import warp as wp
19
-
20
-
21
- @wp.kernel
22
- def arange(out: wp.array(dtype=int)):
23
- tid = wp.tid()
24
- out[tid] = tid
25
-
26
-
27
- device = "cuda:0"
28
- cmds = []
29
-
30
- n = 10
31
- arrays = []
32
-
33
- for _i in range(5):
34
- arrays.append(wp.zeros(n, dtype=int, device=device))
35
-
36
- # setup CUDA graph
37
- wp.capture_begin()
38
-
39
- # launch kernels and keep command object around
40
- for i in range(5):
41
- cmd = wp.launch(arange, dim=n, inputs=[arrays[i]], device=device, record_cmd=True)
42
- cmds.append(cmd)
43
-
44
- graph = wp.capture_end()
45
-
46
- # ---------------------------------------
47
-
48
- ref = np.arange(0, n, dtype=int)
49
- wp.capture_launch(graph)
50
-
51
- for i in range(5):
52
- print(arrays[i].numpy())
53
-
54
-
55
- # ---------------------------------------
56
-
57
- n = 16
58
- arrays = []
59
-
60
- for _i in range(5):
61
- arrays.append(wp.zeros(n, dtype=int, device=device))
62
-
63
- # update graph params
64
- for i in range(5):
65
- cmd.set_dim(n)
66
- cmd.set_param(arrays[i])
67
-
68
- cmd.update_graph()
69
-
70
-
71
- wp.capture_launch(graph)
72
- wp.synchronize()
73
-
74
- ref = np.arange(0, n, dtype=int)
75
-
76
- for i in range(5):
77
- print(arrays[i].numpy())
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes