warp-lang 1.6.1__py3-none-win_amd64.whl → 1.7.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of warp-lang might be problematic. Click here for more details.
- warp/__init__.py +21 -7
- warp/autograd.py +14 -6
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +424 -6
- warp/build_dll.py +20 -20
- warp/builtins.py +467 -368
- warp/codegen.py +193 -125
- warp/config.py +56 -12
- warp/constants.py +14 -6
- warp/context.py +524 -277
- warp/dlpack.py +22 -12
- warp/examples/__init__.py +14 -6
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/benchmarks/benchmark_api.py +14 -6
- warp/examples/benchmarks/benchmark_cloth.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_cupy.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_jax.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_numba.py +15 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_paddle.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_taichi.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_warp.py +14 -6
- warp/examples/benchmarks/benchmark_gemm.py +82 -48
- warp/examples/benchmarks/benchmark_interop_paddle.py +14 -6
- warp/examples/benchmarks/benchmark_interop_torch.py +14 -6
- warp/examples/benchmarks/benchmark_launches.py +14 -6
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/browse.py +14 -6
- warp/examples/core/example_cupy.py +14 -6
- warp/examples/core/example_dem.py +14 -6
- warp/examples/core/example_fluid.py +14 -6
- warp/examples/core/example_graph_capture.py +14 -6
- warp/examples/core/example_marching_cubes.py +14 -6
- warp/examples/core/example_mesh.py +14 -6
- warp/examples/core/example_mesh_intersect.py +14 -6
- warp/examples/core/example_nvdb.py +14 -6
- warp/examples/core/example_raycast.py +14 -6
- warp/examples/core/example_raymarch.py +14 -6
- warp/examples/core/example_render_opengl.py +14 -6
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +14 -6
- warp/examples/core/example_torch.py +14 -6
- warp/examples/core/example_wave.py +14 -6
- warp/examples/fem/example_adaptive_grid.py +14 -6
- warp/examples/fem/example_apic_fluid.py +15 -7
- warp/examples/fem/example_burgers.py +16 -8
- warp/examples/fem/example_convection_diffusion.py +14 -6
- warp/examples/fem/example_convection_diffusion_dg.py +14 -6
- warp/examples/fem/example_deformed_geometry.py +15 -7
- warp/examples/fem/example_diffusion.py +14 -6
- warp/examples/fem/example_diffusion_3d.py +14 -6
- warp/examples/fem/example_diffusion_mgpu.py +14 -6
- warp/examples/fem/example_distortion_energy.py +15 -7
- warp/examples/fem/example_magnetostatics.py +20 -12
- warp/examples/fem/example_mixed_elasticity.py +14 -6
- warp/examples/fem/example_navier_stokes.py +14 -6
- warp/examples/fem/example_nonconforming_contact.py +14 -6
- warp/examples/fem/example_stokes.py +14 -6
- warp/examples/fem/example_stokes_transfer.py +14 -6
- warp/examples/fem/example_streamlines.py +14 -6
- warp/examples/fem/utils.py +24 -3
- 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 +14 -6
- warp/examples/optim/example_cloth_throw.py +14 -6
- warp/examples/optim/example_diffray.py +14 -6
- warp/examples/optim/example_drone.py +14 -6
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/optim/example_inverse_kinematics.py +14 -6
- warp/examples/optim/example_inverse_kinematics_torch.py +14 -6
- warp/examples/optim/example_softbody_properties.py +14 -6
- warp/examples/optim/example_spring_cage.py +14 -6
- warp/examples/optim/example_trajectory.py +14 -6
- warp/examples/sim/example_cartpole.py +14 -6
- warp/examples/sim/example_cloth.py +14 -6
- warp/examples/sim/example_cloth_self_contact.py +14 -6
- warp/examples/sim/example_granular.py +14 -6
- warp/examples/sim/example_granular_collision_sdf.py +14 -6
- warp/examples/sim/example_jacobian_ik.py +14 -6
- warp/examples/sim/example_particle_chain.py +14 -6
- warp/examples/sim/example_quadruped.py +14 -6
- warp/examples/sim/example_rigid_chain.py +14 -6
- warp/examples/sim/example_rigid_contact.py +14 -6
- warp/examples/sim/example_rigid_force.py +14 -6
- warp/examples/sim/example_rigid_gyroscopic.py +14 -6
- warp/examples/sim/example_rigid_soft_contact.py +14 -6
- warp/examples/sim/example_soft_body.py +14 -6
- warp/examples/tile/example_tile_cholesky.py +14 -6
- warp/examples/tile/example_tile_convolution.py +14 -6
- warp/examples/tile/example_tile_fft.py +14 -6
- warp/examples/tile/example_tile_filtering.py +14 -6
- warp/examples/tile/example_tile_matmul.py +16 -10
- warp/examples/tile/example_tile_mlp.py +14 -6
- warp/examples/tile/example_tile_nbody.py +14 -6
- warp/examples/tile/example_tile_walker.py +14 -6
- warp/fabric.py +15 -0
- warp/fem/__init__.py +26 -1
- warp/fem/adaptivity.py +19 -4
- warp/fem/cache.py +15 -0
- warp/fem/dirichlet.py +15 -0
- warp/fem/domain.py +15 -0
- warp/fem/field/__init__.py +15 -0
- warp/fem/field/field.py +15 -0
- warp/fem/field/nodal_field.py +37 -68
- warp/fem/field/restriction.py +15 -0
- warp/fem/field/virtual.py +77 -23
- warp/fem/geometry/__init__.py +15 -0
- warp/fem/geometry/adaptive_nanogrid.py +24 -10
- warp/fem/geometry/closest_point.py +16 -1
- warp/fem/geometry/deformed_geometry.py +20 -2
- warp/fem/geometry/element.py +15 -0
- warp/fem/geometry/geometry.py +20 -0
- warp/fem/geometry/grid_2d.py +27 -12
- warp/fem/geometry/grid_3d.py +27 -15
- warp/fem/geometry/hexmesh.py +20 -7
- warp/fem/geometry/nanogrid.py +24 -11
- warp/fem/geometry/partition.py +15 -0
- warp/fem/geometry/quadmesh.py +28 -13
- warp/fem/geometry/tetmesh.py +18 -4
- warp/fem/geometry/trimesh.py +18 -8
- warp/fem/integrate.py +277 -93
- warp/fem/linalg.py +20 -5
- warp/fem/operator.py +15 -0
- warp/fem/polynomial.py +15 -0
- warp/fem/quadrature/__init__.py +15 -0
- warp/fem/quadrature/pic_quadrature.py +52 -22
- warp/fem/quadrature/quadrature.py +209 -25
- warp/fem/space/__init__.py +16 -1
- warp/fem/space/basis_function_space.py +19 -2
- warp/fem/space/basis_space.py +40 -18
- warp/fem/space/dof_mapper.py +15 -0
- warp/fem/space/function_space.py +15 -0
- warp/fem/space/grid_2d_function_space.py +15 -0
- warp/fem/space/grid_3d_function_space.py +15 -0
- warp/fem/space/hexmesh_function_space.py +17 -2
- warp/fem/space/nanogrid_function_space.py +15 -0
- warp/fem/space/partition.py +21 -2
- warp/fem/space/quadmesh_function_space.py +23 -8
- warp/fem/space/restriction.py +15 -0
- warp/fem/space/shape/__init__.py +15 -0
- warp/fem/space/shape/cube_shape_function.py +38 -23
- warp/fem/space/shape/shape_function.py +15 -0
- warp/fem/space/shape/square_shape_function.py +27 -12
- warp/fem/space/shape/tet_shape_function.py +15 -0
- warp/fem/space/shape/triangle_shape_function.py +16 -1
- warp/fem/space/tetmesh_function_space.py +18 -3
- warp/fem/space/topology.py +15 -0
- warp/fem/space/trimesh_function_space.py +17 -2
- warp/fem/types.py +15 -0
- warp/fem/utils.py +27 -6
- warp/jax.py +28 -7
- warp/jax_experimental/__init__.py +16 -0
- warp/{jax_experimental.py → jax_experimental/custom_call.py} +28 -33
- warp/jax_experimental/ffi.py +698 -0
- warp/jax_experimental/xla_ffi.py +602 -0
- warp/math.py +103 -6
- warp/native/array.h +28 -6
- warp/native/builtin.h +44 -9
- warp/native/bvh.cpp +18 -7
- warp/native/bvh.cu +57 -20
- warp/native/bvh.h +17 -7
- warp/native/clang/clang.cpp +45 -9
- warp/native/coloring.cpp +15 -6
- warp/native/crt.cpp +15 -6
- warp/native/crt.h +15 -6
- warp/native/cuda_crt.h +15 -6
- warp/native/cuda_util.cpp +29 -6
- warp/native/cuda_util.h +17 -6
- warp/native/error.cpp +15 -6
- warp/native/error.h +15 -6
- warp/native/exports.h +85 -63
- warp/native/fabric.h +15 -6
- warp/native/hashgrid.cpp +15 -6
- warp/native/hashgrid.cu +15 -6
- warp/native/hashgrid.h +15 -6
- warp/native/initializer_array.h +15 -6
- warp/native/intersect.h +41 -32
- warp/native/intersect_adj.h +48 -39
- warp/native/intersect_tri.h +17 -0
- warp/native/marching.cpp +16 -0
- warp/native/marching.cu +16 -7
- warp/native/marching.h +17 -0
- warp/native/mat.h +528 -15
- warp/native/mathdx.cpp +15 -6
- warp/native/matnn.h +15 -6
- warp/native/mesh.cpp +15 -6
- warp/native/mesh.cu +15 -6
- warp/native/mesh.h +25 -16
- warp/native/noise.h +15 -6
- warp/native/quat.h +114 -17
- warp/native/rand.h +21 -6
- warp/native/range.h +15 -6
- warp/native/reduce.cpp +15 -6
- warp/native/reduce.cu +15 -6
- warp/native/runlength_encode.cpp +15 -6
- warp/native/runlength_encode.cu +15 -6
- warp/native/scan.cpp +15 -6
- warp/native/scan.cu +15 -6
- warp/native/scan.h +15 -6
- warp/native/solid_angle.h +17 -0
- warp/native/sort.cpp +137 -65
- warp/native/sort.cu +167 -21
- warp/native/sort.h +23 -7
- warp/native/sparse.cpp +58 -28
- warp/native/sparse.cu +67 -23
- warp/native/spatial.h +15 -6
- warp/native/svd.h +131 -6
- warp/native/temp_buffer.h +15 -6
- warp/native/tile.h +316 -111
- warp/native/tile_reduce.h +61 -9
- warp/native/vec.h +83 -13
- warp/native/volume.cpp +100 -119
- warp/native/volume.cu +15 -6
- warp/native/volume.h +15 -6
- warp/native/volume_builder.cu +40 -16
- warp/native/volume_builder.h +21 -6
- warp/native/volume_impl.h +15 -6
- warp/native/warp.cpp +20 -12
- warp/native/warp.cu +114 -16
- warp/native/warp.h +34 -16
- warp/optim/__init__.py +14 -6
- warp/optim/adam.py +14 -6
- warp/optim/linear.py +25 -10
- warp/optim/sgd.py +14 -6
- warp/paddle.py +14 -6
- warp/render/__init__.py +14 -6
- warp/render/render_opengl.py +14 -6
- warp/render/render_usd.py +14 -6
- warp/render/utils.py +14 -6
- warp/sim/__init__.py +14 -7
- warp/sim/articulation.py +18 -10
- warp/sim/collide.py +35 -16
- warp/sim/graph_coloring.py +14 -6
- warp/sim/import_mjcf.py +463 -162
- warp/sim/import_snu.py +14 -7
- warp/sim/import_urdf.py +46 -18
- warp/sim/import_usd.py +14 -7
- warp/sim/inertia.py +14 -6
- warp/sim/integrator.py +14 -6
- warp/sim/integrator_euler.py +19 -11
- warp/sim/integrator_featherstone.py +17 -16
- warp/sim/integrator_vbd.py +222 -8
- warp/sim/integrator_xpbd.py +19 -11
- warp/sim/model.py +56 -19
- warp/sim/particles.py +14 -6
- warp/sim/render.py +14 -6
- warp/sim/utils.py +17 -2
- warp/sparse.py +657 -555
- warp/stubs.py +231 -19
- warp/tape.py +14 -6
- warp/tests/aux_test_class_kernel.py +14 -6
- warp/tests/aux_test_compile_consts_dummy.py +14 -6
- warp/tests/aux_test_conditional_unequal_types_kernels.py +14 -6
- warp/tests/aux_test_dependent.py +14 -6
- warp/tests/aux_test_grad_customs.py +14 -6
- warp/tests/aux_test_instancing_gc.py +14 -6
- warp/tests/aux_test_module_unload.py +14 -6
- warp/tests/aux_test_name_clash1.py +14 -6
- warp/tests/aux_test_name_clash2.py +14 -6
- warp/tests/aux_test_unresolved_func.py +14 -6
- warp/tests/aux_test_unresolved_symbol.py +14 -6
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/{test_async.py → cuda/test_async.py} +14 -6
- warp/tests/{test_ipc.py → cuda/test_ipc.py} +14 -6
- warp/tests/{test_mempool.py → cuda/test_mempool.py} +53 -6
- warp/tests/{test_multigpu.py → cuda/test_multigpu.py} +14 -6
- warp/tests/{test_peer.py → cuda/test_peer.py} +14 -6
- warp/tests/{test_pinned.py → cuda/test_pinned.py} +14 -6
- warp/tests/{test_streams.py → cuda/test_streams.py} +85 -6
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/{test_bvh.py → geometry/test_bvh.py} +14 -6
- warp/tests/{test_hash_grid.py → geometry/test_hash_grid.py} +14 -6
- warp/tests/{test_marching_cubes.py → geometry/test_marching_cubes.py} +14 -6
- warp/tests/{test_mesh.py → geometry/test_mesh.py} +14 -6
- warp/tests/{test_mesh_query_aabb.py → geometry/test_mesh_query_aabb.py} +14 -6
- warp/tests/{test_mesh_query_point.py → geometry/test_mesh_query_point.py} +80 -69
- warp/tests/{test_mesh_query_ray.py → geometry/test_mesh_query_ray.py} +15 -7
- warp/tests/{test_volume.py → geometry/test_volume.py} +55 -12
- warp/tests/{test_volume_write.py → geometry/test_volume_write.py} +14 -6
- warp/tests/interop/__init__.py +0 -0
- warp/tests/{test_dlpack.py → interop/test_dlpack.py} +42 -11
- warp/tests/{test_jax.py → interop/test_jax.py} +14 -6
- warp/tests/{test_paddle.py → interop/test_paddle.py} +14 -6
- warp/tests/{test_torch.py → interop/test_torch.py} +14 -6
- warp/tests/run_coverage_serial.py +14 -6
- warp/tests/sim/__init__.py +0 -0
- warp/tests/{disabled_kinematics.py → sim/disabled_kinematics.py} +23 -16
- warp/tests/{flaky_test_sim_grad.py → sim/flaky_test_sim_grad.py} +14 -6
- warp/tests/{test_collision.py → sim/test_collision.py} +16 -8
- warp/tests/{test_coloring.py → sim/test_coloring.py} +14 -7
- warp/tests/{test_model.py → sim/test_model.py} +55 -7
- warp/tests/{test_sim_grad_bounce_linear.py → sim/test_sim_grad_bounce_linear.py} +14 -6
- warp/tests/{test_sim_kinematics.py → sim/test_sim_kinematics.py} +16 -7
- warp/tests/sim/test_vbd.py +597 -0
- warp/tests/test_adam.py +14 -6
- warp/tests/test_arithmetic.py +14 -6
- warp/tests/test_array.py +14 -6
- warp/tests/test_array_reduce.py +14 -6
- warp/tests/test_assert.py +14 -6
- warp/tests/test_atomic.py +14 -6
- warp/tests/test_bool.py +15 -7
- warp/tests/test_builtins_resolution.py +14 -6
- warp/tests/test_closest_point_edge_edge.py +14 -6
- warp/tests/test_codegen.py +14 -6
- warp/tests/test_codegen_instancing.py +14 -6
- warp/tests/test_compile_consts.py +14 -6
- warp/tests/test_conditional.py +14 -6
- warp/tests/test_context.py +14 -6
- warp/tests/test_copy.py +14 -6
- warp/tests/test_ctypes.py +14 -6
- warp/tests/test_dense.py +14 -6
- warp/tests/test_devices.py +14 -6
- warp/tests/test_examples.py +42 -42
- warp/tests/test_fabricarray.py +14 -6
- warp/tests/test_fast_math.py +14 -6
- warp/tests/test_fem.py +37 -10
- warp/tests/test_fp16.py +14 -6
- warp/tests/test_func.py +14 -6
- warp/tests/test_future_annotations.py +14 -6
- warp/tests/test_generics.py +14 -6
- warp/tests/test_grad.py +14 -6
- warp/tests/test_grad_customs.py +14 -6
- warp/tests/test_grad_debug.py +14 -6
- warp/tests/test_implicit_init.py +14 -6
- warp/tests/test_import.py +14 -6
- warp/tests/test_indexedarray.py +14 -6
- warp/tests/test_intersect.py +14 -6
- warp/tests/test_iter.py +14 -6
- warp/tests/test_large.py +14 -6
- warp/tests/test_launch.py +14 -6
- warp/tests/test_lerp.py +14 -6
- warp/tests/test_linear_solvers.py +15 -11
- warp/tests/test_lvalue.py +14 -6
- warp/tests/test_mat.py +247 -85
- warp/tests/test_mat_lite.py +14 -6
- warp/tests/test_mat_scalar_ops.py +18 -10
- warp/tests/test_math.py +14 -6
- warp/tests/test_mlp.py +14 -6
- warp/tests/test_module_hashing.py +14 -6
- warp/tests/test_modules_lite.py +14 -6
- warp/tests/test_noise.py +14 -6
- warp/tests/test_operators.py +14 -6
- warp/tests/test_options.py +14 -6
- warp/tests/test_overwrite.py +15 -60
- warp/tests/test_print.py +14 -6
- warp/tests/test_quat.py +81 -52
- warp/tests/test_rand.py +58 -43
- warp/tests/test_reload.py +14 -6
- warp/tests/test_rounding.py +14 -6
- warp/tests/test_runlength_encode.py +14 -6
- warp/tests/test_scalar_ops.py +14 -6
- warp/tests/test_smoothstep.py +14 -6
- warp/tests/test_snippet.py +15 -0
- warp/tests/test_sparse.py +61 -12
- warp/tests/test_spatial.py +89 -6
- warp/tests/test_special_values.py +14 -6
- warp/tests/test_static.py +15 -7
- warp/tests/test_struct.py +14 -6
- warp/tests/test_tape.py +14 -6
- warp/tests/test_transient_module.py +14 -6
- warp/tests/test_triangle_closest_point.py +14 -6
- warp/tests/test_types.py +14 -6
- warp/tests/test_utils.py +98 -10
- warp/tests/test_vec.py +60 -40
- warp/tests/test_vec_lite.py +14 -6
- warp/tests/test_vec_scalar_ops.py +14 -6
- warp/tests/test_verify_fp.py +14 -6
- warp/tests/tile/__init__.py +0 -0
- warp/tests/{test_tile.py → tile/test_tile.py} +150 -57
- warp/tests/{test_tile_load.py → tile/test_tile_load.py} +15 -7
- warp/tests/{test_tile_mathdx.py → tile/test_tile_mathdx.py} +23 -12
- warp/tests/{test_tile_mlp.py → tile/test_tile_mlp.py} +39 -20
- warp/tests/{test_tile_reduce.py → tile/test_tile_reduce.py} +74 -7
- warp/tests/{test_tile_shared_memory.py → tile/test_tile_shared_memory.py} +14 -6
- warp/tests/{test_tile_view.py → tile/test_tile_view.py} +15 -7
- warp/tests/unittest_serial.py +15 -6
- warp/tests/unittest_suites.py +59 -65
- warp/tests/unittest_utils.py +16 -7
- warp/tests/walkthrough_debug.py +14 -6
- warp/thirdparty/unittest_parallel.py +15 -8
- warp/torch.py +14 -6
- warp/types.py +124 -664
- warp/utils.py +151 -78
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/METADATA +39 -12
- warp_lang-1.7.0.dist-info/RECORD +429 -0
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/WHEEL +1 -1
- warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
- warp/examples/optim/example_walker.py +0 -309
- warp/native/cutlass_gemm.cpp +0 -34
- warp/native/cutlass_gemm.cu +0 -373
- warp/tests/test_matmul.py +0 -503
- warp/tests/test_matmul_lite.py +0 -403
- warp/tests/test_vbd.py +0 -378
- warp/tests/unused_test_misc.py +0 -69
- warp_lang-1.6.1.dist-info/LICENSE.md +0 -126
- warp_lang-1.6.1.dist-info/RECORD +0 -419
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/top_level.txt +0 -0
warp/utils.py
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
# Copyright (c) 2022 NVIDIA CORPORATION.
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
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
|
+
from __future__ import annotations
|
|
7
17
|
|
|
8
18
|
import cProfile
|
|
9
19
|
import ctypes
|
|
@@ -11,7 +21,7 @@ import os
|
|
|
11
21
|
import sys
|
|
12
22
|
import time
|
|
13
23
|
import warnings
|
|
14
|
-
from typing import Any, Optional
|
|
24
|
+
from typing import Any, Callable, Dict, List, Optional, Union
|
|
15
25
|
|
|
16
26
|
import numpy as np
|
|
17
27
|
|
|
@@ -133,6 +143,8 @@ def radix_sort_pairs(keys, values, count: int):
|
|
|
133
143
|
runtime.core.radix_sort_pairs_int_host(keys.ptr, values.ptr, count)
|
|
134
144
|
elif keys.dtype == wp.float32 and values.dtype == wp.int32:
|
|
135
145
|
runtime.core.radix_sort_pairs_float_host(keys.ptr, values.ptr, count)
|
|
146
|
+
elif keys.dtype == wp.int64 and values.dtype == wp.int32:
|
|
147
|
+
runtime.core.radix_sort_pairs_int64_host(keys.ptr, values.ptr, count)
|
|
136
148
|
else:
|
|
137
149
|
raise RuntimeError("Unsupported data type")
|
|
138
150
|
elif keys.device.is_cuda:
|
|
@@ -140,6 +152,90 @@ def radix_sort_pairs(keys, values, count: int):
|
|
|
140
152
|
runtime.core.radix_sort_pairs_int_device(keys.ptr, values.ptr, count)
|
|
141
153
|
elif keys.dtype == wp.float32 and values.dtype == wp.int32:
|
|
142
154
|
runtime.core.radix_sort_pairs_float_device(keys.ptr, values.ptr, count)
|
|
155
|
+
elif keys.dtype == wp.int64 and values.dtype == wp.int32:
|
|
156
|
+
runtime.core.radix_sort_pairs_int64_device(keys.ptr, values.ptr, count)
|
|
157
|
+
else:
|
|
158
|
+
raise RuntimeError("Unsupported data type")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def segmented_sort_pairs(
|
|
162
|
+
keys,
|
|
163
|
+
values,
|
|
164
|
+
count: int,
|
|
165
|
+
segment_start_indices: wp.array(dtype=wp.int32),
|
|
166
|
+
segment_end_indices: wp.array(dtype=wp.int32) = None,
|
|
167
|
+
):
|
|
168
|
+
"""Sort key-value pairs within segments.
|
|
169
|
+
|
|
170
|
+
This function performs a segmented sort of key-value pairs, where the sorting is done independently within each segment.
|
|
171
|
+
The segments are defined by their start and optionally end indices.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
keys: Array of keys to sort. Must be of type int32 or float32.
|
|
175
|
+
values: Array of values to sort along with keys. Must be of type int32.
|
|
176
|
+
count: Number of elements to sort.
|
|
177
|
+
segment_start_indices: Array containing start index of each segment. Must be of type int32.
|
|
178
|
+
If segment_end_indices is None, this array must have length at least num_segments + 1,
|
|
179
|
+
and segment_end_indices will be inferred as segment_start_indices[1:].
|
|
180
|
+
If segment_end_indices is provided, this array must have length at least num_segments.
|
|
181
|
+
segment_end_indices: Optional array containing end index of each segment. Must be of type int32 if provided.
|
|
182
|
+
If None, segment_end_indices will be inferred from segment_start_indices[1:].
|
|
183
|
+
If provided, must have length at least num_segments.
|
|
184
|
+
|
|
185
|
+
Raises:
|
|
186
|
+
RuntimeError: If array storage devices don't match, if storage size is insufficient,
|
|
187
|
+
if segment_start_indices is not of type int32, or if data types are unsupported.
|
|
188
|
+
"""
|
|
189
|
+
if keys.device != values.device:
|
|
190
|
+
raise RuntimeError("Array storage devices do not match")
|
|
191
|
+
|
|
192
|
+
if count == 0:
|
|
193
|
+
return
|
|
194
|
+
|
|
195
|
+
if keys.size < 2 * count or values.size < 2 * count:
|
|
196
|
+
raise RuntimeError("Array storage must be large enough to contain 2*count elements")
|
|
197
|
+
|
|
198
|
+
from warp.context import runtime
|
|
199
|
+
|
|
200
|
+
if segment_start_indices.dtype != wp.int32:
|
|
201
|
+
raise RuntimeError("segment_start_indices array must be of type int32")
|
|
202
|
+
|
|
203
|
+
# Handle case where segment_end_indices is not provided
|
|
204
|
+
if segment_end_indices is None:
|
|
205
|
+
num_segments = max(0, segment_start_indices.size - 1)
|
|
206
|
+
|
|
207
|
+
segment_end_indices = segment_start_indices[1:]
|
|
208
|
+
segment_end_indices_ptr = segment_end_indices.ptr
|
|
209
|
+
segment_start_indices_ptr = segment_start_indices.ptr
|
|
210
|
+
else:
|
|
211
|
+
if segment_end_indices.dtype != wp.int32:
|
|
212
|
+
raise RuntimeError("segment_end_indices array must be of type int32")
|
|
213
|
+
|
|
214
|
+
num_segments = segment_start_indices.size
|
|
215
|
+
|
|
216
|
+
segment_end_indices_ptr = segment_end_indices.ptr
|
|
217
|
+
segment_start_indices_ptr = segment_start_indices.ptr
|
|
218
|
+
|
|
219
|
+
if keys.device.is_cpu:
|
|
220
|
+
if keys.dtype == wp.int32 and values.dtype == wp.int32:
|
|
221
|
+
runtime.core.segmented_sort_pairs_int_host(
|
|
222
|
+
keys.ptr, values.ptr, count, segment_start_indices_ptr, segment_end_indices_ptr, num_segments
|
|
223
|
+
)
|
|
224
|
+
elif keys.dtype == wp.float32 and values.dtype == wp.int32:
|
|
225
|
+
runtime.core.segmented_sort_pairs_float_host(
|
|
226
|
+
keys.ptr, values.ptr, count, segment_start_indices_ptr, segment_end_indices_ptr, num_segments
|
|
227
|
+
)
|
|
228
|
+
else:
|
|
229
|
+
raise RuntimeError("Unsupported data type")
|
|
230
|
+
elif keys.device.is_cuda:
|
|
231
|
+
if keys.dtype == wp.int32 and values.dtype == wp.int32:
|
|
232
|
+
runtime.core.segmented_sort_pairs_int_device(
|
|
233
|
+
keys.ptr, values.ptr, count, segment_start_indices_ptr, segment_end_indices_ptr, num_segments
|
|
234
|
+
)
|
|
235
|
+
elif keys.dtype == wp.float32 and values.dtype == wp.int32:
|
|
236
|
+
runtime.core.segmented_sort_pairs_float_device(
|
|
237
|
+
keys.ptr, values.ptr, count, segment_start_indices_ptr, segment_end_indices_ptr, num_segments
|
|
238
|
+
)
|
|
143
239
|
else:
|
|
144
240
|
raise RuntimeError("Unsupported data type")
|
|
145
241
|
|
|
@@ -665,37 +761,38 @@ class ScopedTimer:
|
|
|
665
761
|
|
|
666
762
|
def __init__(
|
|
667
763
|
self,
|
|
668
|
-
name,
|
|
669
|
-
active=True,
|
|
670
|
-
print=True,
|
|
671
|
-
detailed=False,
|
|
672
|
-
dict=None,
|
|
673
|
-
use_nvtx=False,
|
|
674
|
-
color="rapids",
|
|
675
|
-
synchronize=False,
|
|
676
|
-
cuda_filter=0,
|
|
677
|
-
report_func=None,
|
|
678
|
-
skip_tape=False,
|
|
764
|
+
name: str,
|
|
765
|
+
active: bool = True,
|
|
766
|
+
print: bool = True,
|
|
767
|
+
detailed: bool = False,
|
|
768
|
+
dict: Optional[Dict[str, List[float]]] = None,
|
|
769
|
+
use_nvtx: bool = False,
|
|
770
|
+
color: Union[int, str] = "rapids",
|
|
771
|
+
synchronize: bool = False,
|
|
772
|
+
cuda_filter: int = 0,
|
|
773
|
+
report_func: Optional[Callable[[List[TimingResult], str], None]] = None,
|
|
774
|
+
skip_tape: bool = False,
|
|
679
775
|
):
|
|
680
776
|
"""Context manager object for a timer
|
|
681
777
|
|
|
682
778
|
Parameters:
|
|
683
|
-
name
|
|
684
|
-
active
|
|
685
|
-
print
|
|
686
|
-
detailed
|
|
687
|
-
dict
|
|
688
|
-
use_nvtx
|
|
689
|
-
color
|
|
690
|
-
synchronize
|
|
691
|
-
cuda_filter
|
|
692
|
-
report_func
|
|
693
|
-
|
|
779
|
+
name: Name of timer
|
|
780
|
+
active: Enables this timer
|
|
781
|
+
print: At context manager exit, print elapsed time to ``sys.stdout``
|
|
782
|
+
detailed: Collects additional profiling data using cProfile and calls ``print_stats()`` at context exit
|
|
783
|
+
dict: A dictionary of lists to which the elapsed time will be appended using ``name`` as a key
|
|
784
|
+
use_nvtx: If true, timing functionality is replaced by an NVTX range
|
|
785
|
+
color: ARGB value (e.g. 0x00FFFF) or color name (e.g. 'cyan') associated with the NVTX range
|
|
786
|
+
synchronize: Synchronize the CPU thread with any outstanding CUDA work to return accurate GPU timings
|
|
787
|
+
cuda_filter: Filter flags for CUDA activity timing, e.g. ``warp.TIMING_KERNEL`` or ``warp.TIMING_ALL``
|
|
788
|
+
report_func: A callback function to print the activity report.
|
|
789
|
+
If ``None``, :func:`wp.timing_print() <timing_print>` will be used.
|
|
790
|
+
skip_tape: If true, the timer will not be recorded in the tape
|
|
694
791
|
|
|
695
792
|
Attributes:
|
|
696
793
|
extra_msg (str): Can be set to a string that will be added to the printout at context exit.
|
|
697
794
|
elapsed (float): The duration of the ``with`` block used with this object
|
|
698
|
-
timing_results (
|
|
795
|
+
timing_results (List[TimingResult]): The list of activity timing results, if collection was requested using ``cuda_filter``
|
|
699
796
|
"""
|
|
700
797
|
self.name = name
|
|
701
798
|
self.active = active and self.enabled
|
|
@@ -791,7 +888,7 @@ class ScopedTimer:
|
|
|
791
888
|
|
|
792
889
|
# Allow temporarily enabling/disabling mempool allocators
|
|
793
890
|
class ScopedMempool:
|
|
794
|
-
def __init__(self, device, enable: bool):
|
|
891
|
+
def __init__(self, device: Devicelike, enable: bool):
|
|
795
892
|
self.device = wp.get_device(device)
|
|
796
893
|
self.enable = enable
|
|
797
894
|
|
|
@@ -805,7 +902,7 @@ class ScopedMempool:
|
|
|
805
902
|
|
|
806
903
|
# Allow temporarily enabling/disabling mempool access
|
|
807
904
|
class ScopedMempoolAccess:
|
|
808
|
-
def __init__(self, target_device, peer_device, enable: bool):
|
|
905
|
+
def __init__(self, target_device: Devicelike, peer_device: Devicelike, enable: bool):
|
|
809
906
|
self.target_device = target_device
|
|
810
907
|
self.peer_device = peer_device
|
|
811
908
|
self.enable = enable
|
|
@@ -820,7 +917,7 @@ class ScopedMempoolAccess:
|
|
|
820
917
|
|
|
821
918
|
# Allow temporarily enabling/disabling peer access
|
|
822
919
|
class ScopedPeerAccess:
|
|
823
|
-
def __init__(self, target_device, peer_device, enable: bool):
|
|
920
|
+
def __init__(self, target_device: Devicelike, peer_device: Devicelike, enable: bool):
|
|
824
921
|
self.target_device = target_device
|
|
825
922
|
self.peer_device = peer_device
|
|
826
923
|
self.enable = enable
|
|
@@ -834,7 +931,7 @@ class ScopedPeerAccess:
|
|
|
834
931
|
|
|
835
932
|
|
|
836
933
|
class ScopedCapture:
|
|
837
|
-
def __init__(self, device=None, stream=None, force_module_load=None, external=False):
|
|
934
|
+
def __init__(self, device: Devicelike = None, stream=None, force_module_load=None, external=False):
|
|
838
935
|
self.device = device
|
|
839
936
|
self.stream = stream
|
|
840
937
|
self.force_module_load = force_module_load
|
|
@@ -860,27 +957,6 @@ class ScopedCapture:
|
|
|
860
957
|
self.active = False
|
|
861
958
|
|
|
862
959
|
|
|
863
|
-
# helper kernels for adj_matmul
|
|
864
|
-
@wp.kernel
|
|
865
|
-
def add_kernel_2d(x: wp.array2d(dtype=Any), acc: wp.array2d(dtype=Any), beta: Any):
|
|
866
|
-
i, j = wp.tid()
|
|
867
|
-
|
|
868
|
-
x[i, j] = x[i, j] + beta * acc[i, j]
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
@wp.kernel
|
|
872
|
-
def add_kernel_3d(x: wp.array3d(dtype=Any), acc: wp.array3d(dtype=Any), beta: Any):
|
|
873
|
-
i, j, k = wp.tid()
|
|
874
|
-
|
|
875
|
-
x[i, j, k] = x[i, j, k] + beta * acc[i, j, k]
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
# explicit instantiations of generic kernels for adj_matmul
|
|
879
|
-
for T in [wp.float16, wp.float32, wp.float64]:
|
|
880
|
-
wp.overload(add_kernel_2d, [wp.array2d(dtype=T), wp.array2d(dtype=T), T])
|
|
881
|
-
wp.overload(add_kernel_3d, [wp.array3d(dtype=T), wp.array3d(dtype=T), T])
|
|
882
|
-
|
|
883
|
-
|
|
884
960
|
def check_p2p():
|
|
885
961
|
"""Check if the machine is configured properly for peer-to-peer transfers.
|
|
886
962
|
|
|
@@ -919,31 +995,28 @@ class timing_result_t(ctypes.Structure):
|
|
|
919
995
|
|
|
920
996
|
|
|
921
997
|
class TimingResult:
|
|
922
|
-
"""Timing result for a single activity.
|
|
998
|
+
"""Timing result for a single activity."""
|
|
923
999
|
|
|
924
|
-
|
|
925
|
-
|
|
1000
|
+
def __init__(self, device, name, filter, elapsed):
|
|
1001
|
+
self.device: warp.context.Device = device
|
|
1002
|
+
"""The device where the activity was recorded."""
|
|
926
1003
|
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
name (str): The activity name.
|
|
930
|
-
filter (int): The type of activity (e.g., ``warp.TIMING_KERNEL``).
|
|
931
|
-
elapsed (float): The elapsed time in milliseconds.
|
|
932
|
-
"""
|
|
1004
|
+
self.name: str = name
|
|
1005
|
+
"""The activity name."""
|
|
933
1006
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
self.
|
|
938
|
-
|
|
1007
|
+
self.filter: int = filter
|
|
1008
|
+
"""The type of activity (e.g., ``warp.TIMING_KERNEL``)."""
|
|
1009
|
+
|
|
1010
|
+
self.elapsed: float = elapsed
|
|
1011
|
+
"""The elapsed time in milliseconds."""
|
|
939
1012
|
|
|
940
1013
|
|
|
941
|
-
def timing_begin(cuda_filter=TIMING_ALL, synchronize=True):
|
|
1014
|
+
def timing_begin(cuda_filter: int = TIMING_ALL, synchronize: bool = True) -> None:
|
|
942
1015
|
"""Begin detailed activity timing.
|
|
943
1016
|
|
|
944
1017
|
Parameters:
|
|
945
|
-
cuda_filter
|
|
946
|
-
synchronize
|
|
1018
|
+
cuda_filter: Filter flags for CUDA activity timing, e.g. ``warp.TIMING_KERNEL`` or ``warp.TIMING_ALL``
|
|
1019
|
+
synchronize: Whether to synchronize all CUDA devices before timing starts
|
|
947
1020
|
"""
|
|
948
1021
|
|
|
949
1022
|
if synchronize:
|
|
@@ -952,14 +1025,14 @@ def timing_begin(cuda_filter=TIMING_ALL, synchronize=True):
|
|
|
952
1025
|
warp.context.runtime.core.cuda_timing_begin(cuda_filter)
|
|
953
1026
|
|
|
954
1027
|
|
|
955
|
-
def timing_end(synchronize=True):
|
|
1028
|
+
def timing_end(synchronize: bool = True) -> List[TimingResult]:
|
|
956
1029
|
"""End detailed activity timing.
|
|
957
1030
|
|
|
958
1031
|
Parameters:
|
|
959
|
-
synchronize
|
|
1032
|
+
synchronize: Whether to synchronize all CUDA devices before timing ends
|
|
960
1033
|
|
|
961
1034
|
Returns:
|
|
962
|
-
|
|
1035
|
+
A list of :class:`TimingResult` objects for all recorded activities.
|
|
963
1036
|
"""
|
|
964
1037
|
|
|
965
1038
|
if synchronize:
|
|
@@ -998,12 +1071,12 @@ def timing_end(synchronize=True):
|
|
|
998
1071
|
return results
|
|
999
1072
|
|
|
1000
1073
|
|
|
1001
|
-
def timing_print(results, indent=""):
|
|
1074
|
+
def timing_print(results: List[TimingResult], indent: str = "") -> None:
|
|
1002
1075
|
"""Print timing results.
|
|
1003
1076
|
|
|
1004
1077
|
Parameters:
|
|
1005
|
-
results
|
|
1006
|
-
indent
|
|
1078
|
+
results: List of :class:`TimingResult` objects to print.
|
|
1079
|
+
indent: Optional indentation to prepend to all output lines.
|
|
1007
1080
|
"""
|
|
1008
1081
|
|
|
1009
1082
|
if not results:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: warp-lang
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.0
|
|
4
4
|
Summary: A Python framework for high-performance simulation and graphics programming
|
|
5
|
-
Author-email: NVIDIA Corporation <
|
|
6
|
-
License:
|
|
5
|
+
Author-email: NVIDIA Corporation <warp-python@nvidia.com>
|
|
6
|
+
License: Apache-2.0
|
|
7
7
|
Project-URL: GitHub, https://github.com/NVIDIA/warp
|
|
8
8
|
Project-URL: Documentation, https://nvidia.github.io/warp
|
|
9
9
|
Project-URL: Changelog, https://github.com/NVIDIA/warp/blob/main/CHANGELOG.md
|
|
@@ -12,8 +12,9 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
16
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
-
Classifier: License ::
|
|
17
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
18
|
Classifier: Operating System :: OS Independent
|
|
18
19
|
Requires-Python: >=3.8
|
|
19
20
|
Description-Content-Type: text/markdown
|
|
@@ -23,15 +24,18 @@ Provides-Extra: dev
|
|
|
23
24
|
Requires-Dist: pre-commit; extra == "dev"
|
|
24
25
|
Requires-Dist: ruff; extra == "dev"
|
|
25
26
|
Requires-Dist: nvtx; extra == "dev"
|
|
26
|
-
Requires-Dist: nvidia-sphinx-theme; extra == "dev"
|
|
27
|
+
Requires-Dist: nvidia-sphinx-theme; python_version >= "3.9" and extra == "dev"
|
|
27
28
|
Requires-Dist: sphinx-copybutton; extra == "dev"
|
|
28
29
|
Requires-Dist: coverage[toml]; extra == "dev"
|
|
29
30
|
Provides-Extra: extras
|
|
30
31
|
Requires-Dist: usd-core; extra == "extras"
|
|
31
32
|
Requires-Dist: matplotlib; extra == "extras"
|
|
33
|
+
Requires-Dist: pillow; extra == "extras"
|
|
32
34
|
Requires-Dist: pyglet; extra == "extras"
|
|
35
|
+
Dynamic: license-file
|
|
33
36
|
|
|
34
37
|
[](https://badge.fury.io/py/warp-lang)
|
|
38
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
35
39
|

|
|
36
40
|
[](https://pepy.tech/project/warp-lang)
|
|
37
41
|
[](https://codecov.io/github/NVIDIA/warp)
|
|
@@ -78,9 +82,9 @@ the `pip install` command, e.g.
|
|
|
78
82
|
|
|
79
83
|
| Platform | Install Command |
|
|
80
84
|
| --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
81
|
-
| Linux aarch64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.
|
|
82
|
-
| Linux x86-64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.
|
|
83
|
-
| Windows x86-64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.
|
|
85
|
+
| Linux aarch64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.7.0/warp_lang-1.7.0+cu11-py3-none-manylinux2014_aarch64.whl` |
|
|
86
|
+
| Linux x86-64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.7.0/warp_lang-1.7.0+cu11-py3-none-manylinux2014_x86_64.whl` |
|
|
87
|
+
| Windows x86-64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.7.0/warp_lang-1.7.0+cu11-py3-none-win_amd64.whl` |
|
|
84
88
|
|
|
85
89
|
The `--force-reinstall` option may need to be used to overwrite a previous installation.
|
|
86
90
|
|
|
@@ -96,6 +100,15 @@ pip install -U --pre warp-lang --extra-index-url=https://pypi.nvidia.com/
|
|
|
96
100
|
|
|
97
101
|
Note that the nightly builds are built with the CUDA 12 runtime and are not published for macOS.
|
|
98
102
|
|
|
103
|
+
If you plan to install nightly builds regularly, you can simplify future installations by adding NVIDIA's package
|
|
104
|
+
repository as an extra index via the `PIP_EXTRA_INDEX_URL` environment variable. For example:
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
export PIP_EXTRA_INDEX_URL="https://pypi.nvidia.com"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This ensures the index is automatically used for `pip` commands, avoiding the need to specify it explicitly.
|
|
111
|
+
|
|
99
112
|
### CUDA Requirements
|
|
100
113
|
|
|
101
114
|
* Warp packages built with CUDA Toolkit 11.x require NVIDIA driver 470 or newer.
|
|
@@ -247,16 +260,16 @@ python -m warp.tests
|
|
|
247
260
|
<td align="center">raymarch</td>
|
|
248
261
|
</tr>
|
|
249
262
|
<tr>
|
|
263
|
+
<td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/core/example_sample_mesh.py"><img src="https://media.githubusercontent.com/media/NVIDIA/warp/refs/heads/main/docs/img/examples/core_sample_mesh.png"></a></td>
|
|
250
264
|
<td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/core/example_sph.py"><img src="https://media.githubusercontent.com/media/NVIDIA/warp/refs/heads/main/docs/img/examples/core_sph.png"></a></td>
|
|
251
265
|
<td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/core/example_torch.py"><img src="https://media.githubusercontent.com/media/NVIDIA/warp/refs/heads/main/docs/img/examples/core_torch.png"></a></td>
|
|
252
266
|
<td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/core/example_wave.py"><img src="https://media.githubusercontent.com/media/NVIDIA/warp/refs/heads/main/docs/img/examples/core_wave.png"></a></td>
|
|
253
|
-
<td></td>
|
|
254
267
|
</tr>
|
|
255
268
|
<tr>
|
|
269
|
+
<td align="center">sample mesh</td>
|
|
256
270
|
<td align="center">sph</td>
|
|
257
271
|
<td align="center">torch</td>
|
|
258
272
|
<td align="center">wave</td>
|
|
259
|
-
<td align="center"></td>
|
|
260
273
|
</tr>
|
|
261
274
|
</tbody>
|
|
262
275
|
</table>
|
|
@@ -320,6 +333,18 @@ python -m warp.tests
|
|
|
320
333
|
<td align="center">trajectory</td>
|
|
321
334
|
<td align="center">soft body properties</td>
|
|
322
335
|
</tr>
|
|
336
|
+
<tr>
|
|
337
|
+
<td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/optim/example_fluid_checkpoint.py"><img src="https://media.githubusercontent.com/media/NVIDIA/warp/refs/heads/main/docs/img/examples/optim_fluid_checkpoint.png"></a></td>
|
|
338
|
+
<td></td>
|
|
339
|
+
<td></td>
|
|
340
|
+
<td></td>
|
|
341
|
+
</tr>
|
|
342
|
+
<tr>
|
|
343
|
+
<td align="center">fluid checkpoint</td>
|
|
344
|
+
<td align="center"></td>
|
|
345
|
+
<td align="center"></td>
|
|
346
|
+
<td align="center"></td>
|
|
347
|
+
</tr>
|
|
323
348
|
</tbody>
|
|
324
349
|
</table>
|
|
325
350
|
|
|
@@ -449,6 +474,8 @@ Problems, questions, and feature requests can be opened on [GitHub Issues](https
|
|
|
449
474
|
|
|
450
475
|
The Warp team also monitors the **#warp** forum on the public [Omniverse Discord](https://discord.com/invite/nvidiaomniverse) server, come chat with us!
|
|
451
476
|
|
|
477
|
+
For inquiries not suited for GitHub Issues or Discord, please email warp-python@nvidia.com.
|
|
478
|
+
|
|
452
479
|
## Versioning
|
|
453
480
|
|
|
454
481
|
Versions take the format X.Y.Z, similar to [Python itself](https://devguide.python.org/developer-workflow/development-cycle/#devcycle):
|
|
@@ -464,7 +491,7 @@ Note that prior to 0.11.0, this schema was not strictly adhered to.
|
|
|
464
491
|
|
|
465
492
|
## License
|
|
466
493
|
|
|
467
|
-
Warp is provided under the
|
|
494
|
+
Warp is provided under the Apache License, Version 2.0. Please see [LICENSE.md](./LICENSE.md) for full license text.
|
|
468
495
|
|
|
469
496
|
## Contributing
|
|
470
497
|
|