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,213 @@
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 Stokes
18
+ #
19
+ # This example solves a 2D Stokes flow problem
20
+ #
21
+ # -nu D(u) + grad p = 0
22
+ # Div u = 0
23
+ #
24
+ # with (soft) velocity-Dirichlet boundary conditions
25
+ ###########################################################################
26
+
27
+ import warp as wp
28
+ import warp.examples.fem.utils as fem_example_utils
29
+ import warp.fem as fem
30
+ from warp.fem.linalg import array_axpy
31
+
32
+
33
+ @fem.integrand
34
+ def viscosity_form(s: fem.Sample, u: fem.Field, v: fem.Field, nu: float):
35
+ return nu * wp.ddot(fem.D(u, s), fem.D(v, s))
36
+
37
+
38
+ @fem.integrand
39
+ def top_mass_form(
40
+ s: fem.Sample,
41
+ domain: fem.Domain,
42
+ u: fem.Field,
43
+ v: fem.Field,
44
+ ):
45
+ # non zero on top boundary of domain only
46
+ nor = fem.normal(domain, s)
47
+ return wp.dot(u(s), v(s)) * wp.max(0.0, nor[1])
48
+
49
+
50
+ @fem.integrand
51
+ def mass_form(
52
+ s: fem.Sample,
53
+ u: fem.Field,
54
+ v: fem.Field,
55
+ ):
56
+ return wp.dot(u(s), v(s))
57
+
58
+
59
+ @fem.integrand
60
+ def div_form(
61
+ s: fem.Sample,
62
+ u: fem.Field,
63
+ q: fem.Field,
64
+ ):
65
+ return q(s) * fem.div(u, s)
66
+
67
+
68
+ class Example:
69
+ def __init__(
70
+ self,
71
+ quiet=False,
72
+ mesh="grid",
73
+ degree=2,
74
+ resolution=50,
75
+ viscosity=1.0,
76
+ top_velocity=1.0,
77
+ boundary_strength=100.0,
78
+ nonconforming_pressures=False,
79
+ ):
80
+ self._quiet = quiet
81
+
82
+ self.viscosity = viscosity
83
+ self.boundary_strength = boundary_strength
84
+
85
+ # Grid or triangle mesh geometry
86
+ if mesh == "tri":
87
+ positions, tri_vidx = fem_example_utils.gen_trimesh(res=wp.vec2i(resolution))
88
+ geo = fem.Trimesh2D(tri_vertex_indices=tri_vidx, positions=positions)
89
+ elif mesh == "quad":
90
+ positions, quad_vidx = fem_example_utils.gen_quadmesh(res=wp.vec2i(resolution))
91
+ geo = fem.Quadmesh2D(quad_vertex_indices=quad_vidx, positions=positions)
92
+ else:
93
+ geo = fem.Grid2D(res=wp.vec2i(resolution))
94
+
95
+ # Function spaces -- Q_d for vel, P_{d-1} for pressure
96
+ u_space = fem.make_polynomial_space(geo, degree=degree, dtype=wp.vec2)
97
+ if mesh != "tri" and nonconforming_pressures:
98
+ p_space = fem.make_polynomial_space(
99
+ geo, degree=degree - 1, element_basis=fem.ElementBasis.NONCONFORMING_POLYNOMIAL
100
+ )
101
+ else:
102
+ p_space = fem.make_polynomial_space(geo, degree=degree - 1)
103
+
104
+ # Vector and scalar fields
105
+ self._u_field = u_space.make_field()
106
+ self._p_field = p_space.make_field()
107
+
108
+ self._bd_field = fem.UniformField(domain=fem.BoundarySides(geo), value=wp.vec2(top_velocity, 0.0))
109
+
110
+ self.renderer = fem_example_utils.Plot()
111
+
112
+ def step(self):
113
+ u_space = self._u_field.space
114
+ p_space = self._p_field.space
115
+ geo = u_space.geometry
116
+
117
+ domain = fem.Cells(geometry=geo)
118
+ boundary = fem.BoundarySides(geo)
119
+
120
+ # Viscosity
121
+ u_test = fem.make_test(space=u_space, domain=domain)
122
+ u_trial = fem.make_trial(space=u_space, domain=domain)
123
+
124
+ u_visc_matrix = fem.integrate(
125
+ viscosity_form,
126
+ fields={"u": u_trial, "v": u_test},
127
+ values={"nu": self.viscosity},
128
+ )
129
+
130
+ # Weak velocity boundary conditions
131
+ u_bd_test = fem.make_test(space=u_space, domain=boundary)
132
+ u_bd_trial = fem.make_trial(space=u_space, domain=boundary)
133
+ u_rhs = fem.integrate(top_mass_form, fields={"u": self._bd_field, "v": u_bd_test}, output_dtype=wp.vec2d)
134
+ u_bd_matrix = fem.integrate(mass_form, fields={"u": u_bd_trial, "v": u_bd_test})
135
+
136
+ # Pressure-velocity coupling
137
+ p_test = fem.make_test(space=p_space, domain=domain)
138
+ div_matrix = fem.integrate(div_form, fields={"u": u_trial, "q": p_test})
139
+
140
+ # Define and solve the saddle-point system
141
+ u_matrix = u_visc_matrix
142
+ u_matrix += self.boundary_strength * u_bd_matrix
143
+ array_axpy(x=u_rhs, y=u_rhs, alpha=0.0, beta=self.boundary_strength)
144
+
145
+ p_rhs = wp.zeros(p_space.node_count(), dtype=wp.float64)
146
+ x_u = wp.zeros_like(u_rhs)
147
+ x_p = wp.zeros_like(p_rhs)
148
+
149
+ fem_example_utils.bsr_solve_saddle(
150
+ fem_example_utils.SaddleSystem(A=u_matrix, B=div_matrix),
151
+ x_u=x_u,
152
+ x_p=x_p,
153
+ b_u=u_rhs,
154
+ b_p=p_rhs,
155
+ quiet=self._quiet,
156
+ )
157
+
158
+ wp.utils.array_cast(in_array=x_u, out_array=self._u_field.dof_values)
159
+ wp.utils.array_cast(in_array=x_p, out_array=self._p_field.dof_values)
160
+
161
+ def render(self):
162
+ self.renderer.add_field("pressure", self._p_field)
163
+ self.renderer.add_field("velocity", self._u_field)
164
+
165
+
166
+ if __name__ == "__main__":
167
+ import argparse
168
+
169
+ wp.set_module_options({"enable_backward": False})
170
+
171
+ parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
172
+ parser.add_argument("--device", type=str, default=None, help="Override the default Warp device.")
173
+ parser.add_argument("--resolution", type=int, default=50, help="Grid resolution.")
174
+ parser.add_argument("--degree", type=int, default=2, help="Polynomial degree of shape functions.")
175
+ parser.add_argument(
176
+ "--top_velocity",
177
+ type=float,
178
+ default=1.0,
179
+ help="Horizontal velocity initial condition at the top of the domain.",
180
+ )
181
+ parser.add_argument("--viscosity", type=float, default=1.0, help="Fluid viscosity parameter.")
182
+ parser.add_argument("--boundary_strength", type=float, default=100.0, help="Soft boundary condition strength.")
183
+ parser.add_argument("--mesh", choices=("grid", "tri", "quad"), default="grid", help="Mesh type.")
184
+ parser.add_argument(
185
+ "--nonconforming_pressures", action="store_true", help="For grid, use non-conforming pressure (Q_d/P_{d-1})."
186
+ )
187
+ parser.add_argument(
188
+ "--headless",
189
+ action="store_true",
190
+ help="Run in headless mode, suppressing the opening of any graphical windows.",
191
+ )
192
+ parser.add_argument("--quiet", action="store_true", help="Suppresses the printing out of iteration residuals.")
193
+
194
+ args = parser.parse_known_args()[0]
195
+
196
+ with wp.ScopedDevice(args.device):
197
+ example = Example(
198
+ quiet=args.quiet,
199
+ mesh=args.mesh,
200
+ degree=args.degree,
201
+ resolution=args.resolution,
202
+ viscosity=args.viscosity,
203
+ top_velocity=args.top_velocity,
204
+ boundary_strength=args.boundary_strength,
205
+ nonconforming_pressures=args.nonconforming_pressures,
206
+ )
207
+ example.step()
208
+ example.render()
209
+
210
+ if not args.headless:
211
+ example.renderer.plot(
212
+ options={"velocity": {"streamlines": {}}, "pressure": {"contours": {}}}, backend="matplotlib"
213
+ )
@@ -0,0 +1,262 @@
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 Stokes Transfer
18
+ #
19
+ # This example computes a 2D weakly-compressible Stokes flow around
20
+ # a moving object, including:
21
+ # - defining active cells from a mask, and restricting the computation domain to those
22
+ # - utilizing the PicQuadrature to integrate over unstructured particles
23
+ ###########################################################################
24
+
25
+ import math
26
+
27
+ import numpy as np
28
+
29
+ import warp as wp
30
+ import warp.examples.fem.utils as fem_example_utils
31
+ import warp.fem as fem
32
+ from warp.fem.linalg import array_axpy
33
+ from warp.utils import array_cast
34
+
35
+
36
+ @fem.integrand
37
+ def vel_from_particles_form(s: fem.Sample, particle_vel: wp.array(dtype=wp.vec2), v: fem.Field):
38
+ vel = particle_vel[s.qp_index]
39
+ return wp.dot(vel, v(s))
40
+
41
+
42
+ @fem.integrand
43
+ def viscosity_form(s: fem.Sample, u: fem.Field, v: fem.Field, nu: float):
44
+ return nu * wp.ddot(fem.D(u, s), fem.D(v, s))
45
+
46
+
47
+ @fem.integrand
48
+ def mass_form(
49
+ s: fem.Sample,
50
+ u: fem.Field,
51
+ v: fem.Field,
52
+ ):
53
+ return wp.dot(u(s), v(s))
54
+
55
+
56
+ @fem.integrand
57
+ def scalar_mass_form(
58
+ s: fem.Sample,
59
+ p: fem.Field,
60
+ q: fem.Field,
61
+ ):
62
+ return p(s) * q(s)
63
+
64
+
65
+ @fem.integrand
66
+ def div_form(
67
+ s: fem.Sample,
68
+ u: fem.Field,
69
+ q: fem.Field,
70
+ ):
71
+ return q(s) * fem.div(u, s)
72
+
73
+
74
+ @fem.integrand
75
+ def cell_activity(s: fem.Sample, domain: fem.Domain, c1: wp.vec2, c2: wp.vec2, radius: float):
76
+ pos = domain(s)
77
+ if wp.length(pos - c1) < radius:
78
+ return 0.0
79
+ if wp.length(pos - c2) < radius:
80
+ return 0.0
81
+ return 1.0
82
+
83
+
84
+ @wp.kernel
85
+ def inverse_array_kernel(m: wp.array(dtype=wp.float64)):
86
+ m[wp.tid()] = wp.float64(1.0) / m[wp.tid()]
87
+
88
+
89
+ class Example:
90
+ def __init__(self, quiet=False, resolution=50):
91
+ self._quiet = quiet
92
+
93
+ self.res = resolution
94
+ self.cell_size = 1.0 / self.res
95
+
96
+ self.vel = 1.0
97
+ self.viscosity = 100.0
98
+ self.compliance = 0.01
99
+ self.bd_strength = 100000.0
100
+
101
+ geo = fem.Grid2D(res=wp.vec2i(self.res))
102
+
103
+ # Displacement boundary conditions are defined by two circles going in opposite directions
104
+ # Sample particles along those
105
+ circle_radius = 0.15
106
+ c1_center = wp.vec2(0.25, 0.5)
107
+ c2_center = wp.vec2(0.75, 0.5)
108
+ particles, particle_areas, particle_velocities = self._gen_particles(circle_radius, c1_center, c2_center)
109
+
110
+ # Disable cells that are interior to the circles
111
+ cell_space = fem.make_polynomial_space(geo, degree=0)
112
+ activity = cell_space.make_field()
113
+ fem.interpolate(
114
+ cell_activity,
115
+ dest=activity,
116
+ values={"c1": c1_center, "c2": c2_center, "radius": circle_radius - self.cell_size},
117
+ )
118
+
119
+ # Explicitly define the active geometry partition from those cells
120
+ self._active_partition = fem.ExplicitGeometryPartition(geo, wp.array(activity.dof_values.numpy(), dtype=int))
121
+ if not self._quiet:
122
+ print("Active cells:", self._active_partition.cell_count())
123
+
124
+ # Function spaces -- Q1 for vel, Q0 for pressure
125
+ u_space = fem.make_polynomial_space(geo, degree=1, dtype=wp.vec2)
126
+ p_space = fem.make_polynomial_space(geo, degree=0)
127
+
128
+ self._active_space_partition = fem.make_space_partition(
129
+ space=u_space, geometry_partition=self._active_partition
130
+ )
131
+ self._active_p_space_partition = fem.make_space_partition(
132
+ space=p_space, geometry_partition=self._active_partition
133
+ )
134
+
135
+ self._u_field = u_space.make_field()
136
+ self._p_field = p_space.make_field()
137
+
138
+ # Particle-based quadrature rule over active cells
139
+ domain = fem.Cells(geometry=self._active_partition)
140
+ self._pic_quadrature = fem.PicQuadrature(domain, particles, particle_areas)
141
+ self._particle_velocities = particle_velocities
142
+
143
+ self.renderer = fem_example_utils.Plot()
144
+
145
+ def step(self):
146
+ u_space = self._u_field.space
147
+ p_space = self._p_field.space
148
+
149
+ # Weakly-enforced boundary condition on particles
150
+ u_test = fem.make_test(space=u_space, space_partition=self._active_space_partition)
151
+ u_trial = fem.make_trial(space=u_space, space_partition=self._active_space_partition)
152
+
153
+ u_rhs = fem.integrate(
154
+ vel_from_particles_form,
155
+ quadrature=self._pic_quadrature,
156
+ fields={"v": u_test},
157
+ values={"particle_vel": self._particle_velocities},
158
+ output_dtype=wp.vec2d,
159
+ )
160
+ u_bd_matrix = fem.integrate(mass_form, quadrature=self._pic_quadrature, fields={"u": u_trial, "v": u_test})
161
+
162
+ # Viscosity
163
+ u_visc_matrix = fem.integrate(
164
+ viscosity_form,
165
+ fields={"u": u_trial, "v": u_test},
166
+ values={"nu": self.viscosity},
167
+ )
168
+
169
+ # Pressure-velocity coupling
170
+ p_test = fem.make_test(space=p_space, space_partition=self._active_p_space_partition)
171
+ p_trial = fem.make_trial(space=p_space, space_partition=self._active_p_space_partition)
172
+
173
+ div_matrix = fem.integrate(div_form, fields={"u": u_trial, "q": p_test})
174
+ inv_p_mass_matrix = fem.integrate(scalar_mass_form, fields={"p": p_trial, "q": p_test})
175
+ wp.launch(
176
+ kernel=inverse_array_kernel,
177
+ dim=inv_p_mass_matrix.values.shape,
178
+ device=inv_p_mass_matrix.values.device,
179
+ inputs=[inv_p_mass_matrix.values],
180
+ )
181
+
182
+ # Assemble linear system
183
+ u_matrix = u_visc_matrix
184
+ u_matrix += u_bd_matrix * self.bd_strength
185
+
186
+ gradient_matrix = div_matrix.transpose() @ inv_p_mass_matrix
187
+ u_matrix += gradient_matrix @ div_matrix / self.compliance
188
+
189
+ # scale u_rhs
190
+ array_axpy(u_rhs, u_rhs, alpha=0.0, beta=self.bd_strength)
191
+
192
+ # Solve for displacement
193
+ u_res = wp.zeros_like(u_rhs)
194
+ fem_example_utils.bsr_cg(u_matrix, x=u_res, b=u_rhs, quiet=self._quiet)
195
+
196
+ # Compute pressure from displacement
197
+ div_u = div_matrix @ u_res
198
+ p_res = -inv_p_mass_matrix @ div_u
199
+
200
+ # Copy to fields
201
+ u_nodes = wp.indexedarray(self._u_field.dof_values, indices=self._active_space_partition.space_node_indices())
202
+ p_nodes = wp.indexedarray(self._p_field.dof_values, indices=self._active_p_space_partition.space_node_indices())
203
+
204
+ array_cast(in_array=u_res, out_array=u_nodes)
205
+ array_cast(in_array=p_res, out_array=p_nodes)
206
+
207
+ def render(self):
208
+ self.renderer.add_field("pressure", self._p_field)
209
+ self.renderer.add_field("velocity", self._u_field)
210
+
211
+ def _gen_particles(self, circle_radius, c1_center, c2_center):
212
+ """Generate some particles along two circles defining velocity boundary conditions"""
213
+
214
+ # Generate particles defining the transfer displacement
215
+ particles_per_circle = int(2.0 * math.pi * circle_radius * self.res)
216
+
217
+ angles = np.linspace(0, 2.0 * math.pi, particles_per_circle, endpoint=False)
218
+
219
+ n_particles = 2 * particles_per_circle
220
+ particles = np.empty((n_particles, 2), dtype=float)
221
+
222
+ particles[:particles_per_circle, 0] = c1_center[0] + circle_radius * np.cos(angles)
223
+ particles[:particles_per_circle, 1] = c1_center[1] + circle_radius * np.sin(angles)
224
+ particles[particles_per_circle:, 0] = c2_center[0] + circle_radius * np.cos(angles)
225
+ particles[particles_per_circle:, 1] = c2_center[1] + circle_radius * np.sin(angles)
226
+
227
+ particle_areas = np.ones(n_particles) * self.cell_size**2
228
+ particle_velocities = np.zeros_like(particles)
229
+ particle_velocities[:particles_per_circle, 0] = self.vel
230
+ particle_velocities[particles_per_circle:, 0] = -self.vel
231
+
232
+ particles = wp.array(particles, dtype=wp.vec2)
233
+ particle_areas = wp.array(particle_areas, dtype=float)
234
+ particle_velocities = wp.array(particle_velocities, dtype=wp.vec2)
235
+
236
+ return particles, particle_areas, particle_velocities
237
+
238
+
239
+ if __name__ == "__main__":
240
+ import argparse
241
+
242
+ wp.set_module_options({"enable_backward": False})
243
+
244
+ parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
245
+ parser.add_argument("--device", type=str, default=None, help="Override the default Warp device.")
246
+ parser.add_argument("--resolution", type=int, default=50, help="Grid resolution.")
247
+ parser.add_argument(
248
+ "--headless",
249
+ action="store_true",
250
+ help="Run in headless mode, suppressing the opening of any graphical windows.",
251
+ )
252
+ parser.add_argument("--quiet", action="store_true", help="Suppresses the printing out of iteration residuals.")
253
+
254
+ args = parser.parse_known_args()[0]
255
+
256
+ with wp.ScopedDevice(args.device):
257
+ example = Example(quiet=args.quiet, resolution=args.resolution)
258
+ example.step()
259
+ example.render()
260
+
261
+ if not args.headless:
262
+ example.renderer.plot(options={"velocity": {"streamlines": {}}})