warp-lang 1.9.1__py3-none-win_amd64.whl → 1.10.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 +301 -287
- warp/__init__.pyi +882 -305
- warp/_src/__init__.py +14 -0
- warp/_src/autograd.py +1077 -0
- warp/_src/build.py +620 -0
- warp/_src/build_dll.py +642 -0
- warp/{builtins.py → _src/builtins.py} +1435 -379
- warp/_src/codegen.py +4361 -0
- warp/{config.py → _src/config.py} +178 -169
- warp/_src/constants.py +59 -0
- warp/_src/context.py +8352 -0
- warp/_src/dlpack.py +464 -0
- warp/_src/fabric.py +362 -0
- warp/_src/fem/__init__.py +14 -0
- warp/_src/fem/adaptivity.py +510 -0
- warp/_src/fem/cache.py +689 -0
- warp/_src/fem/dirichlet.py +190 -0
- warp/{fem → _src/fem}/domain.py +42 -30
- warp/_src/fem/field/__init__.py +131 -0
- warp/_src/fem/field/field.py +703 -0
- warp/{fem → _src/fem}/field/nodal_field.py +32 -15
- warp/{fem → _src/fem}/field/restriction.py +3 -1
- warp/{fem → _src/fem}/field/virtual.py +55 -27
- warp/_src/fem/geometry/__init__.py +32 -0
- warp/{fem → _src/fem}/geometry/adaptive_nanogrid.py +79 -163
- warp/_src/fem/geometry/closest_point.py +99 -0
- warp/{fem → _src/fem}/geometry/deformed_geometry.py +16 -22
- warp/{fem → _src/fem}/geometry/element.py +34 -10
- warp/{fem → _src/fem}/geometry/geometry.py +50 -20
- warp/{fem → _src/fem}/geometry/grid_2d.py +14 -23
- warp/{fem → _src/fem}/geometry/grid_3d.py +14 -23
- warp/{fem → _src/fem}/geometry/hexmesh.py +42 -63
- warp/{fem → _src/fem}/geometry/nanogrid.py +256 -247
- warp/{fem → _src/fem}/geometry/partition.py +123 -63
- warp/{fem → _src/fem}/geometry/quadmesh.py +28 -45
- warp/{fem → _src/fem}/geometry/tetmesh.py +42 -63
- warp/{fem → _src/fem}/geometry/trimesh.py +28 -45
- warp/{fem → _src/fem}/integrate.py +166 -158
- warp/_src/fem/linalg.py +385 -0
- warp/_src/fem/operator.py +398 -0
- warp/_src/fem/polynomial.py +231 -0
- warp/{fem → _src/fem}/quadrature/pic_quadrature.py +17 -20
- warp/{fem → _src/fem}/quadrature/quadrature.py +97 -47
- warp/_src/fem/space/__init__.py +248 -0
- warp/{fem → _src/fem}/space/basis_function_space.py +22 -11
- warp/_src/fem/space/basis_space.py +681 -0
- warp/{fem → _src/fem}/space/dof_mapper.py +5 -3
- warp/{fem → _src/fem}/space/function_space.py +16 -13
- warp/{fem → _src/fem}/space/grid_2d_function_space.py +6 -7
- warp/{fem → _src/fem}/space/grid_3d_function_space.py +6 -4
- warp/{fem → _src/fem}/space/hexmesh_function_space.py +6 -10
- warp/{fem → _src/fem}/space/nanogrid_function_space.py +5 -9
- warp/{fem → _src/fem}/space/partition.py +119 -60
- warp/{fem → _src/fem}/space/quadmesh_function_space.py +6 -10
- warp/{fem → _src/fem}/space/restriction.py +68 -33
- warp/_src/fem/space/shape/__init__.py +152 -0
- warp/{fem → _src/fem}/space/shape/cube_shape_function.py +11 -9
- warp/{fem → _src/fem}/space/shape/shape_function.py +10 -9
- warp/{fem → _src/fem}/space/shape/square_shape_function.py +8 -6
- warp/{fem → _src/fem}/space/shape/tet_shape_function.py +5 -3
- warp/{fem → _src/fem}/space/shape/triangle_shape_function.py +5 -3
- warp/{fem → _src/fem}/space/tetmesh_function_space.py +5 -9
- warp/_src/fem/space/topology.py +461 -0
- warp/{fem → _src/fem}/space/trimesh_function_space.py +5 -9
- warp/_src/fem/types.py +114 -0
- warp/_src/fem/utils.py +488 -0
- warp/_src/jax.py +188 -0
- warp/_src/jax_experimental/__init__.py +14 -0
- warp/_src/jax_experimental/custom_call.py +389 -0
- warp/_src/jax_experimental/ffi.py +1286 -0
- warp/_src/jax_experimental/xla_ffi.py +658 -0
- warp/_src/marching_cubes.py +710 -0
- warp/_src/math.py +416 -0
- warp/_src/optim/__init__.py +14 -0
- warp/_src/optim/adam.py +165 -0
- warp/_src/optim/linear.py +1608 -0
- warp/_src/optim/sgd.py +114 -0
- warp/_src/paddle.py +408 -0
- warp/_src/render/__init__.py +14 -0
- warp/_src/render/imgui_manager.py +291 -0
- warp/_src/render/render_opengl.py +3638 -0
- warp/_src/render/render_usd.py +939 -0
- warp/_src/render/utils.py +162 -0
- warp/_src/sparse.py +2718 -0
- warp/_src/tape.py +1208 -0
- warp/{thirdparty → _src/thirdparty}/unittest_parallel.py +9 -2
- warp/_src/torch.py +393 -0
- warp/_src/types.py +5888 -0
- warp/_src/utils.py +1695 -0
- warp/autograd.py +12 -1054
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +8 -588
- warp/build_dll.py +6 -721
- warp/codegen.py +6 -4251
- warp/constants.py +6 -39
- warp/context.py +12 -8062
- warp/dlpack.py +6 -444
- warp/examples/distributed/example_jacobi_mpi.py +4 -5
- warp/examples/fem/example_adaptive_grid.py +1 -1
- warp/examples/fem/example_apic_fluid.py +1 -1
- warp/examples/fem/example_burgers.py +8 -8
- warp/examples/fem/example_diffusion.py +1 -1
- warp/examples/fem/example_distortion_energy.py +1 -1
- warp/examples/fem/example_mixed_elasticity.py +2 -2
- warp/examples/fem/example_navier_stokes.py +1 -1
- warp/examples/fem/example_nonconforming_contact.py +7 -7
- warp/examples/fem/example_stokes.py +1 -1
- warp/examples/fem/example_stokes_transfer.py +1 -1
- warp/examples/fem/utils.py +2 -2
- warp/examples/interop/example_jax_callable.py +1 -1
- warp/examples/interop/example_jax_ffi_callback.py +1 -1
- warp/examples/interop/example_jax_kernel.py +1 -1
- warp/examples/tile/example_tile_mcgp.py +191 -0
- warp/fabric.py +6 -337
- warp/fem/__init__.py +159 -97
- warp/fem/adaptivity.py +7 -489
- warp/fem/cache.py +9 -648
- warp/fem/dirichlet.py +6 -184
- warp/fem/field/__init__.py +8 -109
- warp/fem/field/field.py +7 -652
- warp/fem/geometry/__init__.py +7 -18
- warp/fem/geometry/closest_point.py +11 -77
- warp/fem/linalg.py +18 -366
- warp/fem/operator.py +11 -369
- warp/fem/polynomial.py +9 -209
- warp/fem/space/__init__.py +5 -211
- warp/fem/space/basis_space.py +6 -662
- warp/fem/space/shape/__init__.py +41 -118
- warp/fem/space/topology.py +6 -437
- warp/fem/types.py +6 -81
- warp/fem/utils.py +11 -444
- warp/jax.py +8 -165
- warp/jax_experimental/__init__.py +14 -1
- warp/jax_experimental/custom_call.py +8 -365
- warp/jax_experimental/ffi.py +17 -873
- warp/jax_experimental/xla_ffi.py +5 -605
- warp/marching_cubes.py +5 -689
- warp/math.py +16 -393
- warp/native/array.h +385 -37
- warp/native/builtin.h +314 -37
- warp/native/bvh.cpp +43 -9
- warp/native/bvh.cu +62 -27
- warp/native/bvh.h +310 -309
- warp/native/clang/clang.cpp +102 -97
- warp/native/coloring.cpp +0 -1
- warp/native/crt.h +208 -0
- warp/native/exports.h +156 -0
- warp/native/hashgrid.cu +2 -0
- warp/native/intersect.h +24 -1
- warp/native/intersect_tri.h +44 -35
- warp/native/mat.h +1456 -276
- warp/native/mesh.cpp +4 -4
- warp/native/mesh.cu +4 -2
- warp/native/mesh.h +176 -61
- warp/native/quat.h +0 -52
- warp/native/scan.cu +2 -0
- warp/native/sparse.cu +7 -3
- warp/native/spatial.h +12 -0
- warp/native/tile.h +681 -89
- warp/native/tile_radix_sort.h +3 -3
- warp/native/tile_reduce.h +394 -46
- warp/native/tile_scan.h +4 -4
- warp/native/vec.h +469 -0
- warp/native/version.h +23 -0
- warp/native/volume.cpp +1 -1
- warp/native/volume.cu +1 -0
- warp/native/volume.h +1 -1
- warp/native/volume_builder.cu +2 -0
- warp/native/warp.cpp +57 -29
- warp/native/warp.cu +521 -250
- warp/native/warp.h +11 -8
- warp/optim/__init__.py +6 -3
- warp/optim/adam.py +6 -145
- warp/optim/linear.py +14 -1585
- warp/optim/sgd.py +6 -94
- warp/paddle.py +6 -388
- warp/render/__init__.py +8 -4
- warp/render/imgui_manager.py +7 -267
- warp/render/render_opengl.py +6 -3618
- warp/render/render_usd.py +6 -919
- warp/render/utils.py +6 -142
- warp/sparse.py +37 -2563
- warp/tape.py +6 -1188
- warp/tests/__main__.py +1 -1
- warp/tests/cuda/test_async.py +4 -4
- warp/tests/cuda/test_conditional_captures.py +1 -1
- warp/tests/cuda/test_multigpu.py +1 -1
- warp/tests/cuda/test_streams.py +58 -1
- warp/tests/geometry/test_bvh.py +157 -22
- warp/tests/geometry/test_marching_cubes.py +0 -1
- warp/tests/geometry/test_mesh.py +5 -3
- warp/tests/geometry/test_mesh_query_aabb.py +5 -12
- warp/tests/geometry/test_mesh_query_point.py +5 -2
- warp/tests/geometry/test_mesh_query_ray.py +15 -3
- warp/tests/geometry/test_volume_write.py +5 -5
- warp/tests/interop/test_dlpack.py +18 -17
- warp/tests/interop/test_jax.py +772 -49
- warp/tests/interop/test_paddle.py +1 -1
- warp/tests/test_adam.py +0 -1
- warp/tests/test_arithmetic.py +9 -9
- warp/tests/test_array.py +578 -100
- warp/tests/test_array_reduce.py +3 -3
- warp/tests/test_atomic.py +12 -8
- warp/tests/test_atomic_bitwise.py +209 -0
- warp/tests/test_atomic_cas.py +4 -4
- warp/tests/test_bool.py +2 -2
- warp/tests/test_builtins_resolution.py +5 -571
- warp/tests/test_codegen.py +33 -14
- warp/tests/test_conditional.py +1 -1
- warp/tests/test_context.py +6 -6
- warp/tests/test_copy.py +242 -161
- warp/tests/test_ctypes.py +3 -3
- warp/tests/test_devices.py +24 -2
- warp/tests/test_examples.py +16 -84
- warp/tests/test_fabricarray.py +35 -35
- warp/tests/test_fast_math.py +0 -2
- warp/tests/test_fem.py +56 -10
- warp/tests/test_fixedarray.py +3 -3
- warp/tests/test_func.py +8 -5
- warp/tests/test_generics.py +1 -1
- warp/tests/test_indexedarray.py +24 -24
- warp/tests/test_intersect.py +39 -9
- warp/tests/test_large.py +1 -1
- warp/tests/test_lerp.py +3 -1
- warp/tests/test_linear_solvers.py +1 -1
- warp/tests/test_map.py +35 -4
- warp/tests/test_mat.py +52 -62
- warp/tests/test_mat_constructors.py +4 -5
- warp/tests/test_mat_lite.py +1 -1
- warp/tests/test_mat_scalar_ops.py +121 -121
- warp/tests/test_math.py +34 -0
- warp/tests/test_module_aot.py +4 -4
- warp/tests/test_modules_lite.py +28 -2
- warp/tests/test_print.py +11 -11
- warp/tests/test_quat.py +93 -58
- warp/tests/test_runlength_encode.py +1 -1
- warp/tests/test_scalar_ops.py +38 -10
- warp/tests/test_smoothstep.py +1 -1
- warp/tests/test_sparse.py +126 -15
- warp/tests/test_spatial.py +105 -87
- warp/tests/test_special_values.py +6 -6
- warp/tests/test_static.py +7 -7
- warp/tests/test_struct.py +13 -2
- warp/tests/test_triangle_closest_point.py +48 -1
- warp/tests/test_types.py +27 -15
- warp/tests/test_utils.py +52 -52
- warp/tests/test_vec.py +29 -29
- warp/tests/test_vec_constructors.py +5 -5
- warp/tests/test_vec_scalar_ops.py +97 -97
- warp/tests/test_version.py +75 -0
- warp/tests/tile/test_tile.py +178 -0
- warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
- warp/tests/tile/test_tile_cholesky.py +7 -4
- warp/tests/tile/test_tile_load.py +26 -2
- warp/tests/tile/test_tile_mathdx.py +3 -3
- warp/tests/tile/test_tile_matmul.py +1 -1
- warp/tests/tile/test_tile_mlp.py +2 -4
- warp/tests/tile/test_tile_reduce.py +214 -13
- warp/tests/unittest_suites.py +6 -14
- warp/tests/unittest_utils.py +10 -9
- warp/tests/walkthrough_debug.py +3 -1
- warp/torch.py +6 -373
- warp/types.py +29 -5764
- warp/utils.py +10 -1659
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/METADATA +46 -99
- warp_lang-1.10.0.dist-info/RECORD +468 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
- warp/examples/assets/cartpole.urdf +0 -110
- warp/examples/assets/crazyflie.usd +0 -0
- warp/examples/assets/nv_ant.xml +0 -92
- warp/examples/assets/nv_humanoid.xml +0 -183
- warp/examples/assets/quadruped.urdf +0 -268
- warp/examples/optim/example_bounce.py +0 -266
- warp/examples/optim/example_cloth_throw.py +0 -228
- warp/examples/optim/example_drone.py +0 -870
- warp/examples/optim/example_inverse_kinematics.py +0 -182
- warp/examples/optim/example_inverse_kinematics_torch.py +0 -191
- warp/examples/optim/example_softbody_properties.py +0 -400
- warp/examples/optim/example_spring_cage.py +0 -245
- warp/examples/optim/example_trajectory.py +0 -227
- warp/examples/sim/example_cartpole.py +0 -143
- warp/examples/sim/example_cloth.py +0 -225
- warp/examples/sim/example_cloth_self_contact.py +0 -316
- warp/examples/sim/example_granular.py +0 -130
- warp/examples/sim/example_granular_collision_sdf.py +0 -202
- warp/examples/sim/example_jacobian_ik.py +0 -244
- warp/examples/sim/example_particle_chain.py +0 -124
- warp/examples/sim/example_quadruped.py +0 -203
- warp/examples/sim/example_rigid_chain.py +0 -203
- warp/examples/sim/example_rigid_contact.py +0 -195
- warp/examples/sim/example_rigid_force.py +0 -133
- warp/examples/sim/example_rigid_gyroscopic.py +0 -115
- warp/examples/sim/example_rigid_soft_contact.py +0 -140
- warp/examples/sim/example_soft_body.py +0 -196
- warp/examples/tile/example_tile_walker.py +0 -327
- warp/sim/__init__.py +0 -74
- warp/sim/articulation.py +0 -793
- warp/sim/collide.py +0 -2570
- warp/sim/graph_coloring.py +0 -307
- warp/sim/import_mjcf.py +0 -791
- warp/sim/import_snu.py +0 -227
- warp/sim/import_urdf.py +0 -579
- warp/sim/import_usd.py +0 -898
- warp/sim/inertia.py +0 -357
- warp/sim/integrator.py +0 -245
- warp/sim/integrator_euler.py +0 -2000
- warp/sim/integrator_featherstone.py +0 -2101
- warp/sim/integrator_vbd.py +0 -2487
- warp/sim/integrator_xpbd.py +0 -3295
- warp/sim/model.py +0 -4821
- warp/sim/particles.py +0 -121
- warp/sim/render.py +0 -431
- warp/sim/utils.py +0 -431
- warp/tests/sim/disabled_kinematics.py +0 -244
- warp/tests/sim/test_cloth.py +0 -863
- warp/tests/sim/test_collision.py +0 -743
- warp/tests/sim/test_coloring.py +0 -347
- warp/tests/sim/test_inertia.py +0 -161
- warp/tests/sim/test_model.py +0 -226
- warp/tests/sim/test_sim_grad.py +0 -287
- warp/tests/sim/test_sim_grad_bounce_linear.py +0 -212
- warp/tests/sim/test_sim_kinematics.py +0 -98
- warp/thirdparty/__init__.py +0 -0
- warp_lang-1.9.1.dist-info/RECORD +0 -456
- /warp/{fem → _src/fem}/quadrature/__init__.py +0 -0
- /warp/{tests/sim → _src/thirdparty}/__init__.py +0 -0
- /warp/{thirdparty → _src/thirdparty}/appdirs.py +0 -0
- /warp/{thirdparty → _src/thirdparty}/dlpack.py +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/WHEEL +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/licenses/LICENSE.md +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/top_level.txt +0 -0
|
@@ -16,13 +16,12 @@
|
|
|
16
16
|
from typing import Optional
|
|
17
17
|
|
|
18
18
|
import warp as wp
|
|
19
|
-
from warp.fem.cache import (
|
|
19
|
+
from warp._src.fem.cache import (
|
|
20
20
|
TemporaryStore,
|
|
21
21
|
borrow_temporary,
|
|
22
22
|
borrow_temporary_like,
|
|
23
|
-
cached_arg_value,
|
|
24
23
|
)
|
|
25
|
-
from warp.fem.types import (
|
|
24
|
+
from warp._src.fem.types import (
|
|
26
25
|
OUTSIDE,
|
|
27
26
|
Coords,
|
|
28
27
|
ElementIndex,
|
|
@@ -30,9 +29,11 @@ from warp.fem.types import (
|
|
|
30
29
|
)
|
|
31
30
|
|
|
32
31
|
from .closest_point import project_on_tet_at_origin, project_on_tri_at_origin
|
|
33
|
-
from .element import
|
|
32
|
+
from .element import Element
|
|
34
33
|
from .geometry import Geometry
|
|
35
34
|
|
|
35
|
+
_wp_module_name_ = "warp.fem.geometry.tetmesh"
|
|
36
|
+
|
|
36
37
|
|
|
37
38
|
@wp.struct
|
|
38
39
|
class TetmeshCellArg:
|
|
@@ -108,11 +109,11 @@ class Tetmesh(Geometry):
|
|
|
108
109
|
def boundary_side_count(self):
|
|
109
110
|
return self._boundary_face_indices.shape[0]
|
|
110
111
|
|
|
111
|
-
def reference_cell(self) ->
|
|
112
|
-
return
|
|
112
|
+
def reference_cell(self) -> Element:
|
|
113
|
+
return Element.TETRAHEDRON
|
|
113
114
|
|
|
114
|
-
def reference_side(self) ->
|
|
115
|
-
return
|
|
115
|
+
def reference_side(self) -> Element:
|
|
116
|
+
return Element.TRIANGLE
|
|
116
117
|
|
|
117
118
|
@property
|
|
118
119
|
def tet_edge_indices(self) -> wp.array:
|
|
@@ -137,11 +138,6 @@ class Tetmesh(Geometry):
|
|
|
137
138
|
|
|
138
139
|
# Geometry device interface
|
|
139
140
|
|
|
140
|
-
def cell_arg_value(self, device) -> CellArg:
|
|
141
|
-
args = self.CellArg()
|
|
142
|
-
self.fill_cell_arg(args, device)
|
|
143
|
-
return args
|
|
144
|
-
|
|
145
141
|
def fill_cell_arg(self, args: CellArg, device):
|
|
146
142
|
args.tet_vertex_indices = self.tet_vertex_indices.to(device)
|
|
147
143
|
args.positions = self.positions.to(device)
|
|
@@ -183,12 +179,6 @@ class Tetmesh(Geometry):
|
|
|
183
179
|
dist, coords = project_on_tet_at_origin(q, e1, e2, e3)
|
|
184
180
|
return coords, dist
|
|
185
181
|
|
|
186
|
-
@cached_arg_value
|
|
187
|
-
def side_index_arg_value(self, device) -> SideIndexArg:
|
|
188
|
-
args = self.SideIndexArg()
|
|
189
|
-
self.fill_side_index_arg(args, device)
|
|
190
|
-
return args
|
|
191
|
-
|
|
192
182
|
def fill_side_index_arg(self, args: SideIndexArg, device):
|
|
193
183
|
args.boundary_face_indices = self._boundary_face_indices.to(device)
|
|
194
184
|
|
|
@@ -198,11 +188,6 @@ class Tetmesh(Geometry):
|
|
|
198
188
|
|
|
199
189
|
return args.boundary_face_indices[boundary_side_index]
|
|
200
190
|
|
|
201
|
-
def side_arg_value(self, device) -> CellArg:
|
|
202
|
-
args = self.SideArg()
|
|
203
|
-
self.fill_side_arg(args, device)
|
|
204
|
-
return args
|
|
205
|
-
|
|
206
191
|
def fill_side_arg(self, args: SideArg, device):
|
|
207
192
|
self.fill_cell_arg(args.cell_arg, device)
|
|
208
193
|
args.face_vertex_indices = self._face_vertex_indices.to(device)
|
|
@@ -325,8 +310,8 @@ class Tetmesh(Geometry):
|
|
|
325
310
|
return side_arg.cell_arg
|
|
326
311
|
|
|
327
312
|
def _build_topology(self, temporary_store: TemporaryStore):
|
|
328
|
-
from warp.fem.utils import compress_node_indices, host_read_at_index, masked_indices
|
|
329
|
-
from warp.utils import array_scan
|
|
313
|
+
from warp._src.fem.utils import compress_node_indices, host_read_at_index, masked_indices
|
|
314
|
+
from warp._src.utils import array_scan
|
|
330
315
|
|
|
331
316
|
device = self.tet_vertex_indices.device
|
|
332
317
|
|
|
@@ -337,7 +322,7 @@ class Tetmesh(Geometry):
|
|
|
337
322
|
self._vertex_tet_indices = vertex_tet_indices.detach()
|
|
338
323
|
|
|
339
324
|
vertex_start_face_count = borrow_temporary(temporary_store, dtype=int, device=device, shape=self.vertex_count())
|
|
340
|
-
vertex_start_face_count.
|
|
325
|
+
vertex_start_face_count.zero_()
|
|
341
326
|
vertex_start_face_offsets = borrow_temporary_like(vertex_start_face_count, temporary_store=temporary_store)
|
|
342
327
|
|
|
343
328
|
vertex_face_other_vs = borrow_temporary(
|
|
@@ -350,10 +335,10 @@ class Tetmesh(Geometry):
|
|
|
350
335
|
kernel=Tetmesh._count_starting_faces_kernel,
|
|
351
336
|
device=device,
|
|
352
337
|
dim=self.cell_count(),
|
|
353
|
-
inputs=[self.tet_vertex_indices, vertex_start_face_count
|
|
338
|
+
inputs=[self.tet_vertex_indices, vertex_start_face_count],
|
|
354
339
|
)
|
|
355
340
|
|
|
356
|
-
array_scan(in_array=vertex_start_face_count
|
|
341
|
+
array_scan(in_array=vertex_start_face_count, out_array=vertex_start_face_offsets, inclusive=False)
|
|
357
342
|
|
|
358
343
|
# Count number of unique edges (deduplicate across faces)
|
|
359
344
|
vertex_unique_face_count = vertex_start_face_count
|
|
@@ -365,21 +350,19 @@ class Tetmesh(Geometry):
|
|
|
365
350
|
self._vertex_tet_offsets,
|
|
366
351
|
self._vertex_tet_indices,
|
|
367
352
|
self.tet_vertex_indices,
|
|
368
|
-
vertex_start_face_offsets
|
|
369
|
-
vertex_unique_face_count
|
|
370
|
-
vertex_face_other_vs
|
|
371
|
-
vertex_face_tets
|
|
353
|
+
vertex_start_face_offsets,
|
|
354
|
+
vertex_unique_face_count,
|
|
355
|
+
vertex_face_other_vs,
|
|
356
|
+
vertex_face_tets,
|
|
372
357
|
],
|
|
373
358
|
)
|
|
374
359
|
|
|
375
360
|
vertex_unique_face_offsets = borrow_temporary_like(vertex_start_face_offsets, temporary_store=temporary_store)
|
|
376
|
-
array_scan(in_array=vertex_start_face_count
|
|
361
|
+
array_scan(in_array=vertex_start_face_count, out_array=vertex_unique_face_offsets, inclusive=False)
|
|
377
362
|
|
|
378
363
|
# Get back edge count to host
|
|
379
364
|
face_count = int(
|
|
380
|
-
host_read_at_index(
|
|
381
|
-
vertex_unique_face_offsets.array, self.vertex_count() - 1, temporary_store=temporary_store
|
|
382
|
-
)
|
|
365
|
+
host_read_at_index(vertex_unique_face_offsets, self.vertex_count() - 1, temporary_store=temporary_store)
|
|
383
366
|
)
|
|
384
367
|
|
|
385
368
|
self._face_vertex_indices = wp.empty(shape=(face_count,), dtype=wp.vec3i, device=device)
|
|
@@ -393,14 +376,14 @@ class Tetmesh(Geometry):
|
|
|
393
376
|
device=device,
|
|
394
377
|
dim=self.vertex_count(),
|
|
395
378
|
inputs=[
|
|
396
|
-
vertex_start_face_offsets
|
|
397
|
-
vertex_unique_face_offsets
|
|
398
|
-
vertex_unique_face_count
|
|
399
|
-
vertex_face_other_vs
|
|
400
|
-
vertex_face_tets
|
|
379
|
+
vertex_start_face_offsets,
|
|
380
|
+
vertex_unique_face_offsets,
|
|
381
|
+
vertex_unique_face_count,
|
|
382
|
+
vertex_face_other_vs,
|
|
383
|
+
vertex_face_tets,
|
|
401
384
|
self._face_vertex_indices,
|
|
402
385
|
self._face_tet_indices,
|
|
403
|
-
boundary_mask
|
|
386
|
+
boundary_mask,
|
|
404
387
|
],
|
|
405
388
|
)
|
|
406
389
|
|
|
@@ -418,17 +401,17 @@ class Tetmesh(Geometry):
|
|
|
418
401
|
inputs=[self._face_vertex_indices, self._face_tet_indices, self.tet_vertex_indices, self.positions],
|
|
419
402
|
)
|
|
420
403
|
|
|
421
|
-
boundary_face_indices, _ = masked_indices(boundary_mask
|
|
404
|
+
boundary_face_indices, _ = masked_indices(boundary_mask)
|
|
422
405
|
self._boundary_face_indices = boundary_face_indices.detach()
|
|
423
406
|
|
|
424
407
|
def _compute_tet_edges(self, temporary_store: Optional[TemporaryStore] = None):
|
|
425
|
-
from warp.fem.utils import host_read_at_index
|
|
426
|
-
from warp.utils import array_scan
|
|
408
|
+
from warp._src.fem.utils import host_read_at_index
|
|
409
|
+
from warp._src.utils import array_scan
|
|
427
410
|
|
|
428
411
|
device = self.tet_vertex_indices.device
|
|
429
412
|
|
|
430
413
|
vertex_start_edge_count = borrow_temporary(temporary_store, dtype=int, device=device, shape=self.vertex_count())
|
|
431
|
-
vertex_start_edge_count.
|
|
414
|
+
vertex_start_edge_count.zero_()
|
|
432
415
|
vertex_start_edge_offsets = borrow_temporary_like(vertex_start_edge_count, temporary_store=temporary_store)
|
|
433
416
|
|
|
434
417
|
vertex_edge_ends = borrow_temporary(temporary_store, dtype=int, device=device, shape=(6 * self.cell_count()))
|
|
@@ -438,10 +421,10 @@ class Tetmesh(Geometry):
|
|
|
438
421
|
kernel=Tetmesh._count_starting_edges_kernel,
|
|
439
422
|
device=device,
|
|
440
423
|
dim=self.cell_count(),
|
|
441
|
-
inputs=[self.tet_vertex_indices, vertex_start_edge_count
|
|
424
|
+
inputs=[self.tet_vertex_indices, vertex_start_edge_count],
|
|
442
425
|
)
|
|
443
426
|
|
|
444
|
-
array_scan(in_array=vertex_start_edge_count
|
|
427
|
+
array_scan(in_array=vertex_start_edge_count, out_array=vertex_start_edge_offsets, inclusive=False)
|
|
445
428
|
|
|
446
429
|
# Count number of unique edges (deduplicate across faces)
|
|
447
430
|
vertex_unique_edge_count = vertex_start_edge_count
|
|
@@ -453,22 +436,18 @@ class Tetmesh(Geometry):
|
|
|
453
436
|
self._vertex_tet_offsets,
|
|
454
437
|
self._vertex_tet_indices,
|
|
455
438
|
self.tet_vertex_indices,
|
|
456
|
-
vertex_start_edge_offsets
|
|
457
|
-
vertex_unique_edge_count
|
|
458
|
-
vertex_edge_ends
|
|
439
|
+
vertex_start_edge_offsets,
|
|
440
|
+
vertex_unique_edge_count,
|
|
441
|
+
vertex_edge_ends,
|
|
459
442
|
],
|
|
460
443
|
)
|
|
461
444
|
|
|
462
|
-
vertex_unique_edge_offsets = borrow_temporary_like(
|
|
463
|
-
|
|
464
|
-
)
|
|
465
|
-
array_scan(in_array=vertex_start_edge_count.array, out_array=vertex_unique_edge_offsets.array, inclusive=False)
|
|
445
|
+
vertex_unique_edge_offsets = borrow_temporary_like(vertex_start_edge_offsets, temporary_store=temporary_store)
|
|
446
|
+
array_scan(in_array=vertex_start_edge_count, out_array=vertex_unique_edge_offsets, inclusive=False)
|
|
466
447
|
|
|
467
448
|
# Get back edge count to host
|
|
468
449
|
self._edge_count = int(
|
|
469
|
-
host_read_at_index(
|
|
470
|
-
vertex_unique_edge_offsets.array, self.vertex_count() - 1, temporary_store=temporary_store
|
|
471
|
-
)
|
|
450
|
+
host_read_at_index(vertex_unique_edge_offsets, self.vertex_count() - 1, temporary_store=temporary_store)
|
|
472
451
|
)
|
|
473
452
|
|
|
474
453
|
self._tet_edge_indices = wp.empty(
|
|
@@ -484,10 +463,10 @@ class Tetmesh(Geometry):
|
|
|
484
463
|
self._vertex_tet_offsets,
|
|
485
464
|
self._vertex_tet_indices,
|
|
486
465
|
self.tet_vertex_indices,
|
|
487
|
-
vertex_start_edge_offsets
|
|
488
|
-
vertex_unique_edge_offsets
|
|
489
|
-
vertex_unique_edge_count
|
|
490
|
-
vertex_edge_ends
|
|
466
|
+
vertex_start_edge_offsets,
|
|
467
|
+
vertex_unique_edge_offsets,
|
|
468
|
+
vertex_unique_edge_count,
|
|
469
|
+
vertex_edge_ends,
|
|
491
470
|
self._tet_edge_indices,
|
|
492
471
|
],
|
|
493
472
|
)
|
|
@@ -16,13 +16,12 @@
|
|
|
16
16
|
from typing import Any, Optional
|
|
17
17
|
|
|
18
18
|
import warp as wp
|
|
19
|
-
from warp.fem.cache import (
|
|
19
|
+
from warp._src.fem.cache import (
|
|
20
20
|
TemporaryStore,
|
|
21
21
|
borrow_temporary,
|
|
22
22
|
borrow_temporary_like,
|
|
23
|
-
cached_arg_value,
|
|
24
23
|
)
|
|
25
|
-
from warp.fem.types import (
|
|
24
|
+
from warp._src.fem.types import (
|
|
26
25
|
OUTSIDE,
|
|
27
26
|
Coords,
|
|
28
27
|
ElementIndex,
|
|
@@ -30,9 +29,11 @@ from warp.fem.types import (
|
|
|
30
29
|
)
|
|
31
30
|
|
|
32
31
|
from .closest_point import project_on_seg_at_origin, project_on_tri_at_origin
|
|
33
|
-
from .element import
|
|
32
|
+
from .element import Element
|
|
34
33
|
from .geometry import Geometry
|
|
35
34
|
|
|
35
|
+
_wp_module_name_ = "warp.fem.geometry.trimesh"
|
|
36
|
+
|
|
36
37
|
|
|
37
38
|
@wp.struct
|
|
38
39
|
class TrimeshCellArg:
|
|
@@ -103,11 +104,11 @@ class Trimesh(Geometry):
|
|
|
103
104
|
def boundary_side_count(self):
|
|
104
105
|
return self._boundary_edge_indices.shape[0]
|
|
105
106
|
|
|
106
|
-
def reference_cell(self) ->
|
|
107
|
-
return
|
|
107
|
+
def reference_cell(self) -> Element:
|
|
108
|
+
return Element.TRIANGLE
|
|
108
109
|
|
|
109
|
-
def reference_side(self) ->
|
|
110
|
-
return
|
|
110
|
+
def reference_side(self) -> Element:
|
|
111
|
+
return Element.LINE_SEGMENT
|
|
111
112
|
|
|
112
113
|
@property
|
|
113
114
|
def edge_tri_indices(self) -> wp.array:
|
|
@@ -130,30 +131,14 @@ class Trimesh(Geometry):
|
|
|
130
131
|
args.edge_vertex_indices = self._edge_vertex_indices.to(device)
|
|
131
132
|
args.edge_tri_indices = self._edge_tri_indices.to(device)
|
|
132
133
|
|
|
133
|
-
def cell_arg_value(self, device):
|
|
134
|
-
args = self.CellArg()
|
|
135
|
-
self.fill_cell_arg(args, device)
|
|
136
|
-
return args
|
|
137
|
-
|
|
138
134
|
def fill_cell_arg(self, args: TrimeshCellArg, device):
|
|
139
135
|
self._fill_cell_topo_arg(args.topology, device)
|
|
140
136
|
args.positions = self.positions.to(device)
|
|
141
137
|
|
|
142
|
-
def side_arg_value(self, device):
|
|
143
|
-
args = self.SideArg()
|
|
144
|
-
self.fill_side_arg(args, device)
|
|
145
|
-
return args
|
|
146
|
-
|
|
147
138
|
def fill_side_arg(self, args: TrimeshSideArg, device):
|
|
148
139
|
self._fill_side_topo_arg(args.topology, device)
|
|
149
140
|
args.positions = self.positions.to(device)
|
|
150
141
|
|
|
151
|
-
@cached_arg_value
|
|
152
|
-
def side_index_arg_value(self, device) -> SideIndexArg:
|
|
153
|
-
args = self.SideIndexArg()
|
|
154
|
-
self.fill_side_index_arg(args, device)
|
|
155
|
-
return args
|
|
156
|
-
|
|
157
142
|
def fill_side_index_arg(self, args: SideIndexArg, device):
|
|
158
143
|
args.boundary_edge_indices = self._boundary_edge_indices.to(device)
|
|
159
144
|
|
|
@@ -216,8 +201,8 @@ class Trimesh(Geometry):
|
|
|
216
201
|
return wp.where(tri_coords[start] + tri_coords[end] > 0.999, Coords(tri_coords[end], 0.0, 0.0), Coords(OUTSIDE))
|
|
217
202
|
|
|
218
203
|
def _build_topology(self, temporary_store: TemporaryStore):
|
|
219
|
-
from warp.fem.utils import compress_node_indices, host_read_at_index, masked_indices
|
|
220
|
-
from warp.utils import array_scan
|
|
204
|
+
from warp._src.fem.utils import compress_node_indices, host_read_at_index, masked_indices
|
|
205
|
+
from warp._src.utils import array_scan
|
|
221
206
|
|
|
222
207
|
device = self.tri_vertex_indices.device
|
|
223
208
|
|
|
@@ -228,7 +213,7 @@ class Trimesh(Geometry):
|
|
|
228
213
|
self._vertex_tri_indices = vertex_tri_indices.detach()
|
|
229
214
|
|
|
230
215
|
vertex_start_edge_count = borrow_temporary(temporary_store, dtype=int, device=device, shape=self.vertex_count())
|
|
231
|
-
vertex_start_edge_count.
|
|
216
|
+
vertex_start_edge_count.zero_()
|
|
232
217
|
vertex_start_edge_offsets = borrow_temporary_like(vertex_start_edge_count, temporary_store=temporary_store)
|
|
233
218
|
|
|
234
219
|
vertex_edge_ends = borrow_temporary(temporary_store, dtype=int, device=device, shape=(3 * self.cell_count()))
|
|
@@ -239,10 +224,10 @@ class Trimesh(Geometry):
|
|
|
239
224
|
kernel=Trimesh._count_starting_edges_kernel,
|
|
240
225
|
device=device,
|
|
241
226
|
dim=self.cell_count(),
|
|
242
|
-
inputs=[self.tri_vertex_indices, vertex_start_edge_count
|
|
227
|
+
inputs=[self.tri_vertex_indices, vertex_start_edge_count],
|
|
243
228
|
)
|
|
244
229
|
|
|
245
|
-
array_scan(in_array=vertex_start_edge_count
|
|
230
|
+
array_scan(in_array=vertex_start_edge_count, out_array=vertex_start_edge_offsets, inclusive=False)
|
|
246
231
|
|
|
247
232
|
# Count number of unique edges (deduplicate across faces)
|
|
248
233
|
vertex_unique_edge_count = vertex_start_edge_count
|
|
@@ -254,21 +239,19 @@ class Trimesh(Geometry):
|
|
|
254
239
|
self._vertex_tri_offsets,
|
|
255
240
|
self._vertex_tri_indices,
|
|
256
241
|
self.tri_vertex_indices,
|
|
257
|
-
vertex_start_edge_offsets
|
|
258
|
-
vertex_unique_edge_count
|
|
259
|
-
vertex_edge_ends
|
|
260
|
-
vertex_edge_tris
|
|
242
|
+
vertex_start_edge_offsets,
|
|
243
|
+
vertex_unique_edge_count,
|
|
244
|
+
vertex_edge_ends,
|
|
245
|
+
vertex_edge_tris,
|
|
261
246
|
],
|
|
262
247
|
)
|
|
263
248
|
|
|
264
249
|
vertex_unique_edge_offsets = borrow_temporary_like(vertex_start_edge_offsets, temporary_store=temporary_store)
|
|
265
|
-
array_scan(in_array=vertex_start_edge_count
|
|
250
|
+
array_scan(in_array=vertex_start_edge_count, out_array=vertex_unique_edge_offsets, inclusive=False)
|
|
266
251
|
|
|
267
252
|
# Get back edge count to host
|
|
268
253
|
edge_count = int(
|
|
269
|
-
host_read_at_index(
|
|
270
|
-
vertex_unique_edge_offsets.array, self.vertex_count() - 1, temporary_store=temporary_store
|
|
271
|
-
)
|
|
254
|
+
host_read_at_index(vertex_unique_edge_offsets, self.vertex_count() - 1, temporary_store=temporary_store)
|
|
272
255
|
)
|
|
273
256
|
|
|
274
257
|
self._edge_vertex_indices = wp.empty(shape=(edge_count,), dtype=wp.vec2i, device=device)
|
|
@@ -282,14 +265,14 @@ class Trimesh(Geometry):
|
|
|
282
265
|
device=device,
|
|
283
266
|
dim=self.vertex_count(),
|
|
284
267
|
inputs=[
|
|
285
|
-
vertex_start_edge_offsets
|
|
286
|
-
vertex_unique_edge_offsets
|
|
287
|
-
vertex_unique_edge_count
|
|
288
|
-
vertex_edge_ends
|
|
289
|
-
vertex_edge_tris
|
|
268
|
+
vertex_start_edge_offsets,
|
|
269
|
+
vertex_unique_edge_offsets,
|
|
270
|
+
vertex_unique_edge_count,
|
|
271
|
+
vertex_edge_ends,
|
|
272
|
+
vertex_edge_tris,
|
|
290
273
|
self._edge_vertex_indices,
|
|
291
274
|
self._edge_tri_indices,
|
|
292
|
-
boundary_mask
|
|
275
|
+
boundary_mask,
|
|
293
276
|
],
|
|
294
277
|
)
|
|
295
278
|
|
|
@@ -299,7 +282,7 @@ class Trimesh(Geometry):
|
|
|
299
282
|
vertex_edge_ends.release()
|
|
300
283
|
vertex_edge_tris.release()
|
|
301
284
|
|
|
302
|
-
boundary_edge_indices, _ = masked_indices(boundary_mask
|
|
285
|
+
boundary_edge_indices, _ = masked_indices(boundary_mask, temporary_store=temporary_store)
|
|
303
286
|
self._boundary_edge_indices = boundary_edge_indices.detach()
|
|
304
287
|
|
|
305
288
|
boundary_mask.release()
|
|
@@ -467,7 +450,7 @@ class Trimesh(Geometry):
|
|
|
467
450
|
q = pos - p0
|
|
468
451
|
e = args.positions[edge_idx[1]] - p0
|
|
469
452
|
|
|
470
|
-
dist, t = project_on_seg_at_origin(q, e, wp.
|
|
453
|
+
dist, t = project_on_seg_at_origin(q, e, wp.length_sq(e))
|
|
471
454
|
return Coords(t, 0.0, 0.0), dist
|
|
472
455
|
|
|
473
456
|
@wp.func
|