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,469 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ ###########################################################################
17
+ # Example APIC Fluid Simulation
18
+ #
19
+ # Shows how to implement a minimalist APIC fluid simulation using a NanoVDB
20
+ # grid and the PicQuadrature class.
21
+ ###########################################################################
22
+
23
+ from dataclasses import dataclass
24
+ from typing import Any
25
+
26
+ import numpy as np
27
+
28
+ import warp as wp
29
+ import warp.examples.fem.utils as fem_example_utils
30
+ import warp.fem as fem
31
+ import warp.render
32
+ from warp.fem import Domain, Field, Sample, at_node, div, grad, integrand
33
+ from warp.sparse import BsrMatrix, bsr_mm, bsr_mv, bsr_transposed
34
+
35
+
36
+ @wp.func
37
+ def collision_sdf(x: wp.vec3):
38
+ # Arbitrary sdf representing collision geometry
39
+ # Here an inverted half-ball of radius 10
40
+ x[1] = wp.min(x[1], 0.0)
41
+ return 10.0 - wp.length(x), -wp.normalize(x)
42
+
43
+
44
+ @integrand
45
+ def integrate_fraction(s: Sample, phi: Field):
46
+ return phi(s)
47
+
48
+
49
+ @integrand
50
+ def integrate_velocity(
51
+ s: Sample,
52
+ domain: Domain,
53
+ u: Field,
54
+ velocities: wp.array(dtype=wp.vec3),
55
+ velocity_gradients: wp.array(dtype=wp.mat33),
56
+ dt: float,
57
+ gravity: wp.vec3,
58
+ ):
59
+ """Transfer particle velocities to grid"""
60
+ node_offset = domain(at_node(u, s)) - domain(s)
61
+ vel_apic = velocities[s.qp_index] + velocity_gradients[s.qp_index] * node_offset
62
+
63
+ vel_adv = vel_apic + dt * gravity
64
+
65
+ # if inside collider, remove normal velocity
66
+ sdf, sdf_gradient = collision_sdf(domain(s))
67
+ if sdf <= 0:
68
+ v_n = wp.dot(vel_adv, sdf_gradient)
69
+ vel_adv -= wp.max(v_n, 0.0) * sdf_gradient
70
+
71
+ return wp.dot(u(s), vel_adv)
72
+
73
+
74
+ @integrand
75
+ def update_particles(
76
+ s: Sample,
77
+ domain: Domain,
78
+ grid_vel: Field,
79
+ dt: float,
80
+ pos: wp.array(dtype=wp.vec3),
81
+ pos_prev: wp.array(dtype=wp.vec3),
82
+ vel: wp.array(dtype=wp.vec3),
83
+ vel_grad: wp.array(dtype=wp.mat33),
84
+ ):
85
+ """Read particle velocity from grid and advect positions"""
86
+ p_vel = grid_vel(s)
87
+ vel_grad[s.qp_index] = grad(grid_vel, s)
88
+
89
+ pos_adv = pos_prev[s.qp_index] + dt * p_vel
90
+
91
+ pos[s.qp_index] = pos_adv
92
+ vel[s.qp_index] = p_vel
93
+
94
+
95
+ @integrand
96
+ def velocity_boundary_projector_form(s: Sample, domain: Domain, u: Field, v: Field):
97
+ """Projector for velocity-Dirichlet boundary conditions"""
98
+
99
+ x = domain(s)
100
+ sdf, sdf_normal = collision_sdf(x)
101
+
102
+ if sdf > 0.0:
103
+ # Neuman
104
+ return 0.0
105
+
106
+ # Free-slip on boundary
107
+ return wp.dot(u(s), sdf_normal) * wp.dot(v(s), sdf_normal)
108
+
109
+
110
+ @integrand
111
+ def divergence_form(s: Sample, domain: Domain, u: Field, psi: Field):
112
+ # Divergence bilinear form
113
+ return div(u, s) * psi(s)
114
+
115
+
116
+ @wp.kernel
117
+ def invert_volume_kernel(values: wp.array(dtype=float)):
118
+ i = wp.tid()
119
+ m = values[i]
120
+ values[i] = wp.where(m == 0.0, 0.0, 1.0 / m)
121
+
122
+
123
+ @wp.kernel
124
+ def scalar_vector_multiply(
125
+ alpha: wp.array(dtype=float),
126
+ x: wp.array(dtype=wp.vec3),
127
+ y: wp.array(dtype=wp.vec3),
128
+ ):
129
+ i = wp.tid()
130
+ y[i] = alpha[i] * x[i]
131
+
132
+
133
+ @wp.kernel
134
+ def scale_transposed_divergence_mat(
135
+ tr_divergence_mat_offsets: wp.array(dtype=int),
136
+ tr_divergence_mat_values: wp.array(dtype=Any),
137
+ inv_fraction_int: wp.array(dtype=float),
138
+ ):
139
+ # In-place scaling of gradient operator rows with inverse mass
140
+
141
+ u_i = wp.tid()
142
+ block_beg = tr_divergence_mat_offsets[u_i]
143
+ block_end = tr_divergence_mat_offsets[u_i + 1]
144
+
145
+ for b in range(block_beg, block_end):
146
+ tr_divergence_mat_values[b] = tr_divergence_mat_values[b] * inv_fraction_int[u_i]
147
+
148
+
149
+ def solve_incompressibility(
150
+ divergence_mat: BsrMatrix, dirichlet_projector: BsrMatrix, inv_volume, pressure, velocity, quiet: bool = False
151
+ ):
152
+ """Solve for divergence-free velocity delta:
153
+
154
+ delta_velocity = inv_volume * transpose(divergence_mat) * pressure
155
+ divergence_mat * (velocity + delta_velocity) = 0
156
+ dirichlet_projector * delta_velocity = 0
157
+ """
158
+
159
+ # Constraint-free divergence -- computed *before* projection of divergence_mat
160
+ rhs = wp.empty_like(pressure)
161
+ bsr_mv(A=divergence_mat, x=velocity, y=rhs, alpha=-1.0)
162
+
163
+ # Project matrix to enforce boundary conditions
164
+ # divergence_matrix -= divergence_matrix * vel_projector
165
+ bsr_mm(alpha=-1.0, x=divergence_mat, y=dirichlet_projector, z=divergence_mat, beta=1.0)
166
+
167
+ # Build transposed gradient matrix, scale with inverse fraction
168
+ transposed_divergence_mat = bsr_transposed(divergence_mat)
169
+ wp.launch(
170
+ kernel=scale_transposed_divergence_mat,
171
+ dim=inv_volume.shape[0],
172
+ inputs=[
173
+ transposed_divergence_mat.offsets,
174
+ transposed_divergence_mat.values,
175
+ inv_volume,
176
+ ],
177
+ )
178
+
179
+ # For simplicity, assemble Schur complement and solve with CG
180
+ schur = bsr_mm(divergence_mat, transposed_divergence_mat)
181
+
182
+ fem_example_utils.bsr_cg(schur, b=rhs, x=pressure, quiet=quiet, tol=1.0e-6, method="cr", max_iters=1000)
183
+
184
+ # Apply pressure to velocity
185
+ bsr_mv(A=transposed_divergence_mat, x=pressure, y=velocity, alpha=1.0, beta=1.0)
186
+
187
+
188
+ class Example:
189
+ @dataclass
190
+ class State:
191
+ particle_q: wp.array(dtype=wp.vec3)
192
+ particle_qd: wp.array(dtype=wp.vec3)
193
+ particle_qd_grad: wp.array(dtype=wp.mat33)
194
+
195
+ def __init__(self, quiet=False, stage_path="example_apic_fluid.usd", voxel_size=1.0, opengl=False):
196
+ self.gravity = wp.vec3(0.0, -10.0, 0.0)
197
+
198
+ fps = 60
199
+ self.sim_substeps = 1
200
+ self.frame_dt = 1.0 / fps
201
+ self.current_frame = 0
202
+ self.sim_dt = self.frame_dt / self.sim_substeps
203
+ self.voxel_size = voxel_size
204
+
205
+ self._quiet = quiet
206
+
207
+ # particle emission
208
+ PARTICLES_PER_CELL_DIM = 2
209
+ self.radius = float(np.max(voxel_size) / (2 * PARTICLES_PER_CELL_DIM))
210
+
211
+ particle_grid_lo = np.full(3, -5)
212
+ particle_grid_hi = np.full(3, 5)
213
+ particle_grid_res = (
214
+ np.array((particle_grid_hi - particle_grid_lo) / voxel_size, dtype=int) * PARTICLES_PER_CELL_DIM
215
+ )
216
+
217
+ self.particle_volumes, particle_q = self._spawn_particles(
218
+ particle_grid_res, particle_grid_lo, particle_grid_hi, packing_fraction=1.0
219
+ )
220
+ particle_qd = wp.zeros_like(particle_q)
221
+
222
+ particle_count = particle_q.shape[0]
223
+ if not self._quiet:
224
+ print("Particle count:", particle_count)
225
+
226
+ # Allocate states
227
+ self.state_0 = self.State(
228
+ wp.clone(particle_q),
229
+ wp.clone(particle_qd),
230
+ particle_qd_grad=wp.zeros(shape=(particle_count), dtype=wp.mat33),
231
+ )
232
+ self.state_1 = self.State(
233
+ wp.clone(particle_q),
234
+ wp.clone(particle_qd),
235
+ particle_qd_grad=wp.zeros(shape=(particle_count), dtype=wp.mat33),
236
+ )
237
+
238
+ # Storage for temporary variables
239
+ self.temporary_store = fem.TemporaryStore()
240
+
241
+ # initialize renderers
242
+ self.opengl_renderer = None
243
+ self.usd_renderer = None
244
+
245
+ try:
246
+ if opengl:
247
+ self.opengl_renderer = warp.render.OpenGLRenderer(
248
+ screen_width=1024,
249
+ screen_height=1024,
250
+ )
251
+ except Exception as err:
252
+ wp.utils.warn(f"Could not initialize OpenGL renderer: {err}.")
253
+
254
+ try:
255
+ if stage_path:
256
+ self.usd_renderer = warp.render.UsdRenderer(stage_path)
257
+ except Exception as err:
258
+ print(f"Could not initialize Usd renderer '{stage_path}': {err}.")
259
+
260
+ def step(self):
261
+ fem.set_default_temporary_store(self.temporary_store)
262
+
263
+ self.current_frame = self.current_frame + 1
264
+
265
+ with wp.ScopedTimer(f"simulate frame {self.current_frame}", synchronize=True):
266
+ for _s in range(self.sim_substeps):
267
+ # Allocate the voxels and create the warp.fem geometry
268
+ volume = wp.Volume.allocate_by_voxels(
269
+ voxel_points=self.state_0.particle_q,
270
+ voxel_size=self.voxel_size,
271
+ )
272
+ grid = fem.Nanogrid(volume)
273
+
274
+ # Define function spaces: linear (Q1) for velocity and volume fraction,
275
+ # piecewise-constant for pressure
276
+ linear_basis_space = fem.make_polynomial_basis_space(grid, degree=1)
277
+ velocity_space = fem.make_collocated_function_space(linear_basis_space, dtype=wp.vec3)
278
+ fraction_space = fem.make_collocated_function_space(linear_basis_space, dtype=float)
279
+ strain_space = fem.make_polynomial_space(
280
+ grid,
281
+ dtype=float,
282
+ degree=0,
283
+ discontinuous=True,
284
+ )
285
+
286
+ pressure_field = strain_space.make_field()
287
+ velocity_field = velocity_space.make_field()
288
+
289
+ # Define test and trial functions and integrating linear and bilinear forms
290
+ domain = fem.Cells(grid)
291
+ velocity_test = fem.make_test(velocity_space, domain=domain)
292
+ velocity_trial = fem.make_trial(velocity_space, domain=domain)
293
+ fraction_test = fem.make_test(fraction_space, domain=domain)
294
+ strain_test = fem.make_test(strain_space, domain=domain)
295
+
296
+ # Build projector for Dirichlet boundary conditions
297
+ vel_projector = fem.integrate(
298
+ velocity_boundary_projector_form,
299
+ fields={"u": velocity_trial, "v": velocity_test},
300
+ assembly="nodal",
301
+ output_dtype=float,
302
+ )
303
+ fem.normalize_dirichlet_projector(vel_projector)
304
+
305
+ # Bin particles to grid cells
306
+ pic = fem.PicQuadrature(
307
+ domain=domain, positions=self.state_0.particle_q, measures=self.particle_volumes
308
+ )
309
+
310
+ # Compute inverse particle volume for each grid node
311
+ inv_volume = fem.integrate(
312
+ integrate_fraction,
313
+ quadrature=pic,
314
+ fields={"phi": fraction_test},
315
+ output_dtype=float,
316
+ )
317
+ wp.launch(kernel=invert_volume_kernel, dim=inv_volume.shape, inputs=[inv_volume])
318
+
319
+ # Velocity right-hand side
320
+ velocity_int = fem.integrate(
321
+ integrate_velocity,
322
+ quadrature=pic,
323
+ fields={"u": velocity_test},
324
+ values={
325
+ "velocities": self.state_0.particle_qd,
326
+ "velocity_gradients": self.state_0.particle_qd_grad,
327
+ "dt": self.sim_dt,
328
+ "gravity": self.gravity,
329
+ },
330
+ output_dtype=wp.vec3,
331
+ )
332
+
333
+ # Compute constraint-free velocity
334
+ wp.launch(
335
+ kernel=scalar_vector_multiply,
336
+ dim=inv_volume.shape[0],
337
+ inputs=[inv_volume, velocity_int, velocity_field.dof_values],
338
+ )
339
+
340
+ # Apply velocity boundary conditions:
341
+ # velocity -= vel_projector * velocity
342
+ bsr_mv(
343
+ A=vel_projector,
344
+ x=velocity_field.dof_values,
345
+ y=velocity_field.dof_values,
346
+ alpha=-1.0,
347
+ beta=1.0,
348
+ )
349
+
350
+ # Assemble divergence operator matrix
351
+ divergence_matrix = fem.integrate(
352
+ divergence_form,
353
+ quadrature=pic,
354
+ fields={"u": velocity_trial, "psi": strain_test},
355
+ output_dtype=float,
356
+ )
357
+
358
+ # Solve unilateral incompressibility
359
+ solve_incompressibility(
360
+ divergence_matrix,
361
+ vel_projector,
362
+ inv_volume,
363
+ pressure_field.dof_values,
364
+ velocity_field.dof_values,
365
+ quiet=self._quiet,
366
+ )
367
+
368
+ # (A)PIC advection
369
+ fem.interpolate(
370
+ update_particles,
371
+ quadrature=pic,
372
+ values={
373
+ "pos": self.state_1.particle_q,
374
+ "pos_prev": self.state_0.particle_q,
375
+ "vel": self.state_1.particle_qd,
376
+ "vel_grad": self.state_1.particle_qd_grad,
377
+ "dt": self.sim_dt,
378
+ },
379
+ fields={"grid_vel": velocity_field},
380
+ )
381
+
382
+ # swap states
383
+ (self.state_0, self.state_1) = (self.state_1, self.state_0)
384
+
385
+ fem.set_default_temporary_store(None)
386
+
387
+ @staticmethod
388
+ def _spawn_particles(res, bounds_lo, bounds_hi, packing_fraction):
389
+ Nx = res[0]
390
+ Ny = res[1]
391
+ Nz = res[2]
392
+
393
+ px = np.linspace(bounds_lo[0], bounds_hi[0], Nx + 1)
394
+ py = np.linspace(bounds_lo[1], bounds_hi[1], Ny + 1)
395
+ pz = np.linspace(bounds_lo[2], bounds_hi[2], Nz + 1)
396
+
397
+ points = np.stack(np.meshgrid(px, py, pz)).reshape(3, -1).T
398
+
399
+ cell_size = (bounds_hi - bounds_lo) / res
400
+ cell_volume = np.prod(cell_size)
401
+
402
+ radius = np.max(cell_size) * 0.5
403
+ volume = cell_volume * packing_fraction
404
+
405
+ rng = np.random.default_rng(42)
406
+ points += 2.0 * radius * (rng.random(points.shape) - 0.5)
407
+
408
+ volumes = wp.full(points.shape[0], volume, dtype=float)
409
+ points = wp.array(np.ascontiguousarray(points), dtype=wp.vec3)
410
+ return volumes, points
411
+
412
+ def render(self, is_live=False):
413
+ if self.usd_renderer is None and self.opengl_renderer is None:
414
+ return
415
+
416
+ with wp.ScopedTimer("render", synchronize=True):
417
+ time = self.current_frame * self.frame_dt
418
+
419
+ if self.usd_renderer is not None:
420
+ self.usd_renderer.begin_frame(time)
421
+ self.usd_renderer.render_points(
422
+ "particles",
423
+ self.state_0.particle_q.numpy(),
424
+ radius=self.radius,
425
+ )
426
+ self.usd_renderer.end_frame()
427
+ if self.opengl_renderer is not None:
428
+ self.opengl_renderer.begin_frame(time)
429
+ self.opengl_renderer.render_points(
430
+ "particles",
431
+ self.state_0.particle_q,
432
+ radius=self.radius,
433
+ )
434
+ self.opengl_renderer.end_frame()
435
+
436
+
437
+ if __name__ == "__main__":
438
+ import argparse
439
+
440
+ wp.set_module_options({"enable_backward": False})
441
+
442
+ parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
443
+ parser.add_argument("--device", type=str, default=None, help="Override the default Warp device.")
444
+ parser.add_argument(
445
+ "--stage_path",
446
+ type=lambda x: None if x == "None" else str(x),
447
+ default="example_apic_fluid.usd",
448
+ help="Path to the output USD file.",
449
+ )
450
+ parser.add_argument("--num_frames", type=int, default=250, help="Total number of frames.")
451
+ parser.add_argument("--quiet", action="store_true")
452
+ parser.add_argument("--opengl", action="store_true")
453
+ parser.add_argument(
454
+ "--voxel_size",
455
+ type=float,
456
+ default=0.25,
457
+ )
458
+
459
+ args = parser.parse_known_args()[0]
460
+
461
+ with wp.ScopedDevice(args.device):
462
+ example = Example(quiet=args.quiet, stage_path=args.stage_path, voxel_size=args.voxel_size, opengl=args.opengl)
463
+
464
+ for _ in range(args.num_frames):
465
+ example.step()
466
+ example.render()
467
+
468
+ if example.usd_renderer is not None:
469
+ example.usd_renderer.save()