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.

Files changed (401) hide show
  1. warp/__init__.py +21 -7
  2. warp/autograd.py +14 -6
  3. warp/bin/warp-clang.dll +0 -0
  4. warp/bin/warp.dll +0 -0
  5. warp/build.py +424 -6
  6. warp/build_dll.py +20 -20
  7. warp/builtins.py +467 -368
  8. warp/codegen.py +193 -125
  9. warp/config.py +56 -12
  10. warp/constants.py +14 -6
  11. warp/context.py +524 -277
  12. warp/dlpack.py +22 -12
  13. warp/examples/__init__.py +14 -6
  14. warp/examples/assets/nonuniform.usd +0 -0
  15. warp/examples/assets/nvidia_logo.png +0 -0
  16. warp/examples/benchmarks/benchmark_api.py +14 -6
  17. warp/examples/benchmarks/benchmark_cloth.py +14 -6
  18. warp/examples/benchmarks/benchmark_cloth_cupy.py +14 -6
  19. warp/examples/benchmarks/benchmark_cloth_jax.py +14 -6
  20. warp/examples/benchmarks/benchmark_cloth_numba.py +15 -0
  21. warp/examples/benchmarks/benchmark_cloth_numpy.py +14 -6
  22. warp/examples/benchmarks/benchmark_cloth_paddle.py +14 -6
  23. warp/examples/benchmarks/benchmark_cloth_pytorch.py +14 -6
  24. warp/examples/benchmarks/benchmark_cloth_taichi.py +14 -6
  25. warp/examples/benchmarks/benchmark_cloth_warp.py +14 -6
  26. warp/examples/benchmarks/benchmark_gemm.py +82 -48
  27. warp/examples/benchmarks/benchmark_interop_paddle.py +14 -6
  28. warp/examples/benchmarks/benchmark_interop_torch.py +14 -6
  29. warp/examples/benchmarks/benchmark_launches.py +14 -6
  30. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  31. warp/examples/browse.py +14 -6
  32. warp/examples/core/example_cupy.py +14 -6
  33. warp/examples/core/example_dem.py +14 -6
  34. warp/examples/core/example_fluid.py +14 -6
  35. warp/examples/core/example_graph_capture.py +14 -6
  36. warp/examples/core/example_marching_cubes.py +14 -6
  37. warp/examples/core/example_mesh.py +14 -6
  38. warp/examples/core/example_mesh_intersect.py +14 -6
  39. warp/examples/core/example_nvdb.py +14 -6
  40. warp/examples/core/example_raycast.py +14 -6
  41. warp/examples/core/example_raymarch.py +14 -6
  42. warp/examples/core/example_render_opengl.py +14 -6
  43. warp/examples/core/example_sample_mesh.py +300 -0
  44. warp/examples/core/example_sph.py +14 -6
  45. warp/examples/core/example_torch.py +14 -6
  46. warp/examples/core/example_wave.py +14 -6
  47. warp/examples/fem/example_adaptive_grid.py +14 -6
  48. warp/examples/fem/example_apic_fluid.py +15 -7
  49. warp/examples/fem/example_burgers.py +16 -8
  50. warp/examples/fem/example_convection_diffusion.py +14 -6
  51. warp/examples/fem/example_convection_diffusion_dg.py +14 -6
  52. warp/examples/fem/example_deformed_geometry.py +15 -7
  53. warp/examples/fem/example_diffusion.py +14 -6
  54. warp/examples/fem/example_diffusion_3d.py +14 -6
  55. warp/examples/fem/example_diffusion_mgpu.py +14 -6
  56. warp/examples/fem/example_distortion_energy.py +15 -7
  57. warp/examples/fem/example_magnetostatics.py +20 -12
  58. warp/examples/fem/example_mixed_elasticity.py +14 -6
  59. warp/examples/fem/example_navier_stokes.py +14 -6
  60. warp/examples/fem/example_nonconforming_contact.py +14 -6
  61. warp/examples/fem/example_stokes.py +14 -6
  62. warp/examples/fem/example_stokes_transfer.py +14 -6
  63. warp/examples/fem/example_streamlines.py +14 -6
  64. warp/examples/fem/utils.py +24 -3
  65. warp/examples/interop/example_jax_callable.py +116 -0
  66. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  67. warp/examples/interop/example_jax_kernel.py +205 -0
  68. warp/examples/optim/example_bounce.py +14 -6
  69. warp/examples/optim/example_cloth_throw.py +14 -6
  70. warp/examples/optim/example_diffray.py +14 -6
  71. warp/examples/optim/example_drone.py +14 -6
  72. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  73. warp/examples/optim/example_inverse_kinematics.py +14 -6
  74. warp/examples/optim/example_inverse_kinematics_torch.py +14 -6
  75. warp/examples/optim/example_softbody_properties.py +14 -6
  76. warp/examples/optim/example_spring_cage.py +14 -6
  77. warp/examples/optim/example_trajectory.py +14 -6
  78. warp/examples/sim/example_cartpole.py +14 -6
  79. warp/examples/sim/example_cloth.py +14 -6
  80. warp/examples/sim/example_cloth_self_contact.py +14 -6
  81. warp/examples/sim/example_granular.py +14 -6
  82. warp/examples/sim/example_granular_collision_sdf.py +14 -6
  83. warp/examples/sim/example_jacobian_ik.py +14 -6
  84. warp/examples/sim/example_particle_chain.py +14 -6
  85. warp/examples/sim/example_quadruped.py +14 -6
  86. warp/examples/sim/example_rigid_chain.py +14 -6
  87. warp/examples/sim/example_rigid_contact.py +14 -6
  88. warp/examples/sim/example_rigid_force.py +14 -6
  89. warp/examples/sim/example_rigid_gyroscopic.py +14 -6
  90. warp/examples/sim/example_rigid_soft_contact.py +14 -6
  91. warp/examples/sim/example_soft_body.py +14 -6
  92. warp/examples/tile/example_tile_cholesky.py +14 -6
  93. warp/examples/tile/example_tile_convolution.py +14 -6
  94. warp/examples/tile/example_tile_fft.py +14 -6
  95. warp/examples/tile/example_tile_filtering.py +14 -6
  96. warp/examples/tile/example_tile_matmul.py +16 -10
  97. warp/examples/tile/example_tile_mlp.py +14 -6
  98. warp/examples/tile/example_tile_nbody.py +14 -6
  99. warp/examples/tile/example_tile_walker.py +14 -6
  100. warp/fabric.py +15 -0
  101. warp/fem/__init__.py +26 -1
  102. warp/fem/adaptivity.py +19 -4
  103. warp/fem/cache.py +15 -0
  104. warp/fem/dirichlet.py +15 -0
  105. warp/fem/domain.py +15 -0
  106. warp/fem/field/__init__.py +15 -0
  107. warp/fem/field/field.py +15 -0
  108. warp/fem/field/nodal_field.py +37 -68
  109. warp/fem/field/restriction.py +15 -0
  110. warp/fem/field/virtual.py +77 -23
  111. warp/fem/geometry/__init__.py +15 -0
  112. warp/fem/geometry/adaptive_nanogrid.py +24 -10
  113. warp/fem/geometry/closest_point.py +16 -1
  114. warp/fem/geometry/deformed_geometry.py +20 -2
  115. warp/fem/geometry/element.py +15 -0
  116. warp/fem/geometry/geometry.py +20 -0
  117. warp/fem/geometry/grid_2d.py +27 -12
  118. warp/fem/geometry/grid_3d.py +27 -15
  119. warp/fem/geometry/hexmesh.py +20 -7
  120. warp/fem/geometry/nanogrid.py +24 -11
  121. warp/fem/geometry/partition.py +15 -0
  122. warp/fem/geometry/quadmesh.py +28 -13
  123. warp/fem/geometry/tetmesh.py +18 -4
  124. warp/fem/geometry/trimesh.py +18 -8
  125. warp/fem/integrate.py +277 -93
  126. warp/fem/linalg.py +20 -5
  127. warp/fem/operator.py +15 -0
  128. warp/fem/polynomial.py +15 -0
  129. warp/fem/quadrature/__init__.py +15 -0
  130. warp/fem/quadrature/pic_quadrature.py +52 -22
  131. warp/fem/quadrature/quadrature.py +209 -25
  132. warp/fem/space/__init__.py +16 -1
  133. warp/fem/space/basis_function_space.py +19 -2
  134. warp/fem/space/basis_space.py +40 -18
  135. warp/fem/space/dof_mapper.py +15 -0
  136. warp/fem/space/function_space.py +15 -0
  137. warp/fem/space/grid_2d_function_space.py +15 -0
  138. warp/fem/space/grid_3d_function_space.py +15 -0
  139. warp/fem/space/hexmesh_function_space.py +17 -2
  140. warp/fem/space/nanogrid_function_space.py +15 -0
  141. warp/fem/space/partition.py +21 -2
  142. warp/fem/space/quadmesh_function_space.py +23 -8
  143. warp/fem/space/restriction.py +15 -0
  144. warp/fem/space/shape/__init__.py +15 -0
  145. warp/fem/space/shape/cube_shape_function.py +38 -23
  146. warp/fem/space/shape/shape_function.py +15 -0
  147. warp/fem/space/shape/square_shape_function.py +27 -12
  148. warp/fem/space/shape/tet_shape_function.py +15 -0
  149. warp/fem/space/shape/triangle_shape_function.py +16 -1
  150. warp/fem/space/tetmesh_function_space.py +18 -3
  151. warp/fem/space/topology.py +15 -0
  152. warp/fem/space/trimesh_function_space.py +17 -2
  153. warp/fem/types.py +15 -0
  154. warp/fem/utils.py +27 -6
  155. warp/jax.py +28 -7
  156. warp/jax_experimental/__init__.py +16 -0
  157. warp/{jax_experimental.py → jax_experimental/custom_call.py} +28 -33
  158. warp/jax_experimental/ffi.py +698 -0
  159. warp/jax_experimental/xla_ffi.py +602 -0
  160. warp/math.py +103 -6
  161. warp/native/array.h +28 -6
  162. warp/native/builtin.h +44 -9
  163. warp/native/bvh.cpp +18 -7
  164. warp/native/bvh.cu +57 -20
  165. warp/native/bvh.h +17 -7
  166. warp/native/clang/clang.cpp +45 -9
  167. warp/native/coloring.cpp +15 -6
  168. warp/native/crt.cpp +15 -6
  169. warp/native/crt.h +15 -6
  170. warp/native/cuda_crt.h +15 -6
  171. warp/native/cuda_util.cpp +29 -6
  172. warp/native/cuda_util.h +17 -6
  173. warp/native/error.cpp +15 -6
  174. warp/native/error.h +15 -6
  175. warp/native/exports.h +85 -63
  176. warp/native/fabric.h +15 -6
  177. warp/native/hashgrid.cpp +15 -6
  178. warp/native/hashgrid.cu +15 -6
  179. warp/native/hashgrid.h +15 -6
  180. warp/native/initializer_array.h +15 -6
  181. warp/native/intersect.h +41 -32
  182. warp/native/intersect_adj.h +48 -39
  183. warp/native/intersect_tri.h +17 -0
  184. warp/native/marching.cpp +16 -0
  185. warp/native/marching.cu +16 -7
  186. warp/native/marching.h +17 -0
  187. warp/native/mat.h +528 -15
  188. warp/native/mathdx.cpp +15 -6
  189. warp/native/matnn.h +15 -6
  190. warp/native/mesh.cpp +15 -6
  191. warp/native/mesh.cu +15 -6
  192. warp/native/mesh.h +25 -16
  193. warp/native/noise.h +15 -6
  194. warp/native/quat.h +114 -17
  195. warp/native/rand.h +21 -6
  196. warp/native/range.h +15 -6
  197. warp/native/reduce.cpp +15 -6
  198. warp/native/reduce.cu +15 -6
  199. warp/native/runlength_encode.cpp +15 -6
  200. warp/native/runlength_encode.cu +15 -6
  201. warp/native/scan.cpp +15 -6
  202. warp/native/scan.cu +15 -6
  203. warp/native/scan.h +15 -6
  204. warp/native/solid_angle.h +17 -0
  205. warp/native/sort.cpp +137 -65
  206. warp/native/sort.cu +167 -21
  207. warp/native/sort.h +23 -7
  208. warp/native/sparse.cpp +58 -28
  209. warp/native/sparse.cu +67 -23
  210. warp/native/spatial.h +15 -6
  211. warp/native/svd.h +131 -6
  212. warp/native/temp_buffer.h +15 -6
  213. warp/native/tile.h +316 -111
  214. warp/native/tile_reduce.h +61 -9
  215. warp/native/vec.h +83 -13
  216. warp/native/volume.cpp +100 -119
  217. warp/native/volume.cu +15 -6
  218. warp/native/volume.h +15 -6
  219. warp/native/volume_builder.cu +40 -16
  220. warp/native/volume_builder.h +21 -6
  221. warp/native/volume_impl.h +15 -6
  222. warp/native/warp.cpp +20 -12
  223. warp/native/warp.cu +114 -16
  224. warp/native/warp.h +34 -16
  225. warp/optim/__init__.py +14 -6
  226. warp/optim/adam.py +14 -6
  227. warp/optim/linear.py +25 -10
  228. warp/optim/sgd.py +14 -6
  229. warp/paddle.py +14 -6
  230. warp/render/__init__.py +14 -6
  231. warp/render/render_opengl.py +14 -6
  232. warp/render/render_usd.py +14 -6
  233. warp/render/utils.py +14 -6
  234. warp/sim/__init__.py +14 -7
  235. warp/sim/articulation.py +18 -10
  236. warp/sim/collide.py +35 -16
  237. warp/sim/graph_coloring.py +14 -6
  238. warp/sim/import_mjcf.py +463 -162
  239. warp/sim/import_snu.py +14 -7
  240. warp/sim/import_urdf.py +46 -18
  241. warp/sim/import_usd.py +14 -7
  242. warp/sim/inertia.py +14 -6
  243. warp/sim/integrator.py +14 -6
  244. warp/sim/integrator_euler.py +19 -11
  245. warp/sim/integrator_featherstone.py +17 -16
  246. warp/sim/integrator_vbd.py +222 -8
  247. warp/sim/integrator_xpbd.py +19 -11
  248. warp/sim/model.py +56 -19
  249. warp/sim/particles.py +14 -6
  250. warp/sim/render.py +14 -6
  251. warp/sim/utils.py +17 -2
  252. warp/sparse.py +657 -555
  253. warp/stubs.py +231 -19
  254. warp/tape.py +14 -6
  255. warp/tests/aux_test_class_kernel.py +14 -6
  256. warp/tests/aux_test_compile_consts_dummy.py +14 -6
  257. warp/tests/aux_test_conditional_unequal_types_kernels.py +14 -6
  258. warp/tests/aux_test_dependent.py +14 -6
  259. warp/tests/aux_test_grad_customs.py +14 -6
  260. warp/tests/aux_test_instancing_gc.py +14 -6
  261. warp/tests/aux_test_module_unload.py +14 -6
  262. warp/tests/aux_test_name_clash1.py +14 -6
  263. warp/tests/aux_test_name_clash2.py +14 -6
  264. warp/tests/aux_test_unresolved_func.py +14 -6
  265. warp/tests/aux_test_unresolved_symbol.py +14 -6
  266. warp/tests/cuda/__init__.py +0 -0
  267. warp/tests/{test_async.py → cuda/test_async.py} +14 -6
  268. warp/tests/{test_ipc.py → cuda/test_ipc.py} +14 -6
  269. warp/tests/{test_mempool.py → cuda/test_mempool.py} +53 -6
  270. warp/tests/{test_multigpu.py → cuda/test_multigpu.py} +14 -6
  271. warp/tests/{test_peer.py → cuda/test_peer.py} +14 -6
  272. warp/tests/{test_pinned.py → cuda/test_pinned.py} +14 -6
  273. warp/tests/{test_streams.py → cuda/test_streams.py} +85 -6
  274. warp/tests/geometry/__init__.py +0 -0
  275. warp/tests/{test_bvh.py → geometry/test_bvh.py} +14 -6
  276. warp/tests/{test_hash_grid.py → geometry/test_hash_grid.py} +14 -6
  277. warp/tests/{test_marching_cubes.py → geometry/test_marching_cubes.py} +14 -6
  278. warp/tests/{test_mesh.py → geometry/test_mesh.py} +14 -6
  279. warp/tests/{test_mesh_query_aabb.py → geometry/test_mesh_query_aabb.py} +14 -6
  280. warp/tests/{test_mesh_query_point.py → geometry/test_mesh_query_point.py} +80 -69
  281. warp/tests/{test_mesh_query_ray.py → geometry/test_mesh_query_ray.py} +15 -7
  282. warp/tests/{test_volume.py → geometry/test_volume.py} +55 -12
  283. warp/tests/{test_volume_write.py → geometry/test_volume_write.py} +14 -6
  284. warp/tests/interop/__init__.py +0 -0
  285. warp/tests/{test_dlpack.py → interop/test_dlpack.py} +42 -11
  286. warp/tests/{test_jax.py → interop/test_jax.py} +14 -6
  287. warp/tests/{test_paddle.py → interop/test_paddle.py} +14 -6
  288. warp/tests/{test_torch.py → interop/test_torch.py} +14 -6
  289. warp/tests/run_coverage_serial.py +14 -6
  290. warp/tests/sim/__init__.py +0 -0
  291. warp/tests/{disabled_kinematics.py → sim/disabled_kinematics.py} +23 -16
  292. warp/tests/{flaky_test_sim_grad.py → sim/flaky_test_sim_grad.py} +14 -6
  293. warp/tests/{test_collision.py → sim/test_collision.py} +16 -8
  294. warp/tests/{test_coloring.py → sim/test_coloring.py} +14 -7
  295. warp/tests/{test_model.py → sim/test_model.py} +55 -7
  296. warp/tests/{test_sim_grad_bounce_linear.py → sim/test_sim_grad_bounce_linear.py} +14 -6
  297. warp/tests/{test_sim_kinematics.py → sim/test_sim_kinematics.py} +16 -7
  298. warp/tests/sim/test_vbd.py +597 -0
  299. warp/tests/test_adam.py +14 -6
  300. warp/tests/test_arithmetic.py +14 -6
  301. warp/tests/test_array.py +14 -6
  302. warp/tests/test_array_reduce.py +14 -6
  303. warp/tests/test_assert.py +14 -6
  304. warp/tests/test_atomic.py +14 -6
  305. warp/tests/test_bool.py +15 -7
  306. warp/tests/test_builtins_resolution.py +14 -6
  307. warp/tests/test_closest_point_edge_edge.py +14 -6
  308. warp/tests/test_codegen.py +14 -6
  309. warp/tests/test_codegen_instancing.py +14 -6
  310. warp/tests/test_compile_consts.py +14 -6
  311. warp/tests/test_conditional.py +14 -6
  312. warp/tests/test_context.py +14 -6
  313. warp/tests/test_copy.py +14 -6
  314. warp/tests/test_ctypes.py +14 -6
  315. warp/tests/test_dense.py +14 -6
  316. warp/tests/test_devices.py +14 -6
  317. warp/tests/test_examples.py +42 -42
  318. warp/tests/test_fabricarray.py +14 -6
  319. warp/tests/test_fast_math.py +14 -6
  320. warp/tests/test_fem.py +37 -10
  321. warp/tests/test_fp16.py +14 -6
  322. warp/tests/test_func.py +14 -6
  323. warp/tests/test_future_annotations.py +14 -6
  324. warp/tests/test_generics.py +14 -6
  325. warp/tests/test_grad.py +14 -6
  326. warp/tests/test_grad_customs.py +14 -6
  327. warp/tests/test_grad_debug.py +14 -6
  328. warp/tests/test_implicit_init.py +14 -6
  329. warp/tests/test_import.py +14 -6
  330. warp/tests/test_indexedarray.py +14 -6
  331. warp/tests/test_intersect.py +14 -6
  332. warp/tests/test_iter.py +14 -6
  333. warp/tests/test_large.py +14 -6
  334. warp/tests/test_launch.py +14 -6
  335. warp/tests/test_lerp.py +14 -6
  336. warp/tests/test_linear_solvers.py +15 -11
  337. warp/tests/test_lvalue.py +14 -6
  338. warp/tests/test_mat.py +247 -85
  339. warp/tests/test_mat_lite.py +14 -6
  340. warp/tests/test_mat_scalar_ops.py +18 -10
  341. warp/tests/test_math.py +14 -6
  342. warp/tests/test_mlp.py +14 -6
  343. warp/tests/test_module_hashing.py +14 -6
  344. warp/tests/test_modules_lite.py +14 -6
  345. warp/tests/test_noise.py +14 -6
  346. warp/tests/test_operators.py +14 -6
  347. warp/tests/test_options.py +14 -6
  348. warp/tests/test_overwrite.py +15 -60
  349. warp/tests/test_print.py +14 -6
  350. warp/tests/test_quat.py +81 -52
  351. warp/tests/test_rand.py +58 -43
  352. warp/tests/test_reload.py +14 -6
  353. warp/tests/test_rounding.py +14 -6
  354. warp/tests/test_runlength_encode.py +14 -6
  355. warp/tests/test_scalar_ops.py +14 -6
  356. warp/tests/test_smoothstep.py +14 -6
  357. warp/tests/test_snippet.py +15 -0
  358. warp/tests/test_sparse.py +61 -12
  359. warp/tests/test_spatial.py +89 -6
  360. warp/tests/test_special_values.py +14 -6
  361. warp/tests/test_static.py +15 -7
  362. warp/tests/test_struct.py +14 -6
  363. warp/tests/test_tape.py +14 -6
  364. warp/tests/test_transient_module.py +14 -6
  365. warp/tests/test_triangle_closest_point.py +14 -6
  366. warp/tests/test_types.py +14 -6
  367. warp/tests/test_utils.py +98 -10
  368. warp/tests/test_vec.py +60 -40
  369. warp/tests/test_vec_lite.py +14 -6
  370. warp/tests/test_vec_scalar_ops.py +14 -6
  371. warp/tests/test_verify_fp.py +14 -6
  372. warp/tests/tile/__init__.py +0 -0
  373. warp/tests/{test_tile.py → tile/test_tile.py} +150 -57
  374. warp/tests/{test_tile_load.py → tile/test_tile_load.py} +15 -7
  375. warp/tests/{test_tile_mathdx.py → tile/test_tile_mathdx.py} +23 -12
  376. warp/tests/{test_tile_mlp.py → tile/test_tile_mlp.py} +39 -20
  377. warp/tests/{test_tile_reduce.py → tile/test_tile_reduce.py} +74 -7
  378. warp/tests/{test_tile_shared_memory.py → tile/test_tile_shared_memory.py} +14 -6
  379. warp/tests/{test_tile_view.py → tile/test_tile_view.py} +15 -7
  380. warp/tests/unittest_serial.py +15 -6
  381. warp/tests/unittest_suites.py +59 -65
  382. warp/tests/unittest_utils.py +16 -7
  383. warp/tests/walkthrough_debug.py +14 -6
  384. warp/thirdparty/unittest_parallel.py +15 -8
  385. warp/torch.py +14 -6
  386. warp/types.py +124 -664
  387. warp/utils.py +151 -78
  388. {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/METADATA +39 -12
  389. warp_lang-1.7.0.dist-info/RECORD +429 -0
  390. {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/WHEEL +1 -1
  391. warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
  392. warp/examples/optim/example_walker.py +0 -309
  393. warp/native/cutlass_gemm.cpp +0 -34
  394. warp/native/cutlass_gemm.cu +0 -373
  395. warp/tests/test_matmul.py +0 -503
  396. warp/tests/test_matmul_lite.py +0 -403
  397. warp/tests/test_vbd.py +0 -378
  398. warp/tests/unused_test_misc.py +0 -69
  399. warp_lang-1.6.1.dist-info/LICENSE.md +0 -126
  400. warp_lang-1.6.1.dist-info/RECORD +0 -419
  401. {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,18 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
1
16
  from typing import Optional
2
17
 
3
18
  import numpy as np
@@ -15,7 +30,6 @@ from .nanogrid import (
15
30
  _extract_axis_flag,
16
31
  _get_boundary_mask,
17
32
  _make_face_flags,
18
- _mat32,
19
33
  )
20
34
 
21
35
  _FACE_LEVEL_BIT = wp.constant(wp.uint8(4)) # follows nanogrid.FACE_OUTER_OFFSET_BIT
@@ -199,9 +213,9 @@ class AdaptiveNanogrid(Geometry):
199
213
  coords = uvw - wp.vec3(ijk)
200
214
 
201
215
  if wp.min(coords) == 0.0 or wp.max(coords) == 1.0:
202
- il = wp.select(coords[0] > 0.5, -1, 0)
203
- jl = wp.select(coords[1] > 0.5, -1, 0)
204
- kl = wp.select(coords[2] > 0.5, -1, 0)
216
+ il = wp.where(coords[0] > 0.5, 0, -1)
217
+ jl = wp.where(coords[1] > 0.5, 0, -1)
218
+ kl = wp.where(coords[2] > 0.5, 0, -1)
205
219
 
206
220
  for n in range(8):
207
221
  ni = n >> 2
@@ -316,7 +330,7 @@ class AdaptiveNanogrid(Geometry):
316
330
  flip = Nanogrid._get_face_inner_offset(flags)
317
331
  scale = AdaptiveNanogrid._get_face_scale(flags)
318
332
  v1, v2 = Nanogrid._face_tangent_vecs(args.cell_arg.cell_grid, axis, flip)
319
- return _mat32(v1, v2) * scale
333
+ return wp.matrix_from_cols(v1, v2) * scale
320
334
 
321
335
  @wp.func
322
336
  def side_inner_inverse_deformation_gradient(args: SideArg, s: Sample):
@@ -432,10 +446,10 @@ class AdaptiveNanogrid(Geometry):
432
446
  and wp.max(same_level_cell_coords) <= 1.0
433
447
  )
434
448
 
435
- return wp.select(
449
+ return wp.where(
436
450
  on_side,
437
- Coords(OUTSIDE),
438
451
  Coords(same_level_cell_coords[(axis + 1) % 3], same_level_cell_coords[(axis + 2) % 3], 0.0),
452
+ Coords(OUTSIDE),
439
453
  )
440
454
 
441
455
  def _build_face_grid(self, temporary_store: Optional[cache.TemporaryStore] = None):
@@ -512,7 +526,7 @@ class AdaptiveNanogrid(Geometry):
512
526
  for ax in range(3):
513
527
  coord = ijk[ax]
514
528
  level_flag = ((level >> ax) & 1) << _GRID_LEVEL_BIT
515
- ijk[ax] = wp.select(coord < 0, coord | level_flag, coord & ~level_flag)
529
+ ijk[ax] = wp.where(coord < 0, coord & ~level_flag, coord | level_flag)
516
530
 
517
531
  return _add_axis_flag(ijk, axis)
518
532
 
@@ -830,8 +844,8 @@ def _build_face_indices_and_flags(
830
844
 
831
845
  plus_cell_index, minus_cell_index = _find_face_neighbours(cell_grid, ijk, axis, level_count, cell_level)
832
846
 
833
- inner_cell = wp.select(minus_cell_index == -1, minus_cell_index, plus_cell_index)
834
- outer_cell = wp.select(plus_cell_index == -1, plus_cell_index, minus_cell_index)
847
+ inner_cell = wp.where(minus_cell_index == -1, plus_cell_index, minus_cell_index)
848
+ outer_cell = wp.where(plus_cell_index == -1, minus_cell_index, plus_cell_index)
835
849
 
836
850
  face_level = wp.min(cell_level[inner_cell], cell_level[outer_cell])
837
851
 
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import Any
2
17
 
3
18
  import warp as wp
@@ -44,7 +59,7 @@ def project_on_tri_at_origin(q: Any, e1: Any, e2: Any):
44
59
 
45
60
  @wp.func
46
61
  def project_on_tet_at_origin(q: wp.vec3, e1: wp.vec3, e2: wp.vec3, e3: wp.vec3):
47
- mat = wp.inverse(wp.mat33(e1, e2, e3))
62
+ mat = wp.inverse(wp.matrix_from_cols(e1, e2, e3))
48
63
  coords = mat * q
49
64
 
50
65
  if wp.min(coords) >= 0.0 and coords[0] + coords[1] + coords[2] <= 1.0:
@@ -1,3 +1,18 @@
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
+
1
16
  import warp as wp
2
17
  from warp.fem import cache
3
18
  from warp.fem.types import Coords, ElementIndex, Sample
@@ -31,7 +46,6 @@ class DeformedGeometry(Geometry):
31
46
  self._relative = relative
32
47
 
33
48
  self.field: GeometryField = field
34
- self.base = self.field.geometry
35
49
  self.dimension = self.base.dimension
36
50
 
37
51
  self.CellArg = self.field.ElementEvalArg
@@ -66,9 +80,13 @@ class DeformedGeometry(Geometry):
66
80
  self._make_default_dependent_implementations()
67
81
 
68
82
  @property
69
- def name(self):
83
+ def name(self) -> str:
70
84
  return f"DefGeo_{self.field.name}_{'rel' if self._relative else 'abs'}"
71
85
 
86
+ @property
87
+ def base(self) -> Geometry:
88
+ return self.field.geometry.base
89
+
72
90
  # Geometry device interface
73
91
 
74
92
  @cache.cached_arg_value
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import List, Tuple
2
17
 
3
18
  from warp.fem.polynomial import Polynomial, quadrature_1d
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import Any
2
17
 
3
18
  import warp as wp
@@ -43,6 +58,11 @@ class Geometry:
43
58
  """Manifold dimension of the geometry cells"""
44
59
  return self.reference_cell().dimension
45
60
 
61
+ @property
62
+ def base(self) -> "Geometry":
63
+ """Returns the base geometry from which this geometry derives its topology. Usually `self`"""
64
+ return self
65
+
46
66
  @property
47
67
  def name(self) -> str:
48
68
  return self.__class__.__name__
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import Optional
2
17
 
3
18
  import warp as wp
@@ -158,7 +173,7 @@ class Grid2D(Geometry):
158
173
  return Grid2D.Side(axis, origin)
159
174
 
160
175
  axis_side_index = side_index - 2 * arg.cell_count
161
- axis = wp.select(axis_side_index < arg.axis_offsets[1], 1, 0)
176
+ axis = wp.where(axis_side_index < arg.axis_offsets[1], 0, 1)
162
177
 
163
178
  altitude = arg.cell_arg.res[Grid2D.ROTATION[axis, 0]]
164
179
  longitude = axis_side_index - arg.axis_offsets[axis]
@@ -258,7 +273,7 @@ class Grid2D(Geometry):
258
273
  def side_position(args: SideArg, s: Sample):
259
274
  side = Grid2D.get_side(args, s.element_index)
260
275
 
261
- coord = wp.select((side.origin[0] == 0) == (side.axis == 0), 1.0 - s.element_coords[0], s.element_coords[0])
276
+ coord = wp.where((side.origin[0] == 0) == (side.axis == 0), s.element_coords[0], 1.0 - s.element_coords[0])
262
277
 
263
278
  local_pos = wp.vec2(
264
279
  float(side.origin[0]),
@@ -273,7 +288,7 @@ class Grid2D(Geometry):
273
288
  def side_deformation_gradient(args: SideArg, s: Sample):
274
289
  side = Grid2D.get_side(args, s.element_index)
275
290
 
276
- sign = wp.select((side.origin[0] == 0) == (side.axis == 0), -1.0, 1.0)
291
+ sign = wp.where((side.origin[0] == 0) == (side.axis == 0), 1.0, -1.0)
277
292
 
278
293
  return wp.cw_mul(Grid2D._rotate(side.axis, wp.vec2(0.0, sign)), args.cell_arg.cell_size)
279
294
 
@@ -301,7 +316,7 @@ class Grid2D(Geometry):
301
316
  def side_normal(args: SideArg, s: Sample):
302
317
  side = Grid2D.get_side(args, s.element_index)
303
318
 
304
- sign = wp.select(side.origin[0] == 0, 1.0, -1.0)
319
+ sign = wp.where(side.origin[0] == 0, -1.0, 1.0)
305
320
 
306
321
  local_n = wp.vec2(sign, 0.0)
307
322
  return Grid2D._rotate(side.axis, local_n)
@@ -310,7 +325,7 @@ class Grid2D(Geometry):
310
325
  def side_inner_cell_index(arg: SideArg, side_index: ElementIndex):
311
326
  side = Grid2D.get_side(arg, side_index)
312
327
 
313
- inner_alt = wp.select(side.origin[0] == 0, side.origin[0] - 1, 0)
328
+ inner_alt = wp.where(side.origin[0] == 0, 0, side.origin[0] - 1)
314
329
 
315
330
  inner_origin = wp.vec2i(inner_alt, side.origin[1])
316
331
 
@@ -322,8 +337,8 @@ class Grid2D(Geometry):
322
337
  side = Grid2D.get_side(arg, side_index)
323
338
 
324
339
  alt_axis = Grid2D.ROTATION[side.axis, 0]
325
- outer_alt = wp.select(
326
- side.origin[0] == arg.cell_arg.res[alt_axis], side.origin[0], arg.cell_arg.res[alt_axis] - 1
340
+ outer_alt = wp.where(
341
+ side.origin[0] == arg.cell_arg.res[alt_axis], arg.cell_arg.res[alt_axis] - 1, side.origin[0]
327
342
  )
328
343
 
329
344
  outer_origin = wp.vec2i(outer_alt, side.origin[1])
@@ -335,9 +350,9 @@ class Grid2D(Geometry):
335
350
  def side_inner_cell_coords(args: SideArg, side_index: ElementIndex, side_coords: Coords):
336
351
  side = Grid2D.get_side(args, side_index)
337
352
 
338
- inner_alt = wp.select(side.origin[0] == 0, 1.0, 0.0)
353
+ inner_alt = wp.where(side.origin[0] == 0, 0.0, 1.0)
339
354
 
340
- side_coord = wp.select((side.origin[0] == 0) == (side.axis == 0), 1.0 - side_coords[0], side_coords[0])
355
+ side_coord = wp.where((side.origin[0] == 0) == (side.axis == 0), side_coords[0], 1.0 - side_coords[0])
341
356
 
342
357
  coords = Grid2D._rotate(side.axis, wp.vec2(inner_alt, side_coord))
343
358
  return Coords(coords[0], coords[1], 0.0)
@@ -347,9 +362,9 @@ class Grid2D(Geometry):
347
362
  side = Grid2D.get_side(args, side_index)
348
363
 
349
364
  alt_axis = Grid2D.ROTATION[side.axis, 0]
350
- outer_alt = wp.select(side.origin[0] == args.cell_arg.res[alt_axis], 0.0, 1.0)
365
+ outer_alt = wp.where(side.origin[0] == args.cell_arg.res[alt_axis], 1.0, 0.0)
351
366
 
352
- side_coord = wp.select((side.origin[0] == 0) == (side.axis == 0), 1.0 - side_coords[0], side_coords[0])
367
+ side_coord = wp.where((side.origin[0] == 0) == (side.axis == 0), side_coords[0], 1.0 - side_coords[0])
353
368
 
354
369
  coords = Grid2D._rotate(side.axis, wp.vec2(outer_alt, side_coord))
355
370
  return Coords(coords[0], coords[1], 0.0)
@@ -367,7 +382,7 @@ class Grid2D(Geometry):
367
382
  if float(side.origin[0] - cell[side.axis]) == element_coords[side.axis]:
368
383
  long_axis = Grid2D.ROTATION[side.axis, 1]
369
384
  axis_coord = element_coords[long_axis]
370
- side_coord = wp.select((side.origin[0] == 0) == (side.axis == 0), 1.0 - axis_coord, axis_coord)
385
+ side_coord = wp.where((side.origin[0] == 0) == (side.axis == 0), axis_coord, 1.0 - axis_coord)
371
386
  return Coords(side_coord, 0.0, 0.0)
372
387
 
373
388
  return Coords(OUTSIDE)
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import Any, Optional
2
17
 
3
18
  import warp as wp
@@ -15,9 +30,6 @@ class Grid3DCellArg:
15
30
  origin: wp.vec3
16
31
 
17
32
 
18
- _mat32 = wp.mat(shape=(3, 2), dtype=float)
19
-
20
-
21
33
  class Grid3D(Geometry):
22
34
  """Three-dimensional regular grid geometry"""
23
35
 
@@ -316,7 +328,7 @@ class Grid3D(Geometry):
316
328
  def side_position(args: SideArg, s: Sample):
317
329
  side = Grid3D.get_side(args, s.element_index)
318
330
 
319
- coord0 = wp.select(side.origin[0] == 0, s.element_coords[0], 1.0 - s.element_coords[0])
331
+ coord0 = wp.where(side.origin[0] == 0, 1.0 - s.element_coords[0], s.element_coords[0])
320
332
 
321
333
  local_pos = wp.vec3(
322
334
  float(side.origin[0]),
@@ -332,9 +344,9 @@ class Grid3D(Geometry):
332
344
  def side_deformation_gradient(args: SideArg, s: Sample):
333
345
  side = Grid3D.get_side(args, s.element_index)
334
346
 
335
- sign = wp.select(side.origin[0] == 0, 1.0, -1.0)
347
+ sign = wp.where(side.origin[0] == 0, -1.0, 1.0)
336
348
 
337
- return _mat32(
349
+ return wp.matrix_from_cols(
338
350
  wp.cw_mul(Grid3D._local_to_world(side.axis, wp.vec3(0.0, sign, 0.0)), args.cell_arg.cell_size),
339
351
  wp.cw_mul(Grid3D._local_to_world(side.axis, wp.vec3(0.0, 0.0, 1.0)), args.cell_arg.cell_size),
340
352
  )
@@ -364,7 +376,7 @@ class Grid3D(Geometry):
364
376
  def side_normal(args: SideArg, s: Sample):
365
377
  side = Grid3D.get_side(args, s.element_index)
366
378
 
367
- sign = wp.select(side.origin[0] == 0, 1.0, -1.0)
379
+ sign = wp.where(side.origin[0] == 0, -1.0, 1.0)
368
380
 
369
381
  local_n = wp.vec3(sign, 0.0, 0.0)
370
382
  return Grid3D._local_to_world(side.axis, local_n)
@@ -373,7 +385,7 @@ class Grid3D(Geometry):
373
385
  def side_inner_cell_index(arg: SideArg, side_index: ElementIndex):
374
386
  side = Grid3D.get_side(arg, side_index)
375
387
 
376
- inner_alt = wp.select(side.origin[0] == 0, side.origin[0] - 1, 0)
388
+ inner_alt = wp.where(side.origin[0] == 0, 0, side.origin[0] - 1)
377
389
 
378
390
  inner_origin = wp.vec3i(inner_alt, side.origin[1], side.origin[2])
379
391
 
@@ -386,8 +398,8 @@ class Grid3D(Geometry):
386
398
 
387
399
  alt_axis = Grid3D._local_to_world_axis(side.axis, 0)
388
400
 
389
- outer_alt = wp.select(
390
- side.origin[0] == arg.cell_arg.res[alt_axis], side.origin[0], arg.cell_arg.res[alt_axis] - 1
401
+ outer_alt = wp.where(
402
+ side.origin[0] == arg.cell_arg.res[alt_axis], arg.cell_arg.res[alt_axis] - 1, side.origin[0]
391
403
  )
392
404
 
393
405
  outer_origin = wp.vec3i(outer_alt, side.origin[1], side.origin[2])
@@ -399,9 +411,9 @@ class Grid3D(Geometry):
399
411
  def side_inner_cell_coords(args: SideArg, side_index: ElementIndex, side_coords: Coords):
400
412
  side = Grid3D.get_side(args, side_index)
401
413
 
402
- inner_alt = wp.select(side.origin[0] == 0, 1.0, 0.0)
414
+ inner_alt = wp.where(side.origin[0] == 0, 0.0, 1.0)
403
415
 
404
- side_coord0 = wp.select(side.origin[0] == 0, side_coords[0], 1.0 - side_coords[0])
416
+ side_coord0 = wp.where(side.origin[0] == 0, 1.0 - side_coords[0], side_coords[0])
405
417
 
406
418
  return Grid3D._local_to_world(side.axis, wp.vec3(inner_alt, side_coord0, side_coords[1]))
407
419
 
@@ -410,9 +422,9 @@ class Grid3D(Geometry):
410
422
  side = Grid3D.get_side(args, side_index)
411
423
 
412
424
  alt_axis = Grid3D._local_to_world_axis(side.axis, 0)
413
- outer_alt = wp.select(side.origin[0] == args.cell_arg.res[alt_axis], 0.0, 1.0)
425
+ outer_alt = wp.where(side.origin[0] == args.cell_arg.res[alt_axis], 1.0, 0.0)
414
426
 
415
- side_coord0 = wp.select(side.origin[0] == 0, side_coords[0], 1.0 - side_coords[0])
427
+ side_coord0 = wp.where(side.origin[0] == 0, 1.0 - side_coords[0], side_coords[0])
416
428
 
417
429
  return Grid3D._local_to_world(side.axis, wp.vec3(outer_alt, side_coord0, side_coords[1]))
418
430
 
@@ -430,7 +442,7 @@ class Grid3D(Geometry):
430
442
  long_axis = Grid3D._local_to_world_axis(side.axis, 1)
431
443
  lat_axis = Grid3D._local_to_world_axis(side.axis, 2)
432
444
  long_coord = element_coords[long_axis]
433
- long_coord = wp.select(side.origin[0] == 0, long_coord, 1.0 - long_coord)
445
+ long_coord = wp.where(side.origin[0] == 0, 1.0 - long_coord, long_coord)
434
446
  return Coords(long_coord, element_coords[lat_axis], 0.0)
435
447
 
436
448
  return Coords(OUTSIDE)
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import Optional
2
17
 
3
18
  import warp as wp
@@ -31,8 +46,6 @@ class HexmeshSideArg:
31
46
  face_hex_face_orientation: wp.array(dtype=wp.vec4i)
32
47
 
33
48
 
34
- _mat32 = wp.mat(shape=(3, 2), dtype=float)
35
-
36
49
  FACE_VERTEX_INDICES = wp.constant(
37
50
  wp.mat(shape=(6, 4), dtype=int)(
38
51
  [
@@ -307,7 +320,7 @@ class Hexmesh(Geometry):
307
320
  def side_deformation_gradient(args: SideArg, s: Sample):
308
321
  """Transposed side deformation gradient at `coords`"""
309
322
  v1, v2 = Hexmesh._side_deformation_vecs(args, s.element_index, s.element_coords)
310
- return _mat32(v1, v2)
323
+ return wp.matrix_from_cols(v1, v2)
311
324
 
312
325
  @wp.func
313
326
  def side_inner_cell_index(arg: SideArg, side_index: ElementIndex):
@@ -327,7 +340,7 @@ class Hexmesh(Geometry):
327
340
  )
328
341
 
329
342
  normal_coord = hex_coords[_FACE_COORD_INDICES[face_index, 2]]
330
- normal_coord = wp.select(_FACE_COORD_INDICES[face_index, 3] == 0, normal_coord - 1.0, -normal_coord)
343
+ normal_coord = wp.where(_FACE_COORD_INDICES[face_index, 3] == 0, -normal_coord, normal_coord - 1.0)
331
344
 
332
345
  return face_coords, normal_coord
333
346
 
@@ -338,7 +351,7 @@ class Hexmesh(Geometry):
338
351
  hex_coords = Coords()
339
352
  hex_coords[_FACE_COORD_INDICES[face_index, 0]] = face_coords[0]
340
353
  hex_coords[_FACE_COORD_INDICES[face_index, 1]] = face_coords[1]
341
- hex_coords[_FACE_COORD_INDICES[face_index, 2]] = wp.select(_FACE_COORD_INDICES[face_index, 3] == 0, 1.0, 0.0)
354
+ hex_coords[_FACE_COORD_INDICES[face_index, 2]] = wp.where(_FACE_COORD_INDICES[face_index, 3] == 0, 0.0, 1.0)
342
355
 
343
356
  return hex_coords
344
357
 
@@ -387,8 +400,8 @@ class Hexmesh(Geometry):
387
400
  face_orientation = args.face_hex_face_orientation[side_index][3]
388
401
 
389
402
  face_coords, normal_coord = Hexmesh._hex_local_face_coords(hex_coords, local_face_index)
390
- return wp.select(
391
- normal_coord == 0.0, Coords(OUTSIDE), Hexmesh._local_to_oriented_face_coords(face_orientation, face_coords)
403
+ return wp.where(
404
+ normal_coord == 0.0, Hexmesh._local_to_oriented_face_coords(face_orientation, face_coords), Coords(OUTSIDE)
392
405
  )
393
406
 
394
407
  @wp.func
@@ -1,3 +1,18 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
1
16
  from typing import Optional
2
17
 
3
18
  import numpy as np
@@ -18,13 +33,11 @@ FACE_AXIS_MASK = wp.constant(wp.uint8((1 << 2) - 1))
18
33
  FACE_INNER_OFFSET_BIT = wp.constant(wp.uint8(2))
19
34
  FACE_OUTER_OFFSET_BIT = wp.constant(wp.uint8(3))
20
35
 
21
- _mat32 = wp.mat(shape=(3, 2), dtype=float)
22
-
23
36
 
24
37
  @wp.func
25
38
  def _add_axis_flag(ijk: wp.vec3i, axis: int):
26
39
  coord = ijk[axis]
27
- ijk[axis] = wp.select(coord < 0, coord | GRID_AXIS_FLAG, coord & (~GRID_AXIS_FLAG))
40
+ ijk[axis] = wp.where(coord < 0, coord & (~GRID_AXIS_FLAG), coord | GRID_AXIS_FLAG)
28
41
  return ijk
29
42
 
30
43
 
@@ -176,9 +189,9 @@ class Nanogrid(Geometry):
176
189
  coords = uvw - wp.vec3(ijk)
177
190
  if cell_index == -1:
178
191
  if wp.min(coords) == 0.0 or wp.max(coords) == 1.0:
179
- il = wp.select(coords[0] > 0.5, -1, 0)
180
- jl = wp.select(coords[1] > 0.5, -1, 0)
181
- kl = wp.select(coords[2] > 0.5, -1, 0)
192
+ il = wp.where(coords[0] > 0.5, 0, -1)
193
+ jl = wp.where(coords[1] > 0.5, 0, -1)
194
+ kl = wp.where(coords[2] > 0.5, 0, -1)
182
195
 
183
196
  for n in range(8):
184
197
  ni = n >> 2
@@ -312,7 +325,7 @@ class Nanogrid(Geometry):
312
325
  axis = Nanogrid._get_face_axis(flags)
313
326
  flip = Nanogrid._get_face_inner_offset(flags)
314
327
  v1, v2 = Nanogrid._face_tangent_vecs(args.cell_arg.cell_grid, axis, flip)
315
- return _mat32(v1, v2)
328
+ return wp.matrix_from_cols(v1, v2)
316
329
 
317
330
  @wp.func
318
331
  def side_inner_inverse_deformation_gradient(args: SideArg, s: Sample):
@@ -394,8 +407,8 @@ class Nanogrid(Geometry):
394
407
 
395
408
  on_side = float(side_ijk[axis] - cell_ijk[axis]) == element_coords[axis]
396
409
 
397
- return wp.select(
398
- on_side, Coords(OUTSIDE), Coords(element_coords[(axis + 1) % 3], element_coords[(axis + 2) % 3], 0.0)
410
+ return wp.where(
411
+ on_side, Coords(element_coords[(axis + 1) % 3], element_coords[(axis + 2) % 3], 0.0), Coords(OUTSIDE)
399
412
  )
400
413
 
401
414
  @wp.func
@@ -523,8 +536,8 @@ def _build_edge_grid(cell_ijk, grid: wp.Volume, temporary_store: cache.Temporary
523
536
 
524
537
  @wp.func
525
538
  def _make_face_flags(axis: int, plus_cell_index: int, minus_cell_index: int):
526
- plus_boundary = wp.uint8(wp.select(plus_cell_index == -1, 0, 1)) << FACE_OUTER_OFFSET_BIT
527
- minus_boundary = wp.uint8(wp.select(minus_cell_index == -1, 0, 1)) << FACE_INNER_OFFSET_BIT
539
+ plus_boundary = wp.uint8(wp.where(plus_cell_index == -1, 1, 0)) << FACE_OUTER_OFFSET_BIT
540
+ minus_boundary = wp.uint8(wp.where(minus_cell_index == -1, 1, 0)) << FACE_INNER_OFFSET_BIT
528
541
 
529
542
  return wp.uint8(axis) | plus_boundary | minus_boundary
530
543
 
@@ -1,3 +1,18 @@
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
+
1
16
  from typing import Any
2
17
 
3
18
  import warp as wp
@@ -1,3 +1,18 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
1
16
  from typing import Optional
2
17
 
3
18
  import warp as wp
@@ -150,13 +165,13 @@ class Quadmesh(Geometry):
150
165
  s = side_coords[0]
151
166
 
152
167
  if vs == quad_vidx[0]:
153
- return wp.select(ve == quad_vidx[1], Coords(0.0, s, 0.0), Coords(s, 0.0, 0.0))
168
+ return wp.where(ve == quad_vidx[1], Coords(s, 0.0, 0.0), Coords(0.0, s, 0.0))
154
169
  elif vs == quad_vidx[1]:
155
- return wp.select(ve == quad_vidx[2], Coords(1.0 - s, 0.0, 0.0), Coords(1.0, s, 0.0))
170
+ return wp.where(ve == quad_vidx[2], Coords(1.0, s, 0.0), Coords(1.0 - s, 0.0, 0.0))
156
171
  elif vs == quad_vidx[2]:
157
- return wp.select(ve == quad_vidx[3], Coords(1.0, 1.0 - s, 0.0), Coords(1.0 - s, 1.0, 0.0))
172
+ return wp.where(ve == quad_vidx[3], Coords(1.0 - s, 1.0, 0.0), Coords(1.0, 1.0 - s, 0.0))
158
173
 
159
- return wp.select(ve == quad_vidx[0], Coords(s, 1.0, 0.0), Coords(0.0, 1.0 - s, 0.0))
174
+ return wp.where(ve == quad_vidx[0], Coords(0.0, 1.0 - s, 0.0), Coords(s, 1.0, 0.0))
160
175
 
161
176
  @wp.func
162
177
  def _quad_to_edge_coords(
@@ -175,18 +190,18 @@ class Quadmesh(Geometry):
175
190
  cy = quad_coords[1]
176
191
 
177
192
  if vs == quad_vidx[0]:
178
- oc = wp.select(ve == quad_vidx[1], cx, cy)
179
- ec = wp.select(ve == quad_vidx[1], cy, cx)
193
+ oc = wp.where(ve == quad_vidx[1], cy, cx)
194
+ ec = wp.where(ve == quad_vidx[1], cx, cy)
180
195
  elif vs == quad_vidx[1]:
181
- oc = wp.select(ve == quad_vidx[2], cy, 1.0 - cx)
182
- ec = wp.select(ve == quad_vidx[2], 1.0 - cx, cy)
196
+ oc = wp.where(ve == quad_vidx[2], 1.0 - cx, cy)
197
+ ec = wp.where(ve == quad_vidx[2], cy, 1.0 - cx)
183
198
  elif vs == quad_vidx[2]:
184
- oc = wp.select(ve == quad_vidx[3], 1.0 - cx, 1.0 - cy)
185
- ec = wp.select(ve == quad_vidx[3], 1.0 - cy, 1.0 - cx)
199
+ oc = wp.where(ve == quad_vidx[3], 1.0 - cy, 1.0 - cx)
200
+ ec = wp.where(ve == quad_vidx[3], 1.0 - cx, 1.0 - cy)
186
201
  else:
187
- oc = wp.select(ve == quad_vidx[0], 1.0 - cy, cx)
188
- ec = wp.select(ve == quad_vidx[0], cx, 1.0 - cy)
189
- return wp.select(oc == 0.0, Coords(OUTSIDE), Coords(ec, 0.0, 0.0))
202
+ oc = wp.where(ve == quad_vidx[0], cx, 1.0 - cy)
203
+ ec = wp.where(ve == quad_vidx[0], 1.0 - cy, cx)
204
+ return wp.where(oc == 0.0, Coords(ec, 0.0, 0.0), Coords(OUTSIDE))
190
205
 
191
206
  @wp.func
192
207
  def boundary_side_index(args: SideIndexArg, boundary_side_index: int):