warp-lang 1.7.0__py3-none-manylinux_2_28_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 +139 -0
- warp/__init__.pyi +1 -0
- warp/autograd.py +1142 -0
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +557 -0
- warp/build_dll.py +405 -0
- warp/builtins.py +6855 -0
- warp/codegen.py +3969 -0
- warp/config.py +158 -0
- warp/constants.py +57 -0
- warp/context.py +6812 -0
- warp/dlpack.py +462 -0
- warp/examples/__init__.py +24 -0
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cartpole.urdf +110 -0
- warp/examples/assets/crazyflie.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nv_ant.xml +92 -0
- warp/examples/assets/nv_humanoid.xml +183 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/assets/pixel.jpg +0 -0
- warp/examples/assets/quadruped.urdf +268 -0
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/assets/square_cloth.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +389 -0
- warp/examples/benchmarks/benchmark_cloth.py +296 -0
- warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
- warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
- warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
- warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
- warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
- warp/examples/benchmarks/benchmark_gemm.py +164 -0
- warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
- warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
- warp/examples/benchmarks/benchmark_launches.py +301 -0
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/browse.py +37 -0
- warp/examples/core/example_cupy.py +86 -0
- warp/examples/core/example_dem.py +241 -0
- warp/examples/core/example_fluid.py +299 -0
- warp/examples/core/example_graph_capture.py +150 -0
- warp/examples/core/example_marching_cubes.py +194 -0
- warp/examples/core/example_mesh.py +180 -0
- warp/examples/core/example_mesh_intersect.py +211 -0
- warp/examples/core/example_nvdb.py +182 -0
- warp/examples/core/example_raycast.py +111 -0
- warp/examples/core/example_raymarch.py +205 -0
- warp/examples/core/example_render_opengl.py +193 -0
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +411 -0
- warp/examples/core/example_torch.py +211 -0
- warp/examples/core/example_wave.py +269 -0
- warp/examples/fem/example_adaptive_grid.py +286 -0
- warp/examples/fem/example_apic_fluid.py +423 -0
- warp/examples/fem/example_burgers.py +261 -0
- warp/examples/fem/example_convection_diffusion.py +178 -0
- warp/examples/fem/example_convection_diffusion_dg.py +204 -0
- warp/examples/fem/example_deformed_geometry.py +172 -0
- warp/examples/fem/example_diffusion.py +196 -0
- warp/examples/fem/example_diffusion_3d.py +225 -0
- warp/examples/fem/example_diffusion_mgpu.py +220 -0
- warp/examples/fem/example_distortion_energy.py +228 -0
- warp/examples/fem/example_magnetostatics.py +240 -0
- warp/examples/fem/example_mixed_elasticity.py +291 -0
- warp/examples/fem/example_navier_stokes.py +261 -0
- warp/examples/fem/example_nonconforming_contact.py +298 -0
- warp/examples/fem/example_stokes.py +213 -0
- warp/examples/fem/example_stokes_transfer.py +262 -0
- warp/examples/fem/example_streamlines.py +352 -0
- warp/examples/fem/utils.py +1000 -0
- warp/examples/interop/example_jax_callable.py +116 -0
- warp/examples/interop/example_jax_ffi_callback.py +132 -0
- warp/examples/interop/example_jax_kernel.py +205 -0
- warp/examples/optim/example_bounce.py +266 -0
- warp/examples/optim/example_cloth_throw.py +228 -0
- warp/examples/optim/example_diffray.py +561 -0
- warp/examples/optim/example_drone.py +870 -0
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/optim/example_inverse_kinematics.py +182 -0
- warp/examples/optim/example_inverse_kinematics_torch.py +191 -0
- warp/examples/optim/example_softbody_properties.py +400 -0
- warp/examples/optim/example_spring_cage.py +245 -0
- warp/examples/optim/example_trajectory.py +227 -0
- warp/examples/sim/example_cartpole.py +143 -0
- warp/examples/sim/example_cloth.py +225 -0
- warp/examples/sim/example_cloth_self_contact.py +322 -0
- warp/examples/sim/example_granular.py +130 -0
- warp/examples/sim/example_granular_collision_sdf.py +202 -0
- warp/examples/sim/example_jacobian_ik.py +244 -0
- warp/examples/sim/example_particle_chain.py +124 -0
- warp/examples/sim/example_quadruped.py +203 -0
- warp/examples/sim/example_rigid_chain.py +203 -0
- warp/examples/sim/example_rigid_contact.py +195 -0
- warp/examples/sim/example_rigid_force.py +133 -0
- warp/examples/sim/example_rigid_gyroscopic.py +115 -0
- warp/examples/sim/example_rigid_soft_contact.py +140 -0
- warp/examples/sim/example_soft_body.py +196 -0
- warp/examples/tile/example_tile_cholesky.py +87 -0
- warp/examples/tile/example_tile_convolution.py +66 -0
- warp/examples/tile/example_tile_fft.py +55 -0
- warp/examples/tile/example_tile_filtering.py +113 -0
- warp/examples/tile/example_tile_matmul.py +85 -0
- warp/examples/tile/example_tile_mlp.py +383 -0
- warp/examples/tile/example_tile_nbody.py +199 -0
- warp/examples/tile/example_tile_walker.py +327 -0
- warp/fabric.py +355 -0
- warp/fem/__init__.py +106 -0
- warp/fem/adaptivity.py +508 -0
- warp/fem/cache.py +572 -0
- warp/fem/dirichlet.py +202 -0
- warp/fem/domain.py +411 -0
- warp/fem/field/__init__.py +125 -0
- warp/fem/field/field.py +619 -0
- warp/fem/field/nodal_field.py +326 -0
- warp/fem/field/restriction.py +37 -0
- warp/fem/field/virtual.py +848 -0
- warp/fem/geometry/__init__.py +32 -0
- warp/fem/geometry/adaptive_nanogrid.py +857 -0
- warp/fem/geometry/closest_point.py +84 -0
- warp/fem/geometry/deformed_geometry.py +221 -0
- warp/fem/geometry/element.py +776 -0
- warp/fem/geometry/geometry.py +362 -0
- warp/fem/geometry/grid_2d.py +392 -0
- warp/fem/geometry/grid_3d.py +452 -0
- warp/fem/geometry/hexmesh.py +911 -0
- warp/fem/geometry/nanogrid.py +571 -0
- warp/fem/geometry/partition.py +389 -0
- warp/fem/geometry/quadmesh.py +663 -0
- warp/fem/geometry/tetmesh.py +855 -0
- warp/fem/geometry/trimesh.py +806 -0
- warp/fem/integrate.py +2335 -0
- warp/fem/linalg.py +419 -0
- warp/fem/operator.py +293 -0
- warp/fem/polynomial.py +229 -0
- warp/fem/quadrature/__init__.py +17 -0
- warp/fem/quadrature/pic_quadrature.py +299 -0
- warp/fem/quadrature/quadrature.py +591 -0
- warp/fem/space/__init__.py +228 -0
- warp/fem/space/basis_function_space.py +468 -0
- warp/fem/space/basis_space.py +667 -0
- warp/fem/space/dof_mapper.py +251 -0
- warp/fem/space/function_space.py +309 -0
- warp/fem/space/grid_2d_function_space.py +177 -0
- warp/fem/space/grid_3d_function_space.py +227 -0
- warp/fem/space/hexmesh_function_space.py +257 -0
- warp/fem/space/nanogrid_function_space.py +201 -0
- warp/fem/space/partition.py +367 -0
- warp/fem/space/quadmesh_function_space.py +223 -0
- warp/fem/space/restriction.py +179 -0
- warp/fem/space/shape/__init__.py +143 -0
- warp/fem/space/shape/cube_shape_function.py +1105 -0
- warp/fem/space/shape/shape_function.py +133 -0
- warp/fem/space/shape/square_shape_function.py +926 -0
- warp/fem/space/shape/tet_shape_function.py +834 -0
- warp/fem/space/shape/triangle_shape_function.py +672 -0
- warp/fem/space/tetmesh_function_space.py +271 -0
- warp/fem/space/topology.py +424 -0
- warp/fem/space/trimesh_function_space.py +194 -0
- warp/fem/types.py +99 -0
- warp/fem/utils.py +420 -0
- warp/jax.py +187 -0
- warp/jax_experimental/__init__.py +16 -0
- warp/jax_experimental/custom_call.py +351 -0
- warp/jax_experimental/ffi.py +698 -0
- warp/jax_experimental/xla_ffi.py +602 -0
- warp/math.py +244 -0
- warp/native/array.h +1145 -0
- warp/native/builtin.h +1800 -0
- warp/native/bvh.cpp +492 -0
- warp/native/bvh.cu +791 -0
- warp/native/bvh.h +554 -0
- warp/native/clang/clang.cpp +536 -0
- warp/native/coloring.cpp +613 -0
- warp/native/crt.cpp +51 -0
- warp/native/crt.h +362 -0
- warp/native/cuda_crt.h +1058 -0
- warp/native/cuda_util.cpp +646 -0
- warp/native/cuda_util.h +307 -0
- warp/native/error.cpp +77 -0
- warp/native/error.h +36 -0
- warp/native/exports.h +1878 -0
- warp/native/fabric.h +245 -0
- warp/native/hashgrid.cpp +311 -0
- warp/native/hashgrid.cu +87 -0
- warp/native/hashgrid.h +240 -0
- warp/native/initializer_array.h +41 -0
- warp/native/intersect.h +1230 -0
- warp/native/intersect_adj.h +375 -0
- warp/native/intersect_tri.h +339 -0
- warp/native/marching.cpp +19 -0
- warp/native/marching.cu +514 -0
- warp/native/marching.h +19 -0
- warp/native/mat.h +2220 -0
- warp/native/mathdx.cpp +87 -0
- warp/native/matnn.h +343 -0
- warp/native/mesh.cpp +266 -0
- warp/native/mesh.cu +404 -0
- warp/native/mesh.h +1980 -0
- warp/native/nanovdb/GridHandle.h +366 -0
- warp/native/nanovdb/HostBuffer.h +590 -0
- warp/native/nanovdb/NanoVDB.h +6624 -0
- warp/native/nanovdb/PNanoVDB.h +3390 -0
- warp/native/noise.h +859 -0
- warp/native/quat.h +1371 -0
- warp/native/rand.h +342 -0
- warp/native/range.h +139 -0
- warp/native/reduce.cpp +174 -0
- warp/native/reduce.cu +364 -0
- warp/native/runlength_encode.cpp +79 -0
- warp/native/runlength_encode.cu +61 -0
- warp/native/scan.cpp +47 -0
- warp/native/scan.cu +53 -0
- warp/native/scan.h +23 -0
- warp/native/solid_angle.h +466 -0
- warp/native/sort.cpp +251 -0
- warp/native/sort.cu +277 -0
- warp/native/sort.h +33 -0
- warp/native/sparse.cpp +378 -0
- warp/native/sparse.cu +524 -0
- warp/native/spatial.h +657 -0
- warp/native/svd.h +702 -0
- warp/native/temp_buffer.h +46 -0
- warp/native/tile.h +2584 -0
- warp/native/tile_reduce.h +264 -0
- warp/native/vec.h +1426 -0
- warp/native/volume.cpp +501 -0
- warp/native/volume.cu +67 -0
- warp/native/volume.h +969 -0
- warp/native/volume_builder.cu +477 -0
- warp/native/volume_builder.h +52 -0
- warp/native/volume_impl.h +70 -0
- warp/native/warp.cpp +1082 -0
- warp/native/warp.cu +3636 -0
- warp/native/warp.h +381 -0
- warp/optim/__init__.py +17 -0
- warp/optim/adam.py +163 -0
- warp/optim/linear.py +1137 -0
- warp/optim/sgd.py +112 -0
- warp/paddle.py +407 -0
- warp/render/__init__.py +18 -0
- warp/render/render_opengl.py +3518 -0
- warp/render/render_usd.py +784 -0
- warp/render/utils.py +160 -0
- warp/sim/__init__.py +65 -0
- warp/sim/articulation.py +793 -0
- warp/sim/collide.py +2395 -0
- warp/sim/graph_coloring.py +300 -0
- warp/sim/import_mjcf.py +790 -0
- warp/sim/import_snu.py +227 -0
- warp/sim/import_urdf.py +579 -0
- warp/sim/import_usd.py +894 -0
- warp/sim/inertia.py +324 -0
- warp/sim/integrator.py +242 -0
- warp/sim/integrator_euler.py +1997 -0
- warp/sim/integrator_featherstone.py +2101 -0
- warp/sim/integrator_vbd.py +2048 -0
- warp/sim/integrator_xpbd.py +3292 -0
- warp/sim/model.py +4791 -0
- warp/sim/particles.py +121 -0
- warp/sim/render.py +427 -0
- warp/sim/utils.py +428 -0
- warp/sparse.py +2057 -0
- warp/stubs.py +3333 -0
- warp/tape.py +1203 -0
- warp/tests/__init__.py +1 -0
- warp/tests/__main__.py +4 -0
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/mlp_golden.npy +0 -0
- warp/tests/assets/pixel.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/assets/spiky.usd +0 -0
- warp/tests/assets/test_grid.nvdb +0 -0
- warp/tests/assets/test_index_grid.nvdb +0 -0
- warp/tests/assets/test_int32_grid.nvdb +0 -0
- warp/tests/assets/test_vec_grid.nvdb +0 -0
- warp/tests/assets/torus.nvdb +0 -0
- warp/tests/assets/torus.usda +105 -0
- warp/tests/aux_test_class_kernel.py +34 -0
- warp/tests/aux_test_compile_consts_dummy.py +18 -0
- warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
- warp/tests/aux_test_dependent.py +29 -0
- warp/tests/aux_test_grad_customs.py +29 -0
- warp/tests/aux_test_instancing_gc.py +26 -0
- warp/tests/aux_test_module_unload.py +23 -0
- warp/tests/aux_test_name_clash1.py +40 -0
- warp/tests/aux_test_name_clash2.py +40 -0
- warp/tests/aux_test_reference.py +9 -0
- warp/tests/aux_test_reference_reference.py +8 -0
- warp/tests/aux_test_square.py +16 -0
- warp/tests/aux_test_unresolved_func.py +22 -0
- warp/tests/aux_test_unresolved_symbol.py +22 -0
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/cuda/test_async.py +676 -0
- warp/tests/cuda/test_ipc.py +124 -0
- warp/tests/cuda/test_mempool.py +233 -0
- warp/tests/cuda/test_multigpu.py +169 -0
- warp/tests/cuda/test_peer.py +139 -0
- warp/tests/cuda/test_pinned.py +84 -0
- warp/tests/cuda/test_streams.py +634 -0
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/geometry/test_bvh.py +200 -0
- warp/tests/geometry/test_hash_grid.py +221 -0
- warp/tests/geometry/test_marching_cubes.py +74 -0
- warp/tests/geometry/test_mesh.py +316 -0
- warp/tests/geometry/test_mesh_query_aabb.py +399 -0
- warp/tests/geometry/test_mesh_query_point.py +932 -0
- warp/tests/geometry/test_mesh_query_ray.py +311 -0
- warp/tests/geometry/test_volume.py +1103 -0
- warp/tests/geometry/test_volume_write.py +346 -0
- warp/tests/interop/__init__.py +0 -0
- warp/tests/interop/test_dlpack.py +729 -0
- warp/tests/interop/test_jax.py +371 -0
- warp/tests/interop/test_paddle.py +800 -0
- warp/tests/interop/test_torch.py +1001 -0
- warp/tests/run_coverage_serial.py +39 -0
- warp/tests/sim/__init__.py +0 -0
- warp/tests/sim/disabled_kinematics.py +244 -0
- warp/tests/sim/flaky_test_sim_grad.py +290 -0
- warp/tests/sim/test_collision.py +604 -0
- warp/tests/sim/test_coloring.py +258 -0
- warp/tests/sim/test_model.py +224 -0
- warp/tests/sim/test_sim_grad_bounce_linear.py +212 -0
- warp/tests/sim/test_sim_kinematics.py +98 -0
- warp/tests/sim/test_vbd.py +597 -0
- warp/tests/test_adam.py +163 -0
- warp/tests/test_arithmetic.py +1096 -0
- warp/tests/test_array.py +2972 -0
- warp/tests/test_array_reduce.py +156 -0
- warp/tests/test_assert.py +250 -0
- warp/tests/test_atomic.py +153 -0
- warp/tests/test_bool.py +220 -0
- warp/tests/test_builtins_resolution.py +1298 -0
- warp/tests/test_closest_point_edge_edge.py +327 -0
- warp/tests/test_codegen.py +810 -0
- warp/tests/test_codegen_instancing.py +1495 -0
- warp/tests/test_compile_consts.py +215 -0
- warp/tests/test_conditional.py +252 -0
- warp/tests/test_context.py +42 -0
- warp/tests/test_copy.py +238 -0
- warp/tests/test_ctypes.py +638 -0
- warp/tests/test_dense.py +73 -0
- warp/tests/test_devices.py +97 -0
- warp/tests/test_examples.py +482 -0
- warp/tests/test_fabricarray.py +996 -0
- warp/tests/test_fast_math.py +74 -0
- warp/tests/test_fem.py +2003 -0
- warp/tests/test_fp16.py +136 -0
- warp/tests/test_func.py +454 -0
- warp/tests/test_future_annotations.py +98 -0
- warp/tests/test_generics.py +656 -0
- warp/tests/test_grad.py +893 -0
- warp/tests/test_grad_customs.py +339 -0
- warp/tests/test_grad_debug.py +341 -0
- warp/tests/test_implicit_init.py +411 -0
- warp/tests/test_import.py +45 -0
- warp/tests/test_indexedarray.py +1140 -0
- warp/tests/test_intersect.py +73 -0
- warp/tests/test_iter.py +76 -0
- warp/tests/test_large.py +177 -0
- warp/tests/test_launch.py +411 -0
- warp/tests/test_lerp.py +151 -0
- warp/tests/test_linear_solvers.py +193 -0
- warp/tests/test_lvalue.py +427 -0
- warp/tests/test_mat.py +2089 -0
- warp/tests/test_mat_lite.py +122 -0
- warp/tests/test_mat_scalar_ops.py +2913 -0
- warp/tests/test_math.py +178 -0
- warp/tests/test_mlp.py +282 -0
- warp/tests/test_module_hashing.py +258 -0
- warp/tests/test_modules_lite.py +44 -0
- warp/tests/test_noise.py +252 -0
- warp/tests/test_operators.py +299 -0
- warp/tests/test_options.py +129 -0
- warp/tests/test_overwrite.py +551 -0
- warp/tests/test_print.py +339 -0
- warp/tests/test_quat.py +2315 -0
- warp/tests/test_rand.py +339 -0
- warp/tests/test_reload.py +302 -0
- warp/tests/test_rounding.py +185 -0
- warp/tests/test_runlength_encode.py +196 -0
- warp/tests/test_scalar_ops.py +105 -0
- warp/tests/test_smoothstep.py +108 -0
- warp/tests/test_snippet.py +318 -0
- warp/tests/test_sparse.py +582 -0
- warp/tests/test_spatial.py +2229 -0
- warp/tests/test_special_values.py +361 -0
- warp/tests/test_static.py +592 -0
- warp/tests/test_struct.py +734 -0
- warp/tests/test_tape.py +204 -0
- warp/tests/test_transient_module.py +93 -0
- warp/tests/test_triangle_closest_point.py +145 -0
- warp/tests/test_types.py +562 -0
- warp/tests/test_utils.py +588 -0
- warp/tests/test_vec.py +1487 -0
- warp/tests/test_vec_lite.py +80 -0
- warp/tests/test_vec_scalar_ops.py +2327 -0
- warp/tests/test_verify_fp.py +100 -0
- warp/tests/tile/__init__.py +0 -0
- warp/tests/tile/test_tile.py +780 -0
- warp/tests/tile/test_tile_load.py +407 -0
- warp/tests/tile/test_tile_mathdx.py +208 -0
- warp/tests/tile/test_tile_mlp.py +402 -0
- warp/tests/tile/test_tile_reduce.py +447 -0
- warp/tests/tile/test_tile_shared_memory.py +247 -0
- warp/tests/tile/test_tile_view.py +173 -0
- warp/tests/unittest_serial.py +47 -0
- warp/tests/unittest_suites.py +427 -0
- warp/tests/unittest_utils.py +468 -0
- warp/tests/walkthrough_debug.py +93 -0
- warp/thirdparty/__init__.py +0 -0
- warp/thirdparty/appdirs.py +598 -0
- warp/thirdparty/dlpack.py +145 -0
- warp/thirdparty/unittest_parallel.py +570 -0
- warp/torch.py +391 -0
- warp/types.py +5230 -0
- warp/utils.py +1137 -0
- warp_lang-1.7.0.dist-info/METADATA +516 -0
- warp_lang-1.7.0.dist-info/RECORD +429 -0
- warp_lang-1.7.0.dist-info/WHEEL +5 -0
- warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
- warp_lang-1.7.0.dist-info/top_level.txt +1 -0
warp/tests/test_dense.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
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.
|
|
15
|
+
|
|
16
|
+
import unittest
|
|
17
|
+
|
|
18
|
+
import warp as wp
|
|
19
|
+
from warp.tests.unittest_utils import *
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@wp.kernel
|
|
23
|
+
def eval_dense_gemm(
|
|
24
|
+
m: int,
|
|
25
|
+
n: int,
|
|
26
|
+
p: int,
|
|
27
|
+
t1: int,
|
|
28
|
+
t2: int,
|
|
29
|
+
A: wp.array(dtype=float),
|
|
30
|
+
B: wp.array(dtype=float),
|
|
31
|
+
C: wp.array(dtype=float),
|
|
32
|
+
):
|
|
33
|
+
wp.dense_gemm(m, n, p, t1, t2, A, B, C)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@wp.kernel
|
|
37
|
+
def eval_dense_cholesky(n: int, A: wp.array(dtype=float), regularization: float, L: wp.array(dtype=float)):
|
|
38
|
+
wp.dense_chol(n, A, regularization, L)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@wp.kernel
|
|
42
|
+
def eval_dense_subs(n: int, L: wp.array(dtype=float), b: wp.array(dtype=float), x: wp.array(dtype=float)):
|
|
43
|
+
wp.dense_subs(n, L, b, x)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# helper that propagates gradients back to A, treating L as a constant / temporary variable
|
|
47
|
+
# allows us to reuse the Cholesky decomposition from the forward pass
|
|
48
|
+
@wp.kernel
|
|
49
|
+
def eval_dense_solve(
|
|
50
|
+
n: int, A: wp.array(dtype=float), L: wp.array(dtype=float), b: wp.array(dtype=float), x: wp.array(dtype=float)
|
|
51
|
+
):
|
|
52
|
+
wp.dense_solve(n, A, L, b, x)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_dense_compilation(test, device):
|
|
56
|
+
# just testing compilation of the dense matrix routines
|
|
57
|
+
# most are deprecated / WIP
|
|
58
|
+
wp.load_module(device=device)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
devices = get_test_devices()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class TestDense(unittest.TestCase):
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
add_function_test(TestDense, "test_dense_compilation", test_dense_compilation, devices=devices)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
if __name__ == "__main__":
|
|
72
|
+
wp.clear_kernel_cache()
|
|
73
|
+
unittest.main(verbosity=2)
|
|
@@ -0,0 +1,97 @@
|
|
|
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.
|
|
15
|
+
|
|
16
|
+
import unittest
|
|
17
|
+
|
|
18
|
+
import warp as wp
|
|
19
|
+
from warp.tests.unittest_utils import *
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_devices_get_cuda_device_functions(test, device):
|
|
23
|
+
test.assertTrue(device.is_cuda)
|
|
24
|
+
test.assertTrue(wp.is_device_available(device))
|
|
25
|
+
|
|
26
|
+
device_ordinal = device.ordinal
|
|
27
|
+
current_device = wp.get_cuda_device(device_ordinal)
|
|
28
|
+
test.assertEqual(current_device, device)
|
|
29
|
+
current_device = wp.get_cuda_device() # No-ordinal version
|
|
30
|
+
test.assertTrue(wp.is_device_available(current_device))
|
|
31
|
+
|
|
32
|
+
if device == current_device:
|
|
33
|
+
test.assertEqual(device, "cuda")
|
|
34
|
+
else:
|
|
35
|
+
test.assertNotEqual(device, "cuda")
|
|
36
|
+
|
|
37
|
+
preferred_device = wp.get_preferred_device()
|
|
38
|
+
test.assertTrue(wp.is_device_available(preferred_device))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def test_devices_map_cuda_device(test, device):
|
|
42
|
+
with wp.ScopedDevice(device):
|
|
43
|
+
saved_alias = device.alias
|
|
44
|
+
# Map alias twice to check code path
|
|
45
|
+
wp.map_cuda_device("new_alias")
|
|
46
|
+
wp.map_cuda_device("new_alias")
|
|
47
|
+
wp.context.runtime.rename_device(device, saved_alias)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_devices_verify_cuda_device(test, device):
|
|
51
|
+
verify_cuda_saved = wp.config.verify_cuda
|
|
52
|
+
|
|
53
|
+
wp.config.verify_cuda = True
|
|
54
|
+
|
|
55
|
+
wp.context.runtime.verify_cuda_device(device)
|
|
56
|
+
|
|
57
|
+
wp.config.verify_cuda = verify_cuda_saved
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@unittest.skipUnless(wp.is_cuda_available(), "Requires CUDA")
|
|
61
|
+
def test_devices_can_access_self(test, device):
|
|
62
|
+
test.assertTrue(device.can_access(device))
|
|
63
|
+
|
|
64
|
+
for warp_device in wp.get_devices():
|
|
65
|
+
device_str = str(warp_device)
|
|
66
|
+
|
|
67
|
+
if (device.is_cpu and warp_device.is_cuda) or (device.is_cuda and warp_device.is_cpu):
|
|
68
|
+
test.assertFalse(device.can_access(warp_device))
|
|
69
|
+
test.assertNotEqual(device, warp_device)
|
|
70
|
+
test.assertNotEqual(device, device_str)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
devices = get_test_devices()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class TestDevices(unittest.TestCase):
|
|
77
|
+
def test_devices_unmap_imaginary_device(self):
|
|
78
|
+
with self.assertRaises(RuntimeError):
|
|
79
|
+
wp.unmap_cuda_device("imaginary_device:0")
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
add_function_test(
|
|
83
|
+
TestDevices,
|
|
84
|
+
"test_devices_get_cuda_device_functions",
|
|
85
|
+
test_devices_get_cuda_device_functions,
|
|
86
|
+
devices=get_selected_cuda_test_devices(),
|
|
87
|
+
)
|
|
88
|
+
add_function_test(
|
|
89
|
+
TestDevices, "test_devices_map_cuda_device", test_devices_map_cuda_device, devices=get_selected_cuda_test_devices()
|
|
90
|
+
)
|
|
91
|
+
add_function_test(TestDevices, "test_devices_verify_cuda_device", test_devices_verify_cuda_device, devices=devices)
|
|
92
|
+
add_function_test(TestDevices, "test_devices_can_access_self", test_devices_can_access_self, devices=devices)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if __name__ == "__main__":
|
|
96
|
+
wp.clear_kernel_cache()
|
|
97
|
+
unittest.main(verbosity=2)
|
|
@@ -0,0 +1,482 @@
|
|
|
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.
|
|
15
|
+
"""Test Warp examples with unittest.
|
|
16
|
+
|
|
17
|
+
This module tests the Warp examples registered in it using the unittest
|
|
18
|
+
framework. When registering tests with add_example_test(), three optional
|
|
19
|
+
dictionaries can be provided: test_options, test_options_cuda, and
|
|
20
|
+
test_options_cpu. These are added to the command line arguments in-order, so
|
|
21
|
+
if a parameter is specified in both test_options and test_options_cuda, the
|
|
22
|
+
one in test_options_cuda will take precedence due to how argparse works.
|
|
23
|
+
|
|
24
|
+
Generally the test_options[_cpu,_cuda] dictionaries should be used to prevent
|
|
25
|
+
graphical windows from being open by the example {"headless": True} and to
|
|
26
|
+
override example defaults so the example can run in less than ten seconds.
|
|
27
|
+
|
|
28
|
+
To skip tests if the optional dependencies are not found, use the following keys:
|
|
29
|
+
- {"usd_required": True} (requires usd-core)
|
|
30
|
+
- {"torch_required": True} (requires torch)
|
|
31
|
+
- {"pillow_required": True} (requires pillow)
|
|
32
|
+
|
|
33
|
+
Use the "num_frames" and "train_iters" keys to control the number of steps.
|
|
34
|
+
|
|
35
|
+
Use "test_timeout" to override the default test timeout threshold of 600 seconds.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
import os
|
|
39
|
+
import subprocess
|
|
40
|
+
import sys
|
|
41
|
+
import unittest
|
|
42
|
+
from typing import Any, Dict, Optional, Type
|
|
43
|
+
|
|
44
|
+
import warp as wp
|
|
45
|
+
import warp.tests.unittest_utils
|
|
46
|
+
from warp.tests.unittest_utils import (
|
|
47
|
+
USD_AVAILABLE,
|
|
48
|
+
get_selected_cuda_test_devices,
|
|
49
|
+
get_test_devices,
|
|
50
|
+
sanitize_identifier,
|
|
51
|
+
)
|
|
52
|
+
from warp.utils import check_p2p
|
|
53
|
+
|
|
54
|
+
wp.init() # For wp.context.runtime.core.is_debug_enabled()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _build_command_line_options(test_options: Dict[str, Any]) -> list:
|
|
58
|
+
"""Helper function to build command-line options from the test options dictionary."""
|
|
59
|
+
additional_options = []
|
|
60
|
+
|
|
61
|
+
for key, value in test_options.items():
|
|
62
|
+
if key == "headless" and value:
|
|
63
|
+
additional_options.extend(["--headless"])
|
|
64
|
+
else:
|
|
65
|
+
# Just add --key value
|
|
66
|
+
additional_options.extend(["--" + key, str(value)])
|
|
67
|
+
|
|
68
|
+
return additional_options
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _merge_options(base_options: Dict[str, Any], device_options: Dict[str, Any]) -> Dict[str, Any]:
|
|
72
|
+
"""Helper function to merge base test options with device-specific test options."""
|
|
73
|
+
merged_options = base_options.copy()
|
|
74
|
+
|
|
75
|
+
# Update options with device-specific dictionary, overwriting existing keys with the more-specific values
|
|
76
|
+
merged_options.update(device_options)
|
|
77
|
+
return merged_options
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def add_example_test(
|
|
81
|
+
cls: Type,
|
|
82
|
+
name: str,
|
|
83
|
+
devices: Optional[list] = None,
|
|
84
|
+
test_options: Optional[Dict[str, Any]] = None,
|
|
85
|
+
test_options_cpu: Optional[Dict[str, Any]] = None,
|
|
86
|
+
test_options_cuda: Optional[Dict[str, Any]] = None,
|
|
87
|
+
):
|
|
88
|
+
"""Registers a Warp example to run on ``devices`` as a TestCase."""
|
|
89
|
+
|
|
90
|
+
if test_options is None:
|
|
91
|
+
test_options = {}
|
|
92
|
+
if test_options_cpu is None:
|
|
93
|
+
test_options_cpu = {}
|
|
94
|
+
if test_options_cuda is None:
|
|
95
|
+
test_options_cuda = {}
|
|
96
|
+
|
|
97
|
+
def run(test, device):
|
|
98
|
+
if wp.get_device(device).is_cuda:
|
|
99
|
+
options = _merge_options(test_options, test_options_cuda)
|
|
100
|
+
else:
|
|
101
|
+
options = _merge_options(test_options, test_options_cpu)
|
|
102
|
+
|
|
103
|
+
# Mark the test as skipped if Torch is not installed but required
|
|
104
|
+
torch_required = options.pop("torch_required", False)
|
|
105
|
+
if torch_required:
|
|
106
|
+
try:
|
|
107
|
+
import torch
|
|
108
|
+
|
|
109
|
+
if wp.get_device(device).is_cuda and not torch.cuda.is_available():
|
|
110
|
+
# Ensure torch has CUDA support
|
|
111
|
+
test.skipTest("Torch not compiled with CUDA support")
|
|
112
|
+
|
|
113
|
+
except Exception as e:
|
|
114
|
+
test.skipTest(f"{e}")
|
|
115
|
+
|
|
116
|
+
# Mark the test as skipped if USD is not installed but required
|
|
117
|
+
usd_required = options.pop("usd_required", False)
|
|
118
|
+
if usd_required and not USD_AVAILABLE:
|
|
119
|
+
test.skipTest("Requires usd-core")
|
|
120
|
+
|
|
121
|
+
# Mark the test as skipped if pillow is not installed but required
|
|
122
|
+
pillow_required = options.pop("pillow_required", False)
|
|
123
|
+
if pillow_required:
|
|
124
|
+
try:
|
|
125
|
+
import PIL # noqa: F401
|
|
126
|
+
except ImportError:
|
|
127
|
+
test.skipTest("Requires pillow")
|
|
128
|
+
|
|
129
|
+
# Find the current Warp cache
|
|
130
|
+
warp_cache_path = wp.config.kernel_cache_dir
|
|
131
|
+
|
|
132
|
+
env_vars = os.environ.copy()
|
|
133
|
+
if warp_cache_path is not None:
|
|
134
|
+
env_vars["WARP_CACHE_PATH"] = warp_cache_path
|
|
135
|
+
|
|
136
|
+
if warp.tests.unittest_utils.coverage_enabled:
|
|
137
|
+
import tempfile
|
|
138
|
+
|
|
139
|
+
# Generate a random coverage data file name - file is deleted along with containing directory
|
|
140
|
+
with tempfile.NamedTemporaryFile(
|
|
141
|
+
dir=warp.tests.unittest_utils.coverage_temp_dir, delete=False
|
|
142
|
+
) as coverage_file:
|
|
143
|
+
pass
|
|
144
|
+
|
|
145
|
+
command = ["coverage", "run", f"--data-file={coverage_file.name}"]
|
|
146
|
+
|
|
147
|
+
if warp.tests.unittest_utils.coverage_branch:
|
|
148
|
+
command.append("--branch")
|
|
149
|
+
|
|
150
|
+
else:
|
|
151
|
+
command = [sys.executable]
|
|
152
|
+
|
|
153
|
+
# Append Warp commands
|
|
154
|
+
command.extend(["-m", f"warp.examples.{name}", "--device", str(device)])
|
|
155
|
+
|
|
156
|
+
stage_path = (
|
|
157
|
+
options.pop(
|
|
158
|
+
"stage_path",
|
|
159
|
+
os.path.join(os.path.dirname(__file__), f"outputs/{name}_{sanitize_identifier(device)}.usd"),
|
|
160
|
+
)
|
|
161
|
+
if USD_AVAILABLE
|
|
162
|
+
else "None"
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
if stage_path:
|
|
166
|
+
command.extend(["--stage_path", stage_path])
|
|
167
|
+
try:
|
|
168
|
+
os.remove(stage_path)
|
|
169
|
+
except OSError:
|
|
170
|
+
pass
|
|
171
|
+
|
|
172
|
+
command.extend(_build_command_line_options(options))
|
|
173
|
+
|
|
174
|
+
# Set the test timeout in seconds
|
|
175
|
+
test_timeout = options.pop("test_timeout", 600)
|
|
176
|
+
|
|
177
|
+
# with wp.ScopedTimer(f"{name}_{sanitize_identifier(device)}"):
|
|
178
|
+
# Run the script as a subprocess
|
|
179
|
+
result = subprocess.run(
|
|
180
|
+
command, capture_output=True, text=True, env=env_vars, timeout=test_timeout, check=False
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
# Check the return code (0 is standard for success)
|
|
184
|
+
test.assertEqual(
|
|
185
|
+
result.returncode,
|
|
186
|
+
0,
|
|
187
|
+
msg=f"Failed with return code {result.returncode}, command: {' '.join(command)}\n\nOutput:\n{result.stdout}\n{result.stderr}",
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# If the test succeeded, try to clean up the output by default
|
|
191
|
+
if stage_path and result.returncode == 0:
|
|
192
|
+
try:
|
|
193
|
+
os.remove(stage_path)
|
|
194
|
+
except OSError:
|
|
195
|
+
pass
|
|
196
|
+
|
|
197
|
+
from warp.tests.unittest_utils import add_function_test
|
|
198
|
+
|
|
199
|
+
add_function_test(cls, f"test_{name}", run, devices=devices, check_output=False)
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
cuda_test_devices = get_selected_cuda_test_devices(mode="basic") # Don't test on multiple GPUs to save time
|
|
203
|
+
test_devices = get_test_devices(mode="basic")
|
|
204
|
+
|
|
205
|
+
# NOTE: To give the parallel test runner more opportunities to parallelize test cases,
|
|
206
|
+
# we break up the tests into multiple TestCase classes
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class TestCoreExamples(unittest.TestCase):
|
|
210
|
+
pass
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
# Exclude unless we can run headless somehow
|
|
214
|
+
# add_example_test(TestCoreExamples, name="example_render_opengl")
|
|
215
|
+
|
|
216
|
+
add_example_test(TestCoreExamples, name="core.example_dem", devices=test_devices, test_options_cpu={"num_frames": 2})
|
|
217
|
+
add_example_test(
|
|
218
|
+
TestCoreExamples,
|
|
219
|
+
name="core.example_fluid",
|
|
220
|
+
devices=test_devices,
|
|
221
|
+
test_options={"num_frames": 100, "headless": True},
|
|
222
|
+
)
|
|
223
|
+
add_example_test(
|
|
224
|
+
TestCoreExamples,
|
|
225
|
+
name="core.example_graph_capture",
|
|
226
|
+
devices=test_devices,
|
|
227
|
+
test_options={"headless": True},
|
|
228
|
+
test_options_cpu={"num_frames": 100},
|
|
229
|
+
)
|
|
230
|
+
add_example_test(TestCoreExamples, name="core.example_marching_cubes", devices=cuda_test_devices)
|
|
231
|
+
add_example_test(TestCoreExamples, name="core.example_mesh", devices=test_devices, test_options={"usd_required": True})
|
|
232
|
+
add_example_test(
|
|
233
|
+
TestCoreExamples, name="core.example_mesh_intersect", devices=test_devices, test_options={"usd_required": True}
|
|
234
|
+
)
|
|
235
|
+
add_example_test(TestCoreExamples, name="core.example_nvdb", devices=test_devices)
|
|
236
|
+
add_example_test(
|
|
237
|
+
TestCoreExamples,
|
|
238
|
+
name="core.example_raycast",
|
|
239
|
+
devices=test_devices,
|
|
240
|
+
test_options={"usd_required": True, "headless": True},
|
|
241
|
+
)
|
|
242
|
+
add_example_test(
|
|
243
|
+
TestCoreExamples,
|
|
244
|
+
name="core.example_raymarch",
|
|
245
|
+
devices=test_devices,
|
|
246
|
+
test_options={"height": 512, "width": 1024, "headless": True},
|
|
247
|
+
)
|
|
248
|
+
add_example_test(
|
|
249
|
+
TestCoreExamples,
|
|
250
|
+
name="core.example_sample_mesh",
|
|
251
|
+
devices=test_devices,
|
|
252
|
+
test_options_cpu={"num_frames": 1},
|
|
253
|
+
)
|
|
254
|
+
add_example_test(
|
|
255
|
+
TestCoreExamples,
|
|
256
|
+
name="core.example_sph",
|
|
257
|
+
devices=test_devices,
|
|
258
|
+
test_options_cpu={"num_frames": 1},
|
|
259
|
+
)
|
|
260
|
+
add_example_test(
|
|
261
|
+
TestCoreExamples,
|
|
262
|
+
name="core.example_torch",
|
|
263
|
+
devices=test_devices,
|
|
264
|
+
test_options={"headless": True, "num_frames": 1000, "torch_required": True},
|
|
265
|
+
)
|
|
266
|
+
add_example_test(TestCoreExamples, name="core.example_wave", devices=test_devices)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class TestOptimExamples(unittest.TestCase):
|
|
270
|
+
pass
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
add_example_test(
|
|
274
|
+
TestOptimExamples,
|
|
275
|
+
name="optim.example_bounce",
|
|
276
|
+
devices=test_devices,
|
|
277
|
+
test_options_cpu={"train_iters": 3},
|
|
278
|
+
)
|
|
279
|
+
add_example_test(
|
|
280
|
+
TestOptimExamples,
|
|
281
|
+
name="optim.example_drone",
|
|
282
|
+
devices=test_devices,
|
|
283
|
+
test_options={"headless": True},
|
|
284
|
+
test_options_cpu={"num_frames": 10},
|
|
285
|
+
)
|
|
286
|
+
add_example_test(
|
|
287
|
+
TestOptimExamples,
|
|
288
|
+
name="optim.example_cloth_throw",
|
|
289
|
+
devices=test_devices,
|
|
290
|
+
test_options_cpu={"train_iters": 3},
|
|
291
|
+
)
|
|
292
|
+
add_example_test(
|
|
293
|
+
TestOptimExamples,
|
|
294
|
+
name="optim.example_diffray",
|
|
295
|
+
devices=test_devices,
|
|
296
|
+
test_options={"usd_required": True, "headless": True},
|
|
297
|
+
test_options_cpu={"train_iters": 2},
|
|
298
|
+
)
|
|
299
|
+
add_example_test(
|
|
300
|
+
TestOptimExamples,
|
|
301
|
+
name="optim.example_fluid_checkpoint",
|
|
302
|
+
devices=cuda_test_devices,
|
|
303
|
+
test_options={"headless": True, "train_iters": 5, "num_frames": 300, "pillow_required": True},
|
|
304
|
+
)
|
|
305
|
+
add_example_test(TestOptimExamples, name="optim.example_inverse_kinematics", devices=test_devices)
|
|
306
|
+
add_example_test(
|
|
307
|
+
TestOptimExamples,
|
|
308
|
+
name="optim.example_inverse_kinematics_torch",
|
|
309
|
+
devices=test_devices,
|
|
310
|
+
test_options={"torch_required": True},
|
|
311
|
+
)
|
|
312
|
+
add_example_test(TestOptimExamples, name="optim.example_spring_cage", devices=test_devices)
|
|
313
|
+
add_example_test(
|
|
314
|
+
TestOptimExamples,
|
|
315
|
+
name="optim.example_trajectory",
|
|
316
|
+
devices=test_devices,
|
|
317
|
+
test_options={"headless": True, "train_iters": 50},
|
|
318
|
+
)
|
|
319
|
+
add_example_test(
|
|
320
|
+
TestOptimExamples,
|
|
321
|
+
name="optim.example_softbody_properties",
|
|
322
|
+
devices=test_devices,
|
|
323
|
+
test_options_cuda={
|
|
324
|
+
"train_iters": 1 if warp.context.runtime.core.is_debug_enabled() else 3,
|
|
325
|
+
},
|
|
326
|
+
test_options_cpu={"train_iters": 1},
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
class TestSimExamples(unittest.TestCase):
|
|
331
|
+
pass
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
add_example_test(TestSimExamples, name="sim.example_cartpole", devices=test_devices)
|
|
335
|
+
add_example_test(
|
|
336
|
+
TestSimExamples,
|
|
337
|
+
name="sim.example_cloth",
|
|
338
|
+
devices=test_devices,
|
|
339
|
+
test_options={"usd_required": True},
|
|
340
|
+
test_options_cpu={"num_frames": 10},
|
|
341
|
+
)
|
|
342
|
+
add_example_test(
|
|
343
|
+
TestSimExamples, name="sim.example_granular", devices=test_devices, test_options_cpu={"num_frames": 10}
|
|
344
|
+
)
|
|
345
|
+
add_example_test(TestSimExamples, name="sim.example_granular_collision_sdf", devices=cuda_test_devices)
|
|
346
|
+
add_example_test(TestSimExamples, name="sim.example_jacobian_ik", devices=test_devices)
|
|
347
|
+
add_example_test(TestSimExamples, name="sim.example_particle_chain", devices=test_devices)
|
|
348
|
+
add_example_test(
|
|
349
|
+
TestSimExamples, name="sim.example_quadruped", devices=test_devices, test_options_cpu={"num_frames": 100}
|
|
350
|
+
)
|
|
351
|
+
add_example_test(TestSimExamples, name="sim.example_rigid_chain", devices=test_devices)
|
|
352
|
+
add_example_test(
|
|
353
|
+
TestSimExamples,
|
|
354
|
+
name="sim.example_rigid_contact",
|
|
355
|
+
devices=test_devices,
|
|
356
|
+
test_options={"usd_required": True},
|
|
357
|
+
test_options_cpu={"num_frames": 3},
|
|
358
|
+
)
|
|
359
|
+
add_example_test(
|
|
360
|
+
TestSimExamples, name="sim.example_rigid_soft_contact", devices=test_devices, test_options_cpu={"num_frames": 10}
|
|
361
|
+
)
|
|
362
|
+
add_example_test(TestSimExamples, name="sim.example_rigid_force", devices=test_devices)
|
|
363
|
+
add_example_test(TestSimExamples, name="sim.example_rigid_gyroscopic", devices=test_devices)
|
|
364
|
+
add_example_test(
|
|
365
|
+
TestSimExamples, name="sim.example_soft_body", devices=test_devices, test_options_cpu={"num_frames": 10}
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
class TestFemExamples(unittest.TestCase):
|
|
370
|
+
pass
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
class TestFemDiffusionExamples(unittest.TestCase):
|
|
374
|
+
pass
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
# MGPU tests may fail on systems where P2P transfers are misconfigured
|
|
378
|
+
if check_p2p():
|
|
379
|
+
add_example_test(
|
|
380
|
+
TestFemDiffusionExamples,
|
|
381
|
+
name="fem.example_diffusion_mgpu",
|
|
382
|
+
devices=get_selected_cuda_test_devices(mode="basic"),
|
|
383
|
+
test_options={"headless": True},
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
add_example_test(
|
|
387
|
+
TestFemExamples,
|
|
388
|
+
name="fem.example_apic_fluid",
|
|
389
|
+
devices=get_selected_cuda_test_devices(mode="basic"),
|
|
390
|
+
test_options={"num_frames": 5, "voxel_size": 2.0},
|
|
391
|
+
)
|
|
392
|
+
add_example_test(
|
|
393
|
+
TestFemExamples,
|
|
394
|
+
name="fem.example_adaptive_grid",
|
|
395
|
+
devices=get_selected_cuda_test_devices(mode="basic"),
|
|
396
|
+
test_options={"headless": True, "div_conforming": True},
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
# The following examples do not need CUDA
|
|
400
|
+
add_example_test(
|
|
401
|
+
TestFemDiffusionExamples,
|
|
402
|
+
name="fem.example_diffusion",
|
|
403
|
+
devices=test_devices,
|
|
404
|
+
test_options={"resolution": 10, "mesh": "tri", "headless": True},
|
|
405
|
+
)
|
|
406
|
+
add_example_test(
|
|
407
|
+
TestFemDiffusionExamples, name="fem.example_diffusion_3d", devices=test_devices, test_options={"headless": True}
|
|
408
|
+
)
|
|
409
|
+
add_example_test(
|
|
410
|
+
TestFemExamples,
|
|
411
|
+
name="fem.example_deformed_geometry",
|
|
412
|
+
devices=test_devices,
|
|
413
|
+
test_options={"resolution": 10, "mesh": "tri", "headless": True},
|
|
414
|
+
)
|
|
415
|
+
add_example_test(
|
|
416
|
+
TestFemExamples,
|
|
417
|
+
name="fem.example_convection_diffusion",
|
|
418
|
+
devices=test_devices,
|
|
419
|
+
test_options={"resolution": 20, "headless": True},
|
|
420
|
+
)
|
|
421
|
+
add_example_test(
|
|
422
|
+
TestFemExamples,
|
|
423
|
+
name="fem.example_burgers",
|
|
424
|
+
devices=test_devices,
|
|
425
|
+
test_options={"resolution": 20, "num_frames": 25, "degree": 1, "headless": True},
|
|
426
|
+
)
|
|
427
|
+
add_example_test(
|
|
428
|
+
TestFemExamples,
|
|
429
|
+
name="fem.example_convection_diffusion_dg",
|
|
430
|
+
devices=test_devices,
|
|
431
|
+
test_options={"resolution": 20, "num_frames": 25, "headless": True},
|
|
432
|
+
)
|
|
433
|
+
add_example_test(
|
|
434
|
+
TestFemExamples,
|
|
435
|
+
name="fem.example_mixed_elasticity",
|
|
436
|
+
devices=test_devices,
|
|
437
|
+
test_options={"nonconforming_stresses": True, "mesh": "quad", "headless": True},
|
|
438
|
+
)
|
|
439
|
+
add_example_test(
|
|
440
|
+
TestFemExamples, name="fem.example_stokes_transfer", devices=test_devices, test_options={"headless": True}
|
|
441
|
+
)
|
|
442
|
+
add_example_test(
|
|
443
|
+
TestFemExamples,
|
|
444
|
+
name="fem.example_stokes",
|
|
445
|
+
devices=test_devices,
|
|
446
|
+
test_options={"resolution": 10, "nonconforming_pressures": True, "headless": True},
|
|
447
|
+
)
|
|
448
|
+
add_example_test(
|
|
449
|
+
TestFemExamples,
|
|
450
|
+
name="fem.example_navier_stokes",
|
|
451
|
+
devices=test_devices,
|
|
452
|
+
test_options={"num_frames": 101, "resolution": 10, "tri_mesh": True, "headless": True},
|
|
453
|
+
)
|
|
454
|
+
add_example_test(
|
|
455
|
+
TestFemExamples,
|
|
456
|
+
name="fem.example_streamlines",
|
|
457
|
+
devices=get_selected_cuda_test_devices(),
|
|
458
|
+
test_options={"headless": True},
|
|
459
|
+
)
|
|
460
|
+
add_example_test(
|
|
461
|
+
TestFemExamples,
|
|
462
|
+
name="fem.example_distortion_energy",
|
|
463
|
+
devices=get_selected_cuda_test_devices(),
|
|
464
|
+
test_options={"headless": True, "resolution": 16},
|
|
465
|
+
)
|
|
466
|
+
add_example_test(
|
|
467
|
+
TestFemExamples,
|
|
468
|
+
name="fem.example_magnetostatics",
|
|
469
|
+
devices=test_devices,
|
|
470
|
+
test_options={"headless": True, "resolution": 16},
|
|
471
|
+
)
|
|
472
|
+
add_example_test(
|
|
473
|
+
TestFemExamples,
|
|
474
|
+
name="fem.example_nonconforming_contact",
|
|
475
|
+
devices=test_devices,
|
|
476
|
+
test_options={"headless": True, "resolution": 16, "num_steps": 2},
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
if __name__ == "__main__":
|
|
480
|
+
# force rebuild of all kernels
|
|
481
|
+
wp.clear_kernel_cache()
|
|
482
|
+
unittest.main(verbosity=2)
|