warp-lang 1.10.0__py3-none-macosx_11_0_arm64.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 (468) hide show
  1. warp/__init__.py +334 -0
  2. warp/__init__.pyi +5856 -0
  3. warp/_src/__init__.py +14 -0
  4. warp/_src/autograd.py +1077 -0
  5. warp/_src/build.py +620 -0
  6. warp/_src/build_dll.py +642 -0
  7. warp/_src/builtins.py +10555 -0
  8. warp/_src/codegen.py +4361 -0
  9. warp/_src/config.py +178 -0
  10. warp/_src/constants.py +59 -0
  11. warp/_src/context.py +8352 -0
  12. warp/_src/dlpack.py +464 -0
  13. warp/_src/fabric.py +362 -0
  14. warp/_src/fem/__init__.py +14 -0
  15. warp/_src/fem/adaptivity.py +510 -0
  16. warp/_src/fem/cache.py +689 -0
  17. warp/_src/fem/dirichlet.py +190 -0
  18. warp/_src/fem/domain.py +553 -0
  19. warp/_src/fem/field/__init__.py +131 -0
  20. warp/_src/fem/field/field.py +703 -0
  21. warp/_src/fem/field/nodal_field.py +403 -0
  22. warp/_src/fem/field/restriction.py +39 -0
  23. warp/_src/fem/field/virtual.py +1021 -0
  24. warp/_src/fem/geometry/__init__.py +32 -0
  25. warp/_src/fem/geometry/adaptive_nanogrid.py +782 -0
  26. warp/_src/fem/geometry/closest_point.py +99 -0
  27. warp/_src/fem/geometry/deformed_geometry.py +277 -0
  28. warp/_src/fem/geometry/element.py +854 -0
  29. warp/_src/fem/geometry/geometry.py +693 -0
  30. warp/_src/fem/geometry/grid_2d.py +478 -0
  31. warp/_src/fem/geometry/grid_3d.py +539 -0
  32. warp/_src/fem/geometry/hexmesh.py +956 -0
  33. warp/_src/fem/geometry/nanogrid.py +660 -0
  34. warp/_src/fem/geometry/partition.py +483 -0
  35. warp/_src/fem/geometry/quadmesh.py +597 -0
  36. warp/_src/fem/geometry/tetmesh.py +762 -0
  37. warp/_src/fem/geometry/trimesh.py +588 -0
  38. warp/_src/fem/integrate.py +2507 -0
  39. warp/_src/fem/linalg.py +385 -0
  40. warp/_src/fem/operator.py +398 -0
  41. warp/_src/fem/polynomial.py +231 -0
  42. warp/_src/fem/quadrature/__init__.py +17 -0
  43. warp/_src/fem/quadrature/pic_quadrature.py +318 -0
  44. warp/_src/fem/quadrature/quadrature.py +665 -0
  45. warp/_src/fem/space/__init__.py +248 -0
  46. warp/_src/fem/space/basis_function_space.py +499 -0
  47. warp/_src/fem/space/basis_space.py +681 -0
  48. warp/_src/fem/space/dof_mapper.py +253 -0
  49. warp/_src/fem/space/function_space.py +312 -0
  50. warp/_src/fem/space/grid_2d_function_space.py +179 -0
  51. warp/_src/fem/space/grid_3d_function_space.py +229 -0
  52. warp/_src/fem/space/hexmesh_function_space.py +255 -0
  53. warp/_src/fem/space/nanogrid_function_space.py +199 -0
  54. warp/_src/fem/space/partition.py +435 -0
  55. warp/_src/fem/space/quadmesh_function_space.py +222 -0
  56. warp/_src/fem/space/restriction.py +221 -0
  57. warp/_src/fem/space/shape/__init__.py +152 -0
  58. warp/_src/fem/space/shape/cube_shape_function.py +1107 -0
  59. warp/_src/fem/space/shape/shape_function.py +134 -0
  60. warp/_src/fem/space/shape/square_shape_function.py +928 -0
  61. warp/_src/fem/space/shape/tet_shape_function.py +829 -0
  62. warp/_src/fem/space/shape/triangle_shape_function.py +674 -0
  63. warp/_src/fem/space/tetmesh_function_space.py +270 -0
  64. warp/_src/fem/space/topology.py +461 -0
  65. warp/_src/fem/space/trimesh_function_space.py +193 -0
  66. warp/_src/fem/types.py +114 -0
  67. warp/_src/fem/utils.py +488 -0
  68. warp/_src/jax.py +188 -0
  69. warp/_src/jax_experimental/__init__.py +14 -0
  70. warp/_src/jax_experimental/custom_call.py +389 -0
  71. warp/_src/jax_experimental/ffi.py +1286 -0
  72. warp/_src/jax_experimental/xla_ffi.py +658 -0
  73. warp/_src/marching_cubes.py +710 -0
  74. warp/_src/math.py +416 -0
  75. warp/_src/optim/__init__.py +14 -0
  76. warp/_src/optim/adam.py +165 -0
  77. warp/_src/optim/linear.py +1608 -0
  78. warp/_src/optim/sgd.py +114 -0
  79. warp/_src/paddle.py +408 -0
  80. warp/_src/render/__init__.py +14 -0
  81. warp/_src/render/imgui_manager.py +291 -0
  82. warp/_src/render/render_opengl.py +3638 -0
  83. warp/_src/render/render_usd.py +939 -0
  84. warp/_src/render/utils.py +162 -0
  85. warp/_src/sparse.py +2718 -0
  86. warp/_src/tape.py +1208 -0
  87. warp/_src/thirdparty/__init__.py +0 -0
  88. warp/_src/thirdparty/appdirs.py +598 -0
  89. warp/_src/thirdparty/dlpack.py +145 -0
  90. warp/_src/thirdparty/unittest_parallel.py +676 -0
  91. warp/_src/torch.py +393 -0
  92. warp/_src/types.py +5888 -0
  93. warp/_src/utils.py +1695 -0
  94. warp/autograd.py +33 -0
  95. warp/bin/libwarp-clang.dylib +0 -0
  96. warp/bin/libwarp.dylib +0 -0
  97. warp/build.py +29 -0
  98. warp/build_dll.py +24 -0
  99. warp/codegen.py +24 -0
  100. warp/constants.py +24 -0
  101. warp/context.py +33 -0
  102. warp/dlpack.py +24 -0
  103. warp/examples/__init__.py +24 -0
  104. warp/examples/assets/bear.usd +0 -0
  105. warp/examples/assets/bunny.usd +0 -0
  106. warp/examples/assets/cube.usd +0 -0
  107. warp/examples/assets/nonuniform.usd +0 -0
  108. warp/examples/assets/nvidia_logo.png +0 -0
  109. warp/examples/assets/pixel.jpg +0 -0
  110. warp/examples/assets/rocks.nvdb +0 -0
  111. warp/examples/assets/rocks.usd +0 -0
  112. warp/examples/assets/sphere.usd +0 -0
  113. warp/examples/assets/square_cloth.usd +0 -0
  114. warp/examples/benchmarks/benchmark_api.py +389 -0
  115. warp/examples/benchmarks/benchmark_cloth.py +296 -0
  116. warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
  117. warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
  118. warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
  119. warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
  120. warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
  121. warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
  122. warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
  123. warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
  124. warp/examples/benchmarks/benchmark_gemm.py +164 -0
  125. warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
  126. warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
  127. warp/examples/benchmarks/benchmark_launches.py +301 -0
  128. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  129. warp/examples/benchmarks/benchmark_tile_sort.py +155 -0
  130. warp/examples/browse.py +37 -0
  131. warp/examples/core/example_cupy.py +86 -0
  132. warp/examples/core/example_dem.py +241 -0
  133. warp/examples/core/example_fluid.py +299 -0
  134. warp/examples/core/example_graph_capture.py +150 -0
  135. warp/examples/core/example_marching_cubes.py +195 -0
  136. warp/examples/core/example_mesh.py +180 -0
  137. warp/examples/core/example_mesh_intersect.py +211 -0
  138. warp/examples/core/example_nvdb.py +182 -0
  139. warp/examples/core/example_raycast.py +111 -0
  140. warp/examples/core/example_raymarch.py +205 -0
  141. warp/examples/core/example_render_opengl.py +290 -0
  142. warp/examples/core/example_sample_mesh.py +300 -0
  143. warp/examples/core/example_sph.py +411 -0
  144. warp/examples/core/example_spin_lock.py +93 -0
  145. warp/examples/core/example_torch.py +211 -0
  146. warp/examples/core/example_wave.py +269 -0
  147. warp/examples/core/example_work_queue.py +118 -0
  148. warp/examples/distributed/example_jacobi_mpi.py +506 -0
  149. warp/examples/fem/example_adaptive_grid.py +286 -0
  150. warp/examples/fem/example_apic_fluid.py +469 -0
  151. warp/examples/fem/example_burgers.py +261 -0
  152. warp/examples/fem/example_convection_diffusion.py +181 -0
  153. warp/examples/fem/example_convection_diffusion_dg.py +225 -0
  154. warp/examples/fem/example_darcy_ls_optimization.py +489 -0
  155. warp/examples/fem/example_deformed_geometry.py +172 -0
  156. warp/examples/fem/example_diffusion.py +196 -0
  157. warp/examples/fem/example_diffusion_3d.py +225 -0
  158. warp/examples/fem/example_diffusion_mgpu.py +225 -0
  159. warp/examples/fem/example_distortion_energy.py +228 -0
  160. warp/examples/fem/example_elastic_shape_optimization.py +387 -0
  161. warp/examples/fem/example_magnetostatics.py +242 -0
  162. warp/examples/fem/example_mixed_elasticity.py +293 -0
  163. warp/examples/fem/example_navier_stokes.py +263 -0
  164. warp/examples/fem/example_nonconforming_contact.py +300 -0
  165. warp/examples/fem/example_stokes.py +213 -0
  166. warp/examples/fem/example_stokes_transfer.py +262 -0
  167. warp/examples/fem/example_streamlines.py +357 -0
  168. warp/examples/fem/utils.py +1047 -0
  169. warp/examples/interop/example_jax_callable.py +146 -0
  170. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  171. warp/examples/interop/example_jax_kernel.py +232 -0
  172. warp/examples/optim/example_diffray.py +561 -0
  173. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  174. warp/examples/tile/example_tile_block_cholesky.py +502 -0
  175. warp/examples/tile/example_tile_cholesky.py +88 -0
  176. warp/examples/tile/example_tile_convolution.py +66 -0
  177. warp/examples/tile/example_tile_fft.py +55 -0
  178. warp/examples/tile/example_tile_filtering.py +113 -0
  179. warp/examples/tile/example_tile_matmul.py +85 -0
  180. warp/examples/tile/example_tile_mcgp.py +191 -0
  181. warp/examples/tile/example_tile_mlp.py +385 -0
  182. warp/examples/tile/example_tile_nbody.py +199 -0
  183. warp/fabric.py +24 -0
  184. warp/fem/__init__.py +173 -0
  185. warp/fem/adaptivity.py +26 -0
  186. warp/fem/cache.py +30 -0
  187. warp/fem/dirichlet.py +24 -0
  188. warp/fem/field/__init__.py +24 -0
  189. warp/fem/field/field.py +26 -0
  190. warp/fem/geometry/__init__.py +21 -0
  191. warp/fem/geometry/closest_point.py +31 -0
  192. warp/fem/linalg.py +38 -0
  193. warp/fem/operator.py +32 -0
  194. warp/fem/polynomial.py +29 -0
  195. warp/fem/space/__init__.py +22 -0
  196. warp/fem/space/basis_space.py +24 -0
  197. warp/fem/space/shape/__init__.py +68 -0
  198. warp/fem/space/topology.py +24 -0
  199. warp/fem/types.py +24 -0
  200. warp/fem/utils.py +32 -0
  201. warp/jax.py +29 -0
  202. warp/jax_experimental/__init__.py +29 -0
  203. warp/jax_experimental/custom_call.py +29 -0
  204. warp/jax_experimental/ffi.py +39 -0
  205. warp/jax_experimental/xla_ffi.py +24 -0
  206. warp/marching_cubes.py +24 -0
  207. warp/math.py +37 -0
  208. warp/native/array.h +1687 -0
  209. warp/native/builtin.h +2327 -0
  210. warp/native/bvh.cpp +562 -0
  211. warp/native/bvh.cu +826 -0
  212. warp/native/bvh.h +555 -0
  213. warp/native/clang/clang.cpp +541 -0
  214. warp/native/coloring.cpp +622 -0
  215. warp/native/crt.cpp +51 -0
  216. warp/native/crt.h +568 -0
  217. warp/native/cuda_crt.h +1058 -0
  218. warp/native/cuda_util.cpp +677 -0
  219. warp/native/cuda_util.h +313 -0
  220. warp/native/error.cpp +77 -0
  221. warp/native/error.h +36 -0
  222. warp/native/exports.h +2023 -0
  223. warp/native/fabric.h +246 -0
  224. warp/native/hashgrid.cpp +311 -0
  225. warp/native/hashgrid.cu +89 -0
  226. warp/native/hashgrid.h +240 -0
  227. warp/native/initializer_array.h +41 -0
  228. warp/native/intersect.h +1253 -0
  229. warp/native/intersect_adj.h +375 -0
  230. warp/native/intersect_tri.h +348 -0
  231. warp/native/mat.h +5189 -0
  232. warp/native/mathdx.cpp +93 -0
  233. warp/native/matnn.h +221 -0
  234. warp/native/mesh.cpp +266 -0
  235. warp/native/mesh.cu +406 -0
  236. warp/native/mesh.h +2097 -0
  237. warp/native/nanovdb/GridHandle.h +533 -0
  238. warp/native/nanovdb/HostBuffer.h +591 -0
  239. warp/native/nanovdb/NanoVDB.h +6246 -0
  240. warp/native/nanovdb/NodeManager.h +323 -0
  241. warp/native/nanovdb/PNanoVDB.h +3390 -0
  242. warp/native/noise.h +859 -0
  243. warp/native/quat.h +1664 -0
  244. warp/native/rand.h +342 -0
  245. warp/native/range.h +145 -0
  246. warp/native/reduce.cpp +174 -0
  247. warp/native/reduce.cu +363 -0
  248. warp/native/runlength_encode.cpp +79 -0
  249. warp/native/runlength_encode.cu +61 -0
  250. warp/native/scan.cpp +47 -0
  251. warp/native/scan.cu +55 -0
  252. warp/native/scan.h +23 -0
  253. warp/native/solid_angle.h +466 -0
  254. warp/native/sort.cpp +251 -0
  255. warp/native/sort.cu +286 -0
  256. warp/native/sort.h +35 -0
  257. warp/native/sparse.cpp +241 -0
  258. warp/native/sparse.cu +435 -0
  259. warp/native/spatial.h +1306 -0
  260. warp/native/svd.h +727 -0
  261. warp/native/temp_buffer.h +46 -0
  262. warp/native/tile.h +4124 -0
  263. warp/native/tile_radix_sort.h +1112 -0
  264. warp/native/tile_reduce.h +838 -0
  265. warp/native/tile_scan.h +240 -0
  266. warp/native/tuple.h +189 -0
  267. warp/native/vec.h +2199 -0
  268. warp/native/version.h +23 -0
  269. warp/native/volume.cpp +501 -0
  270. warp/native/volume.cu +68 -0
  271. warp/native/volume.h +970 -0
  272. warp/native/volume_builder.cu +483 -0
  273. warp/native/volume_builder.h +52 -0
  274. warp/native/volume_impl.h +70 -0
  275. warp/native/warp.cpp +1143 -0
  276. warp/native/warp.cu +4604 -0
  277. warp/native/warp.h +358 -0
  278. warp/optim/__init__.py +20 -0
  279. warp/optim/adam.py +24 -0
  280. warp/optim/linear.py +35 -0
  281. warp/optim/sgd.py +24 -0
  282. warp/paddle.py +24 -0
  283. warp/py.typed +0 -0
  284. warp/render/__init__.py +22 -0
  285. warp/render/imgui_manager.py +29 -0
  286. warp/render/render_opengl.py +24 -0
  287. warp/render/render_usd.py +24 -0
  288. warp/render/utils.py +24 -0
  289. warp/sparse.py +51 -0
  290. warp/tape.py +24 -0
  291. warp/tests/__init__.py +1 -0
  292. warp/tests/__main__.py +4 -0
  293. warp/tests/assets/curlnoise_golden.npy +0 -0
  294. warp/tests/assets/mlp_golden.npy +0 -0
  295. warp/tests/assets/pixel.npy +0 -0
  296. warp/tests/assets/pnoise_golden.npy +0 -0
  297. warp/tests/assets/spiky.usd +0 -0
  298. warp/tests/assets/test_grid.nvdb +0 -0
  299. warp/tests/assets/test_index_grid.nvdb +0 -0
  300. warp/tests/assets/test_int32_grid.nvdb +0 -0
  301. warp/tests/assets/test_vec_grid.nvdb +0 -0
  302. warp/tests/assets/torus.nvdb +0 -0
  303. warp/tests/assets/torus.usda +105 -0
  304. warp/tests/aux_test_class_kernel.py +34 -0
  305. warp/tests/aux_test_compile_consts_dummy.py +18 -0
  306. warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
  307. warp/tests/aux_test_dependent.py +29 -0
  308. warp/tests/aux_test_grad_customs.py +29 -0
  309. warp/tests/aux_test_instancing_gc.py +26 -0
  310. warp/tests/aux_test_module_aot.py +7 -0
  311. warp/tests/aux_test_module_unload.py +23 -0
  312. warp/tests/aux_test_name_clash1.py +40 -0
  313. warp/tests/aux_test_name_clash2.py +40 -0
  314. warp/tests/aux_test_reference.py +9 -0
  315. warp/tests/aux_test_reference_reference.py +8 -0
  316. warp/tests/aux_test_square.py +16 -0
  317. warp/tests/aux_test_unresolved_func.py +22 -0
  318. warp/tests/aux_test_unresolved_symbol.py +22 -0
  319. warp/tests/cuda/__init__.py +0 -0
  320. warp/tests/cuda/test_async.py +676 -0
  321. warp/tests/cuda/test_conditional_captures.py +1147 -0
  322. warp/tests/cuda/test_ipc.py +124 -0
  323. warp/tests/cuda/test_mempool.py +233 -0
  324. warp/tests/cuda/test_multigpu.py +169 -0
  325. warp/tests/cuda/test_peer.py +139 -0
  326. warp/tests/cuda/test_pinned.py +84 -0
  327. warp/tests/cuda/test_streams.py +691 -0
  328. warp/tests/geometry/__init__.py +0 -0
  329. warp/tests/geometry/test_bvh.py +335 -0
  330. warp/tests/geometry/test_hash_grid.py +259 -0
  331. warp/tests/geometry/test_marching_cubes.py +294 -0
  332. warp/tests/geometry/test_mesh.py +318 -0
  333. warp/tests/geometry/test_mesh_query_aabb.py +392 -0
  334. warp/tests/geometry/test_mesh_query_point.py +935 -0
  335. warp/tests/geometry/test_mesh_query_ray.py +323 -0
  336. warp/tests/geometry/test_volume.py +1103 -0
  337. warp/tests/geometry/test_volume_write.py +346 -0
  338. warp/tests/interop/__init__.py +0 -0
  339. warp/tests/interop/test_dlpack.py +730 -0
  340. warp/tests/interop/test_jax.py +1673 -0
  341. warp/tests/interop/test_paddle.py +800 -0
  342. warp/tests/interop/test_torch.py +1001 -0
  343. warp/tests/run_coverage_serial.py +39 -0
  344. warp/tests/test_adam.py +162 -0
  345. warp/tests/test_arithmetic.py +1096 -0
  346. warp/tests/test_array.py +3756 -0
  347. warp/tests/test_array_reduce.py +156 -0
  348. warp/tests/test_assert.py +303 -0
  349. warp/tests/test_atomic.py +336 -0
  350. warp/tests/test_atomic_bitwise.py +209 -0
  351. warp/tests/test_atomic_cas.py +312 -0
  352. warp/tests/test_bool.py +220 -0
  353. warp/tests/test_builtins_resolution.py +732 -0
  354. warp/tests/test_closest_point_edge_edge.py +327 -0
  355. warp/tests/test_codegen.py +974 -0
  356. warp/tests/test_codegen_instancing.py +1495 -0
  357. warp/tests/test_compile_consts.py +215 -0
  358. warp/tests/test_conditional.py +298 -0
  359. warp/tests/test_context.py +35 -0
  360. warp/tests/test_copy.py +319 -0
  361. warp/tests/test_ctypes.py +618 -0
  362. warp/tests/test_dense.py +73 -0
  363. warp/tests/test_devices.py +127 -0
  364. warp/tests/test_enum.py +136 -0
  365. warp/tests/test_examples.py +424 -0
  366. warp/tests/test_fabricarray.py +998 -0
  367. warp/tests/test_fast_math.py +72 -0
  368. warp/tests/test_fem.py +2204 -0
  369. warp/tests/test_fixedarray.py +229 -0
  370. warp/tests/test_fp16.py +136 -0
  371. warp/tests/test_func.py +501 -0
  372. warp/tests/test_future_annotations.py +100 -0
  373. warp/tests/test_generics.py +656 -0
  374. warp/tests/test_grad.py +893 -0
  375. warp/tests/test_grad_customs.py +339 -0
  376. warp/tests/test_grad_debug.py +341 -0
  377. warp/tests/test_implicit_init.py +411 -0
  378. warp/tests/test_import.py +45 -0
  379. warp/tests/test_indexedarray.py +1140 -0
  380. warp/tests/test_intersect.py +103 -0
  381. warp/tests/test_iter.py +76 -0
  382. warp/tests/test_large.py +177 -0
  383. warp/tests/test_launch.py +411 -0
  384. warp/tests/test_lerp.py +151 -0
  385. warp/tests/test_linear_solvers.py +223 -0
  386. warp/tests/test_lvalue.py +427 -0
  387. warp/tests/test_map.py +526 -0
  388. warp/tests/test_mat.py +3515 -0
  389. warp/tests/test_mat_assign_copy.py +178 -0
  390. warp/tests/test_mat_constructors.py +573 -0
  391. warp/tests/test_mat_lite.py +122 -0
  392. warp/tests/test_mat_scalar_ops.py +2913 -0
  393. warp/tests/test_math.py +212 -0
  394. warp/tests/test_module_aot.py +287 -0
  395. warp/tests/test_module_hashing.py +258 -0
  396. warp/tests/test_modules_lite.py +70 -0
  397. warp/tests/test_noise.py +252 -0
  398. warp/tests/test_operators.py +299 -0
  399. warp/tests/test_options.py +129 -0
  400. warp/tests/test_overwrite.py +551 -0
  401. warp/tests/test_print.py +408 -0
  402. warp/tests/test_quat.py +2653 -0
  403. warp/tests/test_quat_assign_copy.py +145 -0
  404. warp/tests/test_rand.py +339 -0
  405. warp/tests/test_reload.py +303 -0
  406. warp/tests/test_rounding.py +157 -0
  407. warp/tests/test_runlength_encode.py +196 -0
  408. warp/tests/test_scalar_ops.py +133 -0
  409. warp/tests/test_smoothstep.py +108 -0
  410. warp/tests/test_snippet.py +318 -0
  411. warp/tests/test_sparse.py +845 -0
  412. warp/tests/test_spatial.py +2859 -0
  413. warp/tests/test_spatial_assign_copy.py +160 -0
  414. warp/tests/test_special_values.py +361 -0
  415. warp/tests/test_static.py +640 -0
  416. warp/tests/test_struct.py +901 -0
  417. warp/tests/test_tape.py +242 -0
  418. warp/tests/test_transient_module.py +93 -0
  419. warp/tests/test_triangle_closest_point.py +192 -0
  420. warp/tests/test_tuple.py +361 -0
  421. warp/tests/test_types.py +615 -0
  422. warp/tests/test_utils.py +594 -0
  423. warp/tests/test_vec.py +1408 -0
  424. warp/tests/test_vec_assign_copy.py +143 -0
  425. warp/tests/test_vec_constructors.py +325 -0
  426. warp/tests/test_vec_lite.py +80 -0
  427. warp/tests/test_vec_scalar_ops.py +2327 -0
  428. warp/tests/test_verify_fp.py +100 -0
  429. warp/tests/test_version.py +75 -0
  430. warp/tests/tile/__init__.py +0 -0
  431. warp/tests/tile/test_tile.py +1519 -0
  432. warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
  433. warp/tests/tile/test_tile_cholesky.py +608 -0
  434. warp/tests/tile/test_tile_load.py +724 -0
  435. warp/tests/tile/test_tile_mathdx.py +156 -0
  436. warp/tests/tile/test_tile_matmul.py +179 -0
  437. warp/tests/tile/test_tile_mlp.py +400 -0
  438. warp/tests/tile/test_tile_reduce.py +950 -0
  439. warp/tests/tile/test_tile_shared_memory.py +376 -0
  440. warp/tests/tile/test_tile_sort.py +121 -0
  441. warp/tests/tile/test_tile_view.py +173 -0
  442. warp/tests/unittest_serial.py +47 -0
  443. warp/tests/unittest_suites.py +430 -0
  444. warp/tests/unittest_utils.py +469 -0
  445. warp/tests/walkthrough_debug.py +95 -0
  446. warp/torch.py +24 -0
  447. warp/types.py +51 -0
  448. warp/utils.py +31 -0
  449. warp_lang-1.10.0.dist-info/METADATA +459 -0
  450. warp_lang-1.10.0.dist-info/RECORD +468 -0
  451. warp_lang-1.10.0.dist-info/WHEEL +5 -0
  452. warp_lang-1.10.0.dist-info/licenses/LICENSE.md +176 -0
  453. warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
  454. warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
  455. warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
  456. warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
  457. warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
  458. warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
  459. warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
  460. warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
  461. warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
  462. warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
  463. warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
  464. warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
  465. warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
  466. warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
  467. warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
  468. warp_lang-1.10.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,99 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from typing import Any
17
+
18
+ import warp as wp
19
+ from warp._src.fem.types import Coords
20
+
21
+ _wp_module_name_ = "warp.fem.geometry.closest_point"
22
+
23
+
24
+ @wp.func
25
+ def project_on_seg_at_origin(q: Any, seg: Any, len_sq: float):
26
+ s = wp.clamp(wp.dot(q, seg) / len_sq, 0.0, 1.0)
27
+ return wp.length_sq(q - s * seg), s
28
+
29
+
30
+ @wp.func
31
+ def project_on_tri_at_origin(q: Any, e1: Any, e2: Any):
32
+ e1e1 = wp.dot(e1, e1)
33
+ e1e2 = wp.dot(e1, e2)
34
+ e2e2 = wp.dot(e2, e2)
35
+
36
+ det = e1e1 * e2e2 - e1e2 * e1e2
37
+
38
+ if det > e1e1 * e2e2 * 1.0e-6:
39
+ e1p = wp.dot(e1, q)
40
+ e2p = wp.dot(e2, q)
41
+
42
+ s = (e2e2 * e1p - e1e2 * e2p) / det
43
+ t = (e1e1 * e2p - e1e2 * e1p) / det
44
+
45
+ if s >= 0.0 and t >= 0.0 and s + t <= 1.0:
46
+ # point inside triangle (distance can be non-zero in 3D case)
47
+ return wp.length_sq(q - s * e1 - t * e2), Coords(1.0 - s - t, s, t)
48
+
49
+ d1, s1 = project_on_seg_at_origin(q, e1, e1e1)
50
+ d2, s2 = project_on_seg_at_origin(q, e2, e2e2)
51
+ d12, s12 = project_on_seg_at_origin(q - e1, e2 - e1, wp.length_sq(e2 - e1))
52
+
53
+ if d1 <= d2:
54
+ if d1 <= d12:
55
+ return d1, Coords(1.0 - s1, s1, 0.0)
56
+ elif d2 <= d12:
57
+ return d2, Coords(1.0 - s2, 0.0, s2)
58
+
59
+ return d12, Coords(0.0, 1.0 - s12, s12)
60
+
61
+
62
+ @wp.func
63
+ def project_on_tet_at_origin(q: wp.vec3, e1: wp.vec3, e2: wp.vec3, e3: wp.vec3):
64
+ mat = wp.inverse(wp.matrix_from_cols(e1, e2, e3))
65
+ coords = mat * q
66
+
67
+ if wp.min(coords) >= 0.0 and coords[0] + coords[1] + coords[2] <= 1.0:
68
+ return 0.0, coords
69
+
70
+ # Not inside tet, compare closest point on each tri
71
+
72
+ d12, s12 = project_on_tri_at_origin(q, e1, e2)
73
+ d23, s23 = project_on_tri_at_origin(q, e2, e3)
74
+ d31, s31 = project_on_tri_at_origin(q, e3, e1)
75
+ d123, s123 = project_on_tri_at_origin(q - e1, e2 - e1, e3 - e1)
76
+
77
+ dmin = wp.min(wp.vec4(d12, d23, d31, d123))
78
+
79
+ if dmin == d12:
80
+ return dmin, Coords(s12[1], s12[2], 0.0)
81
+ elif dmin == d23:
82
+ return dmin, Coords(0.0, s23[1], s23[2])
83
+ elif dmin == d31:
84
+ return dmin, Coords(s31[2], 0.0, s31[1])
85
+ else:
86
+ return dmin, s123
87
+
88
+
89
+ @wp.func
90
+ def project_on_box_at_origin(coords: wp.vec3, sizes: wp.vec3):
91
+ proj_coords = wp.min(wp.max(coords, wp.vec3(0.0)), sizes)
92
+ return wp.length_sq(coords - proj_coords), wp.cw_div(proj_coords, sizes)
93
+
94
+
95
+ @wp.func
96
+ def project_on_box_at_origin(coords: wp.vec2, sizes: wp.vec2):
97
+ proj_coords = wp.min(wp.max(coords, wp.vec2(0.0)), sizes)
98
+ norm_coords = wp.cw_div(proj_coords, sizes)
99
+ return wp.length_sq(coords - proj_coords), Coords(norm_coords[0], norm_coords[1], 0.0)
@@ -0,0 +1,277 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from typing import ClassVar
17
+
18
+ import warp as wp
19
+ from warp._src.fem import cache
20
+ from warp._src.fem.polynomial import Polynomial
21
+ from warp._src.fem.types import Coords, ElementIndex, Sample, make_free_sample
22
+ from warp._src.types import type_is_vector, type_size
23
+
24
+ from .geometry import Geometry
25
+
26
+ _wp_module_name_ = "warp.fem.geometry.deformed_geometry"
27
+
28
+ _mat32 = wp.mat(shape=(3, 2), dtype=float)
29
+
30
+
31
+ class DeformedGeometry(Geometry):
32
+ _dynamic_attribute_constructors_phase_1: ClassVar = {
33
+ "CellArg": lambda obj: obj._make_cell_arg(),
34
+ "SideArg": lambda obj: obj._make_side_arg(),
35
+ "cell_position": lambda obj: obj._make_cell_position(),
36
+ "cell_deformation_gradient": lambda obj: obj._make_cell_deformation_gradient(),
37
+ "side_to_cell_arg": lambda obj: obj._make_side_to_cell_arg(),
38
+ "side_position": lambda obj: obj._make_side_position(),
39
+ "side_deformation_gradient": lambda obj: obj._make_side_deformation_gradient(),
40
+ "side_inner_cell_index": lambda obj: obj._make_side_inner_cell_index(),
41
+ "side_outer_cell_index": lambda obj: obj._make_side_outer_cell_index(),
42
+ "side_inner_cell_coords": lambda obj: obj._make_side_inner_cell_coords(),
43
+ "side_outer_cell_coords": lambda obj: obj._make_side_outer_cell_coords(),
44
+ "side_from_cell_coords": lambda obj: obj._make_side_from_cell_coords(),
45
+ "cell_bvh_id": lambda obj: obj._make_cell_bvh_id(),
46
+ "cell_bounds": lambda obj: obj._make_cell_bounds(),
47
+ }
48
+
49
+ _dynamic_attribute_constructors_phase_2: ClassVar = {
50
+ "cell_closest_point": lambda obj: obj._make_cell_closest_point(),
51
+ "side_closest_point": lambda obj: obj._make_side_closest_point(),
52
+ "cell_coordinates": lambda obj: obj._make_cell_coordinates(),
53
+ "side_coordinates": lambda obj: obj._make_side_coordinates(),
54
+ }
55
+
56
+ def __init__(self, field: "wp.fem.field.GeometryField", relative: bool = True, build_bvh: bool = False):
57
+ """Constructs a Deformed Geometry from a displacement or absolute position field defined over a base geometry.
58
+ The deformation field does not need to be isoparameteric.
59
+
60
+ See also: :meth:`warp.fem.GeometryField.make_deformed_geometry`
61
+ """
62
+
63
+ from warp._src.fem.field import GeometryField
64
+
65
+ if field.dtype is not None and (
66
+ not type_is_vector(field.dtype) or type_size(field.dtype) != field.geometry.dimension
67
+ ):
68
+ raise ValueError(
69
+ "Invalid value type for position field, must be vector-valued with same dimension as underlying geometry"
70
+ )
71
+ if field.eval_grad_inner is None:
72
+ raise ValueError("Gradient evaluation is not supported on the passed field")
73
+
74
+ self._relative = relative
75
+
76
+ self.field: GeometryField = field
77
+ self.field_trace = field.trace()
78
+ self.dimension = self.base.dimension
79
+
80
+ self.SideIndexArg = self.base.SideIndexArg
81
+ self.cell_count = self.base.cell_count
82
+ self.vertex_count = self.base.vertex_count
83
+ self.side_count = self.base.side_count
84
+ self.boundary_side_count = self.base.boundary_side_count
85
+ self.reference_cell = self.base.reference_cell
86
+ self.reference_side = self.base.reference_side
87
+
88
+ self.side_index_arg_value = self.base.side_index_arg_value
89
+ self.fill_side_index_arg = self.base.fill_side_index_arg
90
+ self.boundary_side_index = self.base.boundary_side_index
91
+
92
+ cache.setup_dynamic_attributes(self, constructors=self._dynamic_attribute_constructors_phase_1)
93
+
94
+ self._make_default_dependent_implementations()
95
+
96
+ cache.setup_dynamic_attributes(self, constructors=self._dynamic_attribute_constructors_phase_2)
97
+
98
+ if build_bvh:
99
+ self.build_bvh(self.field.dof_values.device)
100
+
101
+ @property
102
+ def name(self) -> str:
103
+ return f"DefGeo_{self.field.name}_{'rel' if self._relative else 'abs'}"
104
+
105
+ @property
106
+ def base(self) -> Geometry:
107
+ return self.field.geometry.base
108
+
109
+ # Geometry device interface
110
+
111
+ def _make_cell_arg(self):
112
+ @cache.dynamic_struct(suffix=self.name)
113
+ class CellArg:
114
+ base_arg: self.base.CellArg
115
+ field_arg: self.field.EvalArg
116
+ cell_bvh: wp.uint64
117
+
118
+ return CellArg
119
+
120
+ def fill_cell_arg(self, args: "DeformedGeometry.CellArg", device):
121
+ self.base.fill_cell_arg(args.base_arg, device)
122
+ self.field.fill_eval_arg(args.field_arg, device)
123
+ args.cell_bvh = self.bvh_id(device)
124
+
125
+ def _make_cell_position(self):
126
+ @cache.dynamic_func(suffix=self.name)
127
+ def cell_position_absolute(cell_arg: self.CellArg, s: Sample):
128
+ field_arg = self.field.ElementEvalArg(cell_arg.base_arg, cell_arg.field_arg)
129
+ return self.field.eval_inner(field_arg, s)
130
+
131
+ @cache.dynamic_func(suffix=self.name)
132
+ def cell_position(cell_arg: self.CellArg, s: Sample):
133
+ field_arg = self.field.ElementEvalArg(cell_arg.base_arg, cell_arg.field_arg)
134
+ return self.field.eval_inner(field_arg, s) + self.base.cell_position(cell_arg.base_arg, s)
135
+
136
+ return cell_position if self._relative else cell_position_absolute
137
+
138
+ def _make_cell_deformation_gradient(self):
139
+ @cache.dynamic_func(suffix=self.name)
140
+ def cell_deformation_gradient_absolute(cell_arg: self.CellArg, s: Sample):
141
+ field_arg = self.field.ElementEvalArg(cell_arg.base_arg, cell_arg.field_arg)
142
+ return self.field.eval_reference_grad_inner(field_arg, s)
143
+
144
+ @cache.dynamic_func(suffix=self.name)
145
+ def cell_deformation_gradient(cell_arg: self.CellArg, s: Sample):
146
+ field_arg = self.field.ElementEvalArg(cell_arg.base_arg, cell_arg.field_arg)
147
+ return self.field.eval_reference_grad_inner(field_arg, s) + self.base.cell_deformation_gradient(
148
+ cell_arg.base_arg, s
149
+ )
150
+
151
+ return cell_deformation_gradient if self._relative else cell_deformation_gradient_absolute
152
+
153
+ def _make_side_arg(self):
154
+ @cache.dynamic_struct(suffix=self.name)
155
+ class SideArg:
156
+ base_arg: self.base.SideArg
157
+ trace_arg: self.field_trace.EvalArg
158
+ field_arg: self.field.EvalArg
159
+ cell_bvh: wp.uint64
160
+
161
+ return SideArg
162
+
163
+ def fill_side_arg(self, args: "DeformedGeometry.SideArg", device):
164
+ self.base.fill_side_arg(args.base_arg, device)
165
+ self.field.fill_eval_arg(args.field_arg, device)
166
+ self.field_trace.fill_eval_arg(args.trace_arg, device)
167
+ args.cell_bvh = self.bvh_id(device)
168
+
169
+ def _make_side_position(self):
170
+ @cache.dynamic_func(suffix=self.name)
171
+ def side_position_absolute(args: self.SideArg, s: Sample):
172
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
173
+ return self.field_trace.eval_inner(trace_arg, s)
174
+
175
+ @cache.dynamic_func(suffix=self.name)
176
+ def side_position(args: self.SideArg, s: Sample):
177
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
178
+ return self.field_trace.eval_inner(trace_arg, s) + self.base.side_position(args.base_arg, s)
179
+
180
+ return side_position if self._relative else side_position_absolute
181
+
182
+ def _make_side_deformation_gradient(self):
183
+ @cache.dynamic_func(suffix=self.name)
184
+ def side_deformation_gradient_absolute(args: self.SideArg, s: Sample):
185
+ base_def_grad = self.base.side_deformation_gradient(args.base_arg, s)
186
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
187
+
188
+ Du = self.field_trace.eval_grad_inner(trace_arg, s)
189
+ return Du * base_def_grad
190
+
191
+ @cache.dynamic_func(suffix=self.name)
192
+ def side_deformation_gradient(args: self.SideArg, s: Sample):
193
+ base_def_grad = self.base.side_deformation_gradient(args.base_arg, s)
194
+ trace_arg = self.field_trace.ElementEvalArg(args.base_arg, args.trace_arg)
195
+
196
+ Du = self.field_trace.eval_grad_inner(trace_arg, s)
197
+ return base_def_grad + Du * base_def_grad
198
+
199
+ return side_deformation_gradient if self._relative else side_deformation_gradient_absolute
200
+
201
+ def _make_side_inner_cell_index(self):
202
+ @cache.dynamic_func(suffix=self.name)
203
+ def side_inner_cell_index(args: self.SideArg, side_index: ElementIndex):
204
+ return self.base.side_inner_cell_index(args.base_arg, side_index)
205
+
206
+ return side_inner_cell_index
207
+
208
+ def _make_side_outer_cell_index(self):
209
+ @cache.dynamic_func(suffix=self.name)
210
+ def side_outer_cell_index(args: self.SideArg, side_index: ElementIndex):
211
+ return self.base.side_outer_cell_index(args.base_arg, side_index)
212
+
213
+ return side_outer_cell_index
214
+
215
+ def _make_side_inner_cell_coords(self):
216
+ @cache.dynamic_func(suffix=self.name)
217
+ def side_inner_cell_coords(args: self.SideArg, side_index: ElementIndex, side_coords: Coords):
218
+ return self.base.side_inner_cell_coords(args.base_arg, side_index, side_coords)
219
+
220
+ return side_inner_cell_coords
221
+
222
+ def _make_side_outer_cell_coords(self):
223
+ @cache.dynamic_func(suffix=self.name)
224
+ def side_outer_cell_coords(args: self.SideArg, side_index: ElementIndex, side_coords: Coords):
225
+ return self.base.side_outer_cell_coords(args.base_arg, side_index, side_coords)
226
+
227
+ return side_outer_cell_coords
228
+
229
+ def _make_side_from_cell_coords(self):
230
+ @cache.dynamic_func(suffix=self.name)
231
+ def side_from_cell_coords(
232
+ args: self.SideArg,
233
+ side_index: ElementIndex,
234
+ cell_index: ElementIndex,
235
+ cell_coords: Coords,
236
+ ):
237
+ return self.base.side_from_cell_coords(args.base_arg, side_index, cell_index, cell_coords)
238
+
239
+ return side_from_cell_coords
240
+
241
+ def _make_side_to_cell_arg(self):
242
+ @cache.dynamic_func(suffix=self.name)
243
+ def side_to_cell_arg(side_arg: self.SideArg):
244
+ return self.CellArg(self.base.side_to_cell_arg(side_arg.base_arg), side_arg.field_arg, side_arg.cell_bvh)
245
+
246
+ return side_to_cell_arg
247
+
248
+ def _make_cell_bvh_id(self):
249
+ @cache.dynamic_func(suffix=self.name)
250
+ def cell_bvh_id(cell_arg: self.CellArg):
251
+ return cell_arg.cell_bvh
252
+
253
+ return cell_bvh_id
254
+
255
+ def _make_cell_bounds(self):
256
+ points, _weights = self.reference_cell().prototype.instantiate_quadrature(
257
+ order=self.field.degree, family=Polynomial.LOBATTO_GAUSS_LEGENDRE
258
+ )
259
+
260
+ points = wp.matrix_from_rows(*points)
261
+ point_count = len(points)
262
+
263
+ @cache.dynamic_func(suffix=self.name)
264
+ def cell_bounds(cell_arg: self.CellArg, cell_index: ElementIndex):
265
+ lower = wp.vec3(1.0e8)
266
+ upper = wp.vec3(-1.0e8)
267
+ for k in range(point_count):
268
+ pos = self.cell_position(cell_arg, make_free_sample(cell_index, points[k]))
269
+ lower = wp.min(lower, pos)
270
+ upper = wp.max(upper, pos)
271
+
272
+ # pad the BBox to account for potential overflows
273
+ pad = 0.25 * (upper - lower)
274
+
275
+ return lower - pad, upper + pad
276
+
277
+ return cell_bounds