warp-lang 1.0.2__py3-none-manylinux2014_x86_64.whl → 1.2.0__py3-none-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of warp-lang might be problematic. Click here for more details.
- warp/__init__.py +108 -97
- warp/__init__.pyi +1 -1
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +88 -113
- warp/build_dll.py +383 -375
- warp/builtins.py +3693 -3354
- warp/codegen.py +2925 -2792
- warp/config.py +40 -36
- warp/constants.py +49 -45
- warp/context.py +5409 -5102
- warp/dlpack.py +442 -442
- warp/examples/__init__.py +16 -16
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cartpole.urdf +110 -110
- warp/examples/assets/crazyflie.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nv_ant.xml +92 -92
- warp/examples/assets/nv_humanoid.xml +183 -183
- warp/examples/assets/quadruped.urdf +267 -267
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +381 -383
- warp/examples/benchmarks/benchmark_cloth.py +278 -277
- warp/examples/benchmarks/benchmark_cloth_cupy.py +88 -88
- warp/examples/benchmarks/benchmark_cloth_jax.py +97 -100
- warp/examples/benchmarks/benchmark_cloth_numba.py +146 -142
- warp/examples/benchmarks/benchmark_cloth_numpy.py +77 -77
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +86 -86
- warp/examples/benchmarks/benchmark_cloth_taichi.py +112 -112
- warp/examples/benchmarks/benchmark_cloth_warp.py +145 -146
- warp/examples/benchmarks/benchmark_launches.py +293 -295
- warp/examples/browse.py +29 -29
- warp/examples/core/example_dem.py +232 -219
- warp/examples/core/example_fluid.py +291 -267
- warp/examples/core/example_graph_capture.py +142 -126
- warp/examples/core/example_marching_cubes.py +186 -174
- warp/examples/core/example_mesh.py +172 -155
- warp/examples/core/example_mesh_intersect.py +203 -193
- warp/examples/core/example_nvdb.py +174 -170
- warp/examples/core/example_raycast.py +103 -90
- warp/examples/core/example_raymarch.py +197 -178
- warp/examples/core/example_render_opengl.py +183 -141
- warp/examples/core/example_sph.py +403 -387
- warp/examples/core/example_torch.py +219 -181
- warp/examples/core/example_wave.py +261 -248
- warp/examples/fem/bsr_utils.py +378 -380
- warp/examples/fem/example_apic_fluid.py +432 -389
- warp/examples/fem/example_burgers.py +262 -0
- warp/examples/fem/example_convection_diffusion.py +180 -168
- warp/examples/fem/example_convection_diffusion_dg.py +217 -209
- warp/examples/fem/example_deformed_geometry.py +175 -159
- warp/examples/fem/example_diffusion.py +199 -173
- warp/examples/fem/example_diffusion_3d.py +178 -152
- warp/examples/fem/example_diffusion_mgpu.py +219 -214
- warp/examples/fem/example_mixed_elasticity.py +242 -222
- warp/examples/fem/example_navier_stokes.py +257 -243
- warp/examples/fem/example_stokes.py +218 -192
- warp/examples/fem/example_stokes_transfer.py +263 -249
- warp/examples/fem/mesh_utils.py +133 -109
- warp/examples/fem/plot_utils.py +292 -287
- warp/examples/optim/example_bounce.py +258 -246
- warp/examples/optim/example_cloth_throw.py +220 -209
- warp/examples/optim/example_diffray.py +564 -536
- warp/examples/optim/example_drone.py +862 -835
- warp/examples/optim/example_inverse_kinematics.py +174 -168
- warp/examples/optim/example_inverse_kinematics_torch.py +183 -169
- warp/examples/optim/example_spring_cage.py +237 -231
- warp/examples/optim/example_trajectory.py +221 -199
- warp/examples/optim/example_walker.py +304 -293
- warp/examples/sim/example_cartpole.py +137 -129
- warp/examples/sim/example_cloth.py +194 -186
- warp/examples/sim/example_granular.py +122 -111
- warp/examples/sim/example_granular_collision_sdf.py +195 -186
- warp/examples/sim/example_jacobian_ik.py +234 -214
- warp/examples/sim/example_particle_chain.py +116 -105
- warp/examples/sim/example_quadruped.py +191 -180
- warp/examples/sim/example_rigid_chain.py +195 -187
- warp/examples/sim/example_rigid_contact.py +187 -177
- warp/examples/sim/example_rigid_force.py +125 -125
- warp/examples/sim/example_rigid_gyroscopic.py +107 -95
- warp/examples/sim/example_rigid_soft_contact.py +132 -122
- warp/examples/sim/example_soft_body.py +188 -177
- warp/fabric.py +337 -335
- warp/fem/__init__.py +61 -27
- warp/fem/cache.py +403 -388
- warp/fem/dirichlet.py +178 -179
- warp/fem/domain.py +262 -263
- warp/fem/field/__init__.py +100 -101
- warp/fem/field/field.py +148 -149
- warp/fem/field/nodal_field.py +298 -299
- warp/fem/field/restriction.py +22 -21
- warp/fem/field/test.py +180 -181
- warp/fem/field/trial.py +183 -183
- warp/fem/geometry/__init__.py +16 -19
- warp/fem/geometry/closest_point.py +69 -70
- warp/fem/geometry/deformed_geometry.py +270 -271
- warp/fem/geometry/element.py +748 -744
- warp/fem/geometry/geometry.py +184 -186
- warp/fem/geometry/grid_2d.py +380 -373
- warp/fem/geometry/grid_3d.py +437 -435
- warp/fem/geometry/hexmesh.py +953 -953
- warp/fem/geometry/nanogrid.py +455 -0
- warp/fem/geometry/partition.py +374 -376
- warp/fem/geometry/quadmesh_2d.py +532 -532
- warp/fem/geometry/tetmesh.py +840 -840
- warp/fem/geometry/trimesh_2d.py +577 -577
- warp/fem/integrate.py +1684 -1615
- warp/fem/operator.py +190 -191
- warp/fem/polynomial.py +214 -213
- warp/fem/quadrature/__init__.py +2 -2
- warp/fem/quadrature/pic_quadrature.py +243 -245
- warp/fem/quadrature/quadrature.py +295 -294
- warp/fem/space/__init__.py +179 -292
- warp/fem/space/basis_space.py +522 -489
- warp/fem/space/collocated_function_space.py +100 -105
- warp/fem/space/dof_mapper.py +236 -236
- warp/fem/space/function_space.py +148 -145
- warp/fem/space/grid_2d_function_space.py +148 -267
- warp/fem/space/grid_3d_function_space.py +167 -306
- warp/fem/space/hexmesh_function_space.py +253 -352
- warp/fem/space/nanogrid_function_space.py +202 -0
- warp/fem/space/partition.py +350 -350
- warp/fem/space/quadmesh_2d_function_space.py +261 -369
- warp/fem/space/restriction.py +161 -160
- warp/fem/space/shape/__init__.py +90 -15
- warp/fem/space/shape/cube_shape_function.py +728 -738
- warp/fem/space/shape/shape_function.py +102 -103
- warp/fem/space/shape/square_shape_function.py +611 -611
- warp/fem/space/shape/tet_shape_function.py +565 -567
- warp/fem/space/shape/triangle_shape_function.py +429 -429
- warp/fem/space/tetmesh_function_space.py +224 -292
- warp/fem/space/topology.py +297 -295
- warp/fem/space/trimesh_2d_function_space.py +153 -221
- warp/fem/types.py +77 -77
- warp/fem/utils.py +495 -495
- warp/jax.py +166 -141
- warp/jax_experimental.py +341 -339
- warp/native/array.h +1081 -1025
- warp/native/builtin.h +1603 -1560
- warp/native/bvh.cpp +402 -398
- warp/native/bvh.cu +533 -525
- warp/native/bvh.h +430 -429
- warp/native/clang/clang.cpp +496 -464
- warp/native/crt.cpp +42 -32
- warp/native/crt.h +352 -335
- warp/native/cuda_crt.h +1049 -1049
- warp/native/cuda_util.cpp +549 -540
- warp/native/cuda_util.h +288 -203
- warp/native/cutlass_gemm.cpp +34 -34
- warp/native/cutlass_gemm.cu +372 -372
- warp/native/error.cpp +66 -66
- warp/native/error.h +27 -27
- warp/native/exports.h +187 -0
- warp/native/fabric.h +228 -228
- warp/native/hashgrid.cpp +301 -278
- warp/native/hashgrid.cu +78 -77
- warp/native/hashgrid.h +227 -227
- warp/native/initializer_array.h +32 -32
- warp/native/intersect.h +1204 -1204
- warp/native/intersect_adj.h +365 -365
- warp/native/intersect_tri.h +322 -322
- warp/native/marching.cpp +2 -2
- warp/native/marching.cu +497 -497
- warp/native/marching.h +2 -2
- warp/native/mat.h +1545 -1498
- warp/native/matnn.h +333 -333
- warp/native/mesh.cpp +203 -203
- warp/native/mesh.cu +292 -293
- warp/native/mesh.h +1887 -1887
- warp/native/nanovdb/GridHandle.h +366 -0
- warp/native/nanovdb/HostBuffer.h +590 -0
- warp/native/nanovdb/NanoVDB.h +6624 -4782
- warp/native/nanovdb/PNanoVDB.h +3390 -2553
- warp/native/noise.h +850 -850
- warp/native/quat.h +1112 -1085
- warp/native/rand.h +303 -299
- warp/native/range.h +108 -108
- warp/native/reduce.cpp +156 -156
- warp/native/reduce.cu +348 -348
- warp/native/runlength_encode.cpp +61 -61
- warp/native/runlength_encode.cu +46 -46
- warp/native/scan.cpp +30 -30
- warp/native/scan.cu +36 -36
- warp/native/scan.h +7 -7
- warp/native/solid_angle.h +442 -442
- warp/native/sort.cpp +94 -94
- warp/native/sort.cu +97 -97
- warp/native/sort.h +14 -14
- warp/native/sparse.cpp +337 -337
- warp/native/sparse.cu +544 -544
- warp/native/spatial.h +630 -630
- warp/native/svd.h +562 -562
- warp/native/temp_buffer.h +30 -30
- warp/native/vec.h +1177 -1133
- warp/native/volume.cpp +529 -297
- warp/native/volume.cu +58 -32
- warp/native/volume.h +960 -538
- warp/native/volume_builder.cu +446 -425
- warp/native/volume_builder.h +34 -19
- warp/native/volume_impl.h +61 -0
- warp/native/warp.cpp +1057 -1052
- warp/native/warp.cu +2949 -2828
- warp/native/warp.h +321 -305
- warp/optim/__init__.py +9 -9
- warp/optim/adam.py +120 -120
- warp/optim/linear.py +1104 -939
- warp/optim/sgd.py +104 -92
- warp/render/__init__.py +10 -10
- warp/render/render_opengl.py +3356 -3204
- warp/render/render_usd.py +768 -749
- warp/render/utils.py +152 -150
- warp/sim/__init__.py +52 -59
- warp/sim/articulation.py +685 -685
- warp/sim/collide.py +1594 -1590
- warp/sim/import_mjcf.py +489 -481
- warp/sim/import_snu.py +220 -221
- warp/sim/import_urdf.py +536 -516
- warp/sim/import_usd.py +887 -881
- warp/sim/inertia.py +316 -317
- warp/sim/integrator.py +234 -233
- warp/sim/integrator_euler.py +1956 -1956
- warp/sim/integrator_featherstone.py +1917 -1991
- warp/sim/integrator_xpbd.py +3288 -3312
- warp/sim/model.py +4473 -4314
- warp/sim/particles.py +113 -112
- warp/sim/render.py +417 -403
- warp/sim/utils.py +413 -410
- warp/sparse.py +1289 -1227
- warp/stubs.py +2192 -2469
- warp/tape.py +1162 -225
- warp/tests/__init__.py +1 -1
- warp/tests/__main__.py +4 -4
- warp/tests/assets/test_index_grid.nvdb +0 -0
- warp/tests/assets/torus.usda +105 -105
- warp/tests/aux_test_class_kernel.py +26 -26
- warp/tests/aux_test_compile_consts_dummy.py +10 -10
- warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -21
- warp/tests/aux_test_dependent.py +20 -22
- warp/tests/aux_test_grad_customs.py +21 -23
- warp/tests/aux_test_reference.py +9 -11
- warp/tests/aux_test_reference_reference.py +8 -10
- warp/tests/aux_test_square.py +15 -17
- warp/tests/aux_test_unresolved_func.py +14 -14
- warp/tests/aux_test_unresolved_symbol.py +14 -14
- warp/tests/disabled_kinematics.py +237 -239
- warp/tests/run_coverage_serial.py +31 -31
- warp/tests/test_adam.py +155 -157
- warp/tests/test_arithmetic.py +1088 -1124
- warp/tests/test_array.py +2415 -2326
- warp/tests/test_array_reduce.py +148 -150
- warp/tests/test_async.py +666 -656
- warp/tests/test_atomic.py +139 -141
- warp/tests/test_bool.py +212 -149
- warp/tests/test_builtins_resolution.py +1290 -1292
- warp/tests/test_bvh.py +162 -171
- warp/tests/test_closest_point_edge_edge.py +227 -228
- warp/tests/test_codegen.py +562 -553
- warp/tests/test_compile_consts.py +217 -101
- warp/tests/test_conditional.py +244 -246
- warp/tests/test_copy.py +230 -215
- warp/tests/test_ctypes.py +630 -632
- warp/tests/test_dense.py +65 -67
- warp/tests/test_devices.py +89 -98
- warp/tests/test_dlpack.py +528 -529
- warp/tests/test_examples.py +403 -378
- warp/tests/test_fabricarray.py +952 -955
- warp/tests/test_fast_math.py +60 -54
- warp/tests/test_fem.py +1298 -1278
- warp/tests/test_fp16.py +128 -130
- warp/tests/test_func.py +336 -337
- warp/tests/test_generics.py +596 -571
- warp/tests/test_grad.py +885 -640
- warp/tests/test_grad_customs.py +331 -336
- warp/tests/test_hash_grid.py +208 -164
- warp/tests/test_import.py +37 -39
- warp/tests/test_indexedarray.py +1132 -1134
- warp/tests/test_intersect.py +65 -67
- warp/tests/test_jax.py +305 -307
- warp/tests/test_large.py +169 -164
- warp/tests/test_launch.py +352 -354
- warp/tests/test_lerp.py +217 -261
- warp/tests/test_linear_solvers.py +189 -171
- warp/tests/test_lvalue.py +419 -493
- warp/tests/test_marching_cubes.py +63 -65
- warp/tests/test_mat.py +1799 -1827
- warp/tests/test_mat_lite.py +113 -115
- warp/tests/test_mat_scalar_ops.py +2905 -2889
- warp/tests/test_math.py +124 -193
- warp/tests/test_matmul.py +498 -499
- warp/tests/test_matmul_lite.py +408 -410
- warp/tests/test_mempool.py +186 -190
- warp/tests/test_mesh.py +281 -324
- warp/tests/test_mesh_query_aabb.py +226 -241
- warp/tests/test_mesh_query_point.py +690 -702
- warp/tests/test_mesh_query_ray.py +290 -303
- warp/tests/test_mlp.py +274 -276
- warp/tests/test_model.py +108 -110
- warp/tests/test_module_hashing.py +111 -0
- warp/tests/test_modules_lite.py +36 -39
- warp/tests/test_multigpu.py +161 -163
- warp/tests/test_noise.py +244 -248
- warp/tests/test_operators.py +248 -250
- warp/tests/test_options.py +121 -125
- warp/tests/test_peer.py +131 -137
- warp/tests/test_pinned.py +76 -78
- warp/tests/test_print.py +52 -54
- warp/tests/test_quat.py +2084 -2086
- warp/tests/test_rand.py +324 -288
- warp/tests/test_reload.py +207 -217
- warp/tests/test_rounding.py +177 -179
- warp/tests/test_runlength_encode.py +188 -190
- warp/tests/test_sim_grad.py +241 -0
- warp/tests/test_sim_kinematics.py +89 -97
- warp/tests/test_smoothstep.py +166 -168
- warp/tests/test_snippet.py +303 -266
- warp/tests/test_sparse.py +466 -460
- warp/tests/test_spatial.py +2146 -2148
- warp/tests/test_special_values.py +362 -0
- warp/tests/test_streams.py +484 -473
- warp/tests/test_struct.py +708 -675
- warp/tests/test_tape.py +171 -148
- warp/tests/test_torch.py +741 -743
- warp/tests/test_transient_module.py +85 -87
- warp/tests/test_types.py +554 -659
- warp/tests/test_utils.py +488 -499
- warp/tests/test_vec.py +1262 -1268
- warp/tests/test_vec_lite.py +71 -73
- warp/tests/test_vec_scalar_ops.py +2097 -2099
- warp/tests/test_verify_fp.py +92 -94
- warp/tests/test_volume.py +961 -736
- warp/tests/test_volume_write.py +338 -265
- warp/tests/unittest_serial.py +38 -37
- warp/tests/unittest_suites.py +367 -359
- warp/tests/unittest_utils.py +434 -578
- warp/tests/unused_test_misc.py +69 -71
- warp/tests/walkthrough_debug.py +85 -85
- warp/thirdparty/appdirs.py +598 -598
- warp/thirdparty/dlpack.py +143 -143
- warp/thirdparty/unittest_parallel.py +563 -561
- warp/torch.py +321 -295
- warp/types.py +4941 -4450
- warp/utils.py +1008 -821
- {warp_lang-1.0.2.dist-info → warp_lang-1.2.0.dist-info}/LICENSE.md +126 -126
- {warp_lang-1.0.2.dist-info → warp_lang-1.2.0.dist-info}/METADATA +365 -400
- warp_lang-1.2.0.dist-info/RECORD +359 -0
- warp/examples/assets/cube.usda +0 -42
- warp/examples/assets/sphere.usda +0 -56
- warp/examples/assets/torus.usda +0 -105
- warp/examples/fem/example_convection_diffusion_dg0.py +0 -194
- warp/native/nanovdb/PNanoVDBWrite.h +0 -295
- warp_lang-1.0.2.dist-info/RECORD +0 -352
- {warp_lang-1.0.2.dist-info → warp_lang-1.2.0.dist-info}/WHEEL +0 -0
- {warp_lang-1.0.2.dist-info → warp_lang-1.2.0.dist-info}/top_level.txt +0 -0
warp/tests/test_examples.py
CHANGED
|
@@ -1,378 +1,403 @@
|
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
name
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
#
|
|
186
|
-
#
|
|
187
|
-
|
|
188
|
-
add_example_test(
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
)
|
|
204
|
-
add_example_test(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
)
|
|
221
|
-
add_example_test(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
)
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
add_example_test(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
)
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
devices=
|
|
296
|
-
|
|
297
|
-
)
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
add_example_test(
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
add_example_test(
|
|
337
|
-
TestFemExamples,
|
|
338
|
-
name="fem.
|
|
339
|
-
devices=
|
|
340
|
-
|
|
341
|
-
)
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
devices=test_devices,
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
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
|
+
"""Test Warp examples with unittest.
|
|
8
|
+
|
|
9
|
+
This module tests the Warp examples registered in it using the unittest
|
|
10
|
+
framework. When registering tests with add_example_test(), three optional
|
|
11
|
+
dictionaries can be provided: test_options, test_options_cuda, and
|
|
12
|
+
test_options_cpu. These are added to the command line arguments in-order, so
|
|
13
|
+
if a parameter is specified in both test_options and test_options_cuda, the
|
|
14
|
+
one in test_options_cuda will take precedence due to how argparse works.
|
|
15
|
+
|
|
16
|
+
Generally the test_options[_cpu,_cuda] dictionaries should be used to prevent
|
|
17
|
+
graphical windows from being open by the example {"headless": True} and to
|
|
18
|
+
override example defaults so the example can run in less than ten seconds.
|
|
19
|
+
|
|
20
|
+
Use {"usd_required": True} and {"torch_required": True} to skip running the test
|
|
21
|
+
if usd-core or torch are not found in the Python environment.
|
|
22
|
+
|
|
23
|
+
Use the "num_frames" and "train_iters" keys to control the number of steps.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
import os
|
|
27
|
+
import subprocess
|
|
28
|
+
import sys
|
|
29
|
+
import unittest
|
|
30
|
+
from typing import Any, Dict, Optional, Type
|
|
31
|
+
|
|
32
|
+
import warp as wp
|
|
33
|
+
import warp.tests.unittest_utils
|
|
34
|
+
from warp.tests.unittest_utils import (
|
|
35
|
+
USD_AVAILABLE,
|
|
36
|
+
get_selected_cuda_test_devices,
|
|
37
|
+
get_test_devices,
|
|
38
|
+
sanitize_identifier,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _build_command_line_options(test_options: Dict[str, Any]) -> list:
|
|
43
|
+
"""Helper function to build command-line options from the test options dictionary."""
|
|
44
|
+
additional_options = []
|
|
45
|
+
|
|
46
|
+
for key, value in test_options.items():
|
|
47
|
+
if key == "headless" and value:
|
|
48
|
+
additional_options.extend(["--headless"])
|
|
49
|
+
else:
|
|
50
|
+
# Just add --key value
|
|
51
|
+
additional_options.extend(["--" + key, str(value)])
|
|
52
|
+
|
|
53
|
+
return additional_options
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _merge_options(base_options: Dict[str, Any], device_options: Dict[str, Any]) -> Dict[str, Any]:
|
|
57
|
+
"""Helper function to merge base test options with device-specific test options."""
|
|
58
|
+
merged_options = base_options.copy()
|
|
59
|
+
|
|
60
|
+
# Update options with device-specific dictionary, overwriting existing keys with the more-specific values
|
|
61
|
+
merged_options.update(device_options)
|
|
62
|
+
return merged_options
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def add_example_test(
|
|
66
|
+
cls: Type,
|
|
67
|
+
name: str,
|
|
68
|
+
devices: Optional[list] = None,
|
|
69
|
+
test_options: Optional[Dict[str, Any]] = None,
|
|
70
|
+
test_options_cpu: Optional[Dict[str, Any]] = None,
|
|
71
|
+
test_options_cuda: Optional[Dict[str, Any]] = None,
|
|
72
|
+
):
|
|
73
|
+
"""Registers a Warp example to run on ``devices`` as a TestCase."""
|
|
74
|
+
|
|
75
|
+
if test_options is None:
|
|
76
|
+
test_options = {}
|
|
77
|
+
if test_options_cpu is None:
|
|
78
|
+
test_options_cpu = {}
|
|
79
|
+
if test_options_cuda is None:
|
|
80
|
+
test_options_cuda = {}
|
|
81
|
+
|
|
82
|
+
def run(test, device):
|
|
83
|
+
if wp.get_device(device).is_cuda:
|
|
84
|
+
options = _merge_options(test_options, test_options_cuda)
|
|
85
|
+
else:
|
|
86
|
+
options = _merge_options(test_options, test_options_cpu)
|
|
87
|
+
|
|
88
|
+
# Mark the test as skipped if Torch is not installed but required
|
|
89
|
+
torch_required = options.pop("torch_required", False)
|
|
90
|
+
if torch_required:
|
|
91
|
+
try:
|
|
92
|
+
import torch
|
|
93
|
+
|
|
94
|
+
if wp.get_device(device).is_cuda and not torch.cuda.is_available():
|
|
95
|
+
# Ensure torch has CUDA support
|
|
96
|
+
test.skipTest("Torch not compiled with CUDA support")
|
|
97
|
+
|
|
98
|
+
except Exception as e:
|
|
99
|
+
test.skipTest(f"{e}")
|
|
100
|
+
|
|
101
|
+
# Mark the test as skipped if USD is not installed but required
|
|
102
|
+
usd_required = options.pop("usd_required", False)
|
|
103
|
+
if usd_required and not USD_AVAILABLE:
|
|
104
|
+
test.skipTest("Requires usd-core")
|
|
105
|
+
|
|
106
|
+
# Find the current Warp cache
|
|
107
|
+
warp_cache_path = wp.config.kernel_cache_dir
|
|
108
|
+
|
|
109
|
+
env_vars = os.environ.copy()
|
|
110
|
+
if warp_cache_path is not None:
|
|
111
|
+
env_vars["WARP_CACHE_PATH"] = warp_cache_path
|
|
112
|
+
|
|
113
|
+
if warp.tests.unittest_utils.coverage_enabled:
|
|
114
|
+
import tempfile
|
|
115
|
+
|
|
116
|
+
# Generate a random coverage data file name - file is deleted along with containing directory
|
|
117
|
+
with tempfile.NamedTemporaryFile(
|
|
118
|
+
dir=warp.tests.unittest_utils.coverage_temp_dir, delete=False
|
|
119
|
+
) as coverage_file:
|
|
120
|
+
pass
|
|
121
|
+
|
|
122
|
+
command = ["coverage", "run", f"--data-file={coverage_file.name}"]
|
|
123
|
+
|
|
124
|
+
if warp.tests.unittest_utils.coverage_branch:
|
|
125
|
+
command.append("--branch")
|
|
126
|
+
|
|
127
|
+
else:
|
|
128
|
+
command = [sys.executable]
|
|
129
|
+
|
|
130
|
+
# Append Warp commands
|
|
131
|
+
command.extend(["-m", f"warp.examples.{name}", "--device", str(device)])
|
|
132
|
+
|
|
133
|
+
stage_path = (
|
|
134
|
+
options.pop(
|
|
135
|
+
"stage_path",
|
|
136
|
+
os.path.join(os.path.dirname(__file__), f"outputs/{name}_{sanitize_identifier(device)}.usd"),
|
|
137
|
+
)
|
|
138
|
+
if USD_AVAILABLE
|
|
139
|
+
else "None"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
if stage_path:
|
|
143
|
+
command.extend(["--stage_path", stage_path])
|
|
144
|
+
try:
|
|
145
|
+
os.remove(stage_path)
|
|
146
|
+
except OSError:
|
|
147
|
+
pass
|
|
148
|
+
|
|
149
|
+
command.extend(_build_command_line_options(options))
|
|
150
|
+
|
|
151
|
+
# with wp.ScopedTimer(f"{name}_{sanitize_identifier(device)}"):
|
|
152
|
+
# Run the script as a subprocess
|
|
153
|
+
result = subprocess.run(command, capture_output=True, text=True, env=env_vars)
|
|
154
|
+
|
|
155
|
+
# Check the return code (0 is standard for success)
|
|
156
|
+
test.assertEqual(
|
|
157
|
+
result.returncode,
|
|
158
|
+
0,
|
|
159
|
+
msg=f"Failed with return code {result.returncode}, command: {' '.join(command)}\n\nOutput:\n{result.stdout}\n{result.stderr}",
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# If the test succeeded, try to clean up the output by default
|
|
163
|
+
if stage_path and result.returncode == 0:
|
|
164
|
+
try:
|
|
165
|
+
os.remove(stage_path)
|
|
166
|
+
except OSError:
|
|
167
|
+
pass
|
|
168
|
+
|
|
169
|
+
from warp.tests.unittest_utils import add_function_test
|
|
170
|
+
|
|
171
|
+
add_function_test(cls, f"test_{name}", run, devices=devices, check_output=False)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
cuda_test_devices = get_selected_cuda_test_devices(mode="basic") # Don't test on multiple GPUs to save time
|
|
175
|
+
test_devices = get_test_devices(mode="basic")
|
|
176
|
+
|
|
177
|
+
# NOTE: To give the parallel test runner more opportunities to parallelize test cases,
|
|
178
|
+
# we break up the tests into multiple TestCase classes
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class TestCoreExamples(unittest.TestCase):
|
|
182
|
+
pass
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
# Exclude unless we can run headless somehow
|
|
186
|
+
# add_example_test(TestCoreExamples, name="example_render_opengl")
|
|
187
|
+
|
|
188
|
+
add_example_test(TestCoreExamples, name="core.example_dem", devices=test_devices, test_options_cpu={"num_frames": 2})
|
|
189
|
+
add_example_test(
|
|
190
|
+
TestCoreExamples,
|
|
191
|
+
name="core.example_fluid",
|
|
192
|
+
devices=test_devices,
|
|
193
|
+
test_options={"num_frames": 100, "headless": True},
|
|
194
|
+
)
|
|
195
|
+
add_example_test(
|
|
196
|
+
TestCoreExamples,
|
|
197
|
+
name="core.example_graph_capture",
|
|
198
|
+
devices=test_devices,
|
|
199
|
+
test_options={"headless": True},
|
|
200
|
+
test_options_cpu={"num_frames": 100},
|
|
201
|
+
)
|
|
202
|
+
add_example_test(TestCoreExamples, name="core.example_marching_cubes", devices=cuda_test_devices)
|
|
203
|
+
add_example_test(TestCoreExamples, name="core.example_mesh", devices=test_devices, test_options={"usd_required": True})
|
|
204
|
+
add_example_test(
|
|
205
|
+
TestCoreExamples, name="core.example_mesh_intersect", devices=test_devices, test_options={"usd_required": True}
|
|
206
|
+
)
|
|
207
|
+
add_example_test(TestCoreExamples, name="core.example_nvdb", devices=test_devices)
|
|
208
|
+
add_example_test(
|
|
209
|
+
TestCoreExamples,
|
|
210
|
+
name="core.example_raycast",
|
|
211
|
+
devices=test_devices,
|
|
212
|
+
test_options={"usd_required": True, "headless": True},
|
|
213
|
+
)
|
|
214
|
+
add_example_test(
|
|
215
|
+
TestCoreExamples,
|
|
216
|
+
name="core.example_raymarch",
|
|
217
|
+
devices=test_devices,
|
|
218
|
+
test_options={"height": 512, "width": 1024, "headless": True},
|
|
219
|
+
)
|
|
220
|
+
add_example_test(TestCoreExamples, name="core.example_sph", devices=test_devices, test_options_cpu={"num_frames": 1})
|
|
221
|
+
add_example_test(
|
|
222
|
+
TestCoreExamples,
|
|
223
|
+
name="core.example_torch",
|
|
224
|
+
devices=test_devices,
|
|
225
|
+
test_options={"headless": True, "num_frames": 1000, "torch_required": True},
|
|
226
|
+
)
|
|
227
|
+
add_example_test(TestCoreExamples, name="core.example_wave", devices=test_devices)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
class TestOptimExamples(unittest.TestCase):
|
|
231
|
+
pass
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
add_example_test(
|
|
235
|
+
TestOptimExamples, name="optim.example_bounce", devices=test_devices, test_options_cpu={"train_iters": 3}
|
|
236
|
+
)
|
|
237
|
+
add_example_test(
|
|
238
|
+
TestOptimExamples,
|
|
239
|
+
name="optim.example_drone",
|
|
240
|
+
devices=test_devices,
|
|
241
|
+
test_options={"headless": True},
|
|
242
|
+
test_options_cpu={"num_frames": 10},
|
|
243
|
+
)
|
|
244
|
+
add_example_test(
|
|
245
|
+
TestOptimExamples, name="optim.example_cloth_throw", devices=test_devices, test_options_cpu={"train_iters": 3}
|
|
246
|
+
)
|
|
247
|
+
add_example_test(
|
|
248
|
+
TestOptimExamples,
|
|
249
|
+
name="optim.example_diffray",
|
|
250
|
+
devices=test_devices,
|
|
251
|
+
test_options={"usd_required": True, "headless": True},
|
|
252
|
+
test_options_cpu={"train_iters": 2},
|
|
253
|
+
)
|
|
254
|
+
add_example_test(TestOptimExamples, name="optim.example_inverse_kinematics", devices=test_devices)
|
|
255
|
+
add_example_test(
|
|
256
|
+
TestOptimExamples,
|
|
257
|
+
name="optim.example_inverse_kinematics_torch",
|
|
258
|
+
devices=test_devices,
|
|
259
|
+
test_options={"torch_required": True},
|
|
260
|
+
)
|
|
261
|
+
add_example_test(TestOptimExamples, name="optim.example_spring_cage", devices=test_devices)
|
|
262
|
+
add_example_test(
|
|
263
|
+
TestOptimExamples,
|
|
264
|
+
name="optim.example_trajectory",
|
|
265
|
+
devices=test_devices,
|
|
266
|
+
test_options={"headless": True, "train_iters": 50},
|
|
267
|
+
)
|
|
268
|
+
# NOTE: This example uses CUTLASS and will run orders of magnitude slower when Warp is built in debug mode
|
|
269
|
+
add_example_test(
|
|
270
|
+
TestOptimExamples,
|
|
271
|
+
name="optim.example_walker",
|
|
272
|
+
devices=test_devices,
|
|
273
|
+
test_options={"usd_required": True},
|
|
274
|
+
test_options_cuda={
|
|
275
|
+
"train_iters": 1 if warp.context.runtime.core.is_debug_enabled() else 3,
|
|
276
|
+
"num_frames": 1 if warp.context.runtime.core.is_debug_enabled() else 60,
|
|
277
|
+
},
|
|
278
|
+
test_options_cpu={"train_iters": 1, "num_frames": 30},
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
class TestSimExamples(unittest.TestCase):
|
|
283
|
+
pass
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
add_example_test(TestSimExamples, name="sim.example_cartpole", devices=test_devices)
|
|
287
|
+
add_example_test(
|
|
288
|
+
TestSimExamples,
|
|
289
|
+
name="sim.example_cloth",
|
|
290
|
+
devices=test_devices,
|
|
291
|
+
test_options={"usd_required": True},
|
|
292
|
+
test_options_cpu={"num_frames": 10},
|
|
293
|
+
)
|
|
294
|
+
add_example_test(
|
|
295
|
+
TestSimExamples, name="sim.example_granular", devices=test_devices, test_options_cpu={"num_frames": 10}
|
|
296
|
+
)
|
|
297
|
+
add_example_test(TestSimExamples, name="sim.example_granular_collision_sdf", devices=cuda_test_devices)
|
|
298
|
+
add_example_test(TestSimExamples, name="sim.example_jacobian_ik", devices=test_devices)
|
|
299
|
+
add_example_test(TestSimExamples, name="sim.example_particle_chain", devices=test_devices)
|
|
300
|
+
add_example_test(
|
|
301
|
+
TestSimExamples, name="sim.example_quadruped", devices=test_devices, test_options_cpu={"num_frames": 100}
|
|
302
|
+
)
|
|
303
|
+
add_example_test(TestSimExamples, name="sim.example_rigid_chain", devices=test_devices)
|
|
304
|
+
add_example_test(
|
|
305
|
+
TestSimExamples,
|
|
306
|
+
name="sim.example_rigid_contact",
|
|
307
|
+
devices=test_devices,
|
|
308
|
+
test_options={"usd_required": True},
|
|
309
|
+
test_options_cpu={"num_frames": 3},
|
|
310
|
+
)
|
|
311
|
+
add_example_test(
|
|
312
|
+
TestSimExamples, name="sim.example_rigid_soft_contact", devices=test_devices, test_options_cpu={"num_frames": 10}
|
|
313
|
+
)
|
|
314
|
+
add_example_test(TestSimExamples, name="sim.example_rigid_force", devices=test_devices)
|
|
315
|
+
add_example_test(TestSimExamples, name="sim.example_rigid_gyroscopic", devices=test_devices)
|
|
316
|
+
add_example_test(
|
|
317
|
+
TestSimExamples, name="sim.example_soft_body", devices=test_devices, test_options_cpu={"num_frames": 10}
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class TestFemExamples(unittest.TestCase):
|
|
322
|
+
pass
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
class TestFemDiffusionExamples(unittest.TestCase):
|
|
326
|
+
pass
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
add_example_test(
|
|
330
|
+
TestFemDiffusionExamples,
|
|
331
|
+
name="fem.example_diffusion_mgpu",
|
|
332
|
+
devices=get_selected_cuda_test_devices(mode="basic"),
|
|
333
|
+
test_options={"headless": True},
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
add_example_test(
|
|
337
|
+
TestFemExamples,
|
|
338
|
+
name="fem.example_apic_fluid",
|
|
339
|
+
devices=get_selected_cuda_test_devices(),
|
|
340
|
+
test_options={"num_frames": 5, "voxel_size": 2.0},
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
# The following examples do not need CUDA
|
|
344
|
+
add_example_test(
|
|
345
|
+
TestFemDiffusionExamples,
|
|
346
|
+
name="fem.example_diffusion",
|
|
347
|
+
devices=test_devices,
|
|
348
|
+
test_options={"resolution": 10, "mesh": "tri", "headless": True},
|
|
349
|
+
)
|
|
350
|
+
add_example_test(
|
|
351
|
+
TestFemDiffusionExamples, name="fem.example_diffusion_3d", devices=test_devices, test_options={"headless": True}
|
|
352
|
+
)
|
|
353
|
+
add_example_test(
|
|
354
|
+
TestFemExamples,
|
|
355
|
+
name="fem.example_deformed_geometry",
|
|
356
|
+
devices=test_devices,
|
|
357
|
+
test_options={"resolution": 10, "mesh": "tri", "headless": True},
|
|
358
|
+
)
|
|
359
|
+
add_example_test(
|
|
360
|
+
TestFemExamples,
|
|
361
|
+
name="fem.example_convection_diffusion",
|
|
362
|
+
devices=test_devices,
|
|
363
|
+
test_options={"resolution": 20, "headless": True},
|
|
364
|
+
)
|
|
365
|
+
add_example_test(
|
|
366
|
+
TestFemExamples,
|
|
367
|
+
name="fem.example_burgers",
|
|
368
|
+
devices=test_devices,
|
|
369
|
+
test_options={"resolution": 20, "num_frames": 25, "degree": 1, "headless": True},
|
|
370
|
+
)
|
|
371
|
+
add_example_test(
|
|
372
|
+
TestFemExamples,
|
|
373
|
+
name="fem.example_convection_diffusion_dg",
|
|
374
|
+
devices=test_devices,
|
|
375
|
+
test_options={"resolution": 20, "num_frames": 25, "mesh": "quad", "headless": True},
|
|
376
|
+
)
|
|
377
|
+
add_example_test(
|
|
378
|
+
TestFemExamples,
|
|
379
|
+
name="fem.example_mixed_elasticity",
|
|
380
|
+
devices=test_devices,
|
|
381
|
+
test_options={"nonconforming_stresses": True, "mesh": "quad", "headless": True},
|
|
382
|
+
)
|
|
383
|
+
add_example_test(
|
|
384
|
+
TestFemExamples, name="fem.example_stokes_transfer", devices=test_devices, test_options={"headless": True}
|
|
385
|
+
)
|
|
386
|
+
add_example_test(
|
|
387
|
+
TestFemExamples,
|
|
388
|
+
name="fem.example_stokes",
|
|
389
|
+
devices=test_devices,
|
|
390
|
+
test_options={"resolution": 10, "nonconforming_pressures": True, "headless": True},
|
|
391
|
+
)
|
|
392
|
+
add_example_test(
|
|
393
|
+
TestFemExamples,
|
|
394
|
+
name="fem.example_navier_stokes",
|
|
395
|
+
devices=test_devices,
|
|
396
|
+
test_options={"num_frames": 101, "resolution": 10, "tri_mesh": True, "headless": True},
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
if __name__ == "__main__":
|
|
400
|
+
# force rebuild of all kernels
|
|
401
|
+
wp.build.clear_kernel_cache()
|
|
402
|
+
|
|
403
|
+
unittest.main(verbosity=2, failfast=True)
|