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,403 @@
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, ClassVar
17
+
18
+ import warp as wp
19
+ from warp._src.fem import cache
20
+ from warp._src.fem.space import FunctionSpace, SpacePartition
21
+ from warp._src.fem.types import NULL_NODE_INDEX, ElementIndex, Sample
22
+ from warp._src.fem.utils import type_zero_element
23
+
24
+ from .field import DiscreteField
25
+
26
+ _wp_module_name_ = "warp.fem.field.nodal_field"
27
+
28
+
29
+ class NodalFieldBase(DiscreteField):
30
+ """Base class for nodal field and nodal field traces. Does not hold values"""
31
+
32
+ _dynamic_attribute_constructors: ClassVar = {
33
+ "EvalArg": lambda obj: obj._make_eval_arg(),
34
+ "ElementEvalArg": lambda obj: obj._make_element_eval_arg(),
35
+ "eval_degree": lambda obj: DiscreteField._make_eval_degree(obj),
36
+ "_read_node_value": lambda obj: obj._make_read_node_value(),
37
+ "eval_inner": lambda obj: obj._make_eval_inner(),
38
+ "eval_outer": lambda obj: obj._make_eval_outer(),
39
+ "eval_grad_inner": lambda obj: obj._make_eval_grad_inner(world_space=True),
40
+ "eval_grad_outer": lambda obj: obj._make_eval_grad_outer(world_space=True),
41
+ "eval_reference_grad_inner": lambda obj: obj._make_eval_grad_inner(world_space=False),
42
+ "eval_reference_grad_outer": lambda obj: obj._make_eval_grad_outer(world_space=False),
43
+ "eval_div_inner": lambda obj: obj._make_eval_div_inner(),
44
+ "eval_div_outer": lambda obj: obj._make_eval_div_outer(),
45
+ "set_node_value": lambda obj: obj._make_set_node_value(),
46
+ "node_partition_index": lambda obj: obj._make_node_partition_index(),
47
+ "node_count": lambda obj: obj._make_node_count(),
48
+ "node_index": lambda obj: obj._make_node_index(),
49
+ "at_node": lambda obj: obj._make_at_node(),
50
+ }
51
+
52
+ def __init__(self, space: FunctionSpace, space_partition: SpacePartition):
53
+ super().__init__(space, space_partition)
54
+ cache.setup_dynamic_attributes(self)
55
+
56
+ def _make_eval_arg(self):
57
+ @cache.dynamic_struct(suffix=self.name)
58
+ class EvalArg:
59
+ dof_values: wp.array(dtype=self.space.dof_dtype)
60
+ space_arg: self.space.SpaceArg
61
+ topology_arg: self.space.topology.TopologyArg
62
+ partition_arg: self.space_partition.PartitionArg
63
+
64
+ return EvalArg
65
+
66
+ def _make_element_eval_arg(self):
67
+ @cache.dynamic_struct(suffix=self.name)
68
+ class ElementEvalArg:
69
+ elt_arg: self.space.topology.ElementArg
70
+ eval_arg: self.EvalArg
71
+
72
+ return ElementEvalArg
73
+
74
+ def _make_read_node_value(self):
75
+ zero_element = type_zero_element(self.dof_dtype)
76
+
77
+ @cache.dynamic_func(suffix=self.name)
78
+ def read_node_value(args: self.ElementEvalArg, geo_element_index: ElementIndex, node_index_in_elt: int):
79
+ nidx = self.space.topology.element_node_index(
80
+ args.elt_arg, args.eval_arg.topology_arg, geo_element_index, node_index_in_elt
81
+ )
82
+ pidx = self.space_partition.partition_node_index(args.eval_arg.partition_arg, nidx)
83
+ if pidx == NULL_NODE_INDEX:
84
+ return zero_element()
85
+
86
+ return args.eval_arg.dof_values[pidx]
87
+
88
+ return read_node_value
89
+
90
+ def _make_eval_inner(self):
91
+ zero_element = type_zero_element(self.dtype)
92
+
93
+ @cache.dynamic_func(suffix=self.name)
94
+ def eval_inner(args: self.ElementEvalArg, s: Sample):
95
+ local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
96
+ node_count = self.space.topology.element_node_count(
97
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index
98
+ )
99
+ res = zero_element()
100
+ for k in range(node_count):
101
+ w = self.space.element_inner_weight(
102
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
103
+ )
104
+ res += self.space.space_value(
105
+ self._read_node_value(args, s.element_index, k),
106
+ w,
107
+ local_value_map,
108
+ )
109
+ return res
110
+
111
+ return eval_inner
112
+
113
+ def _make_eval_grad_inner(self, world_space: bool):
114
+ if not self.space.gradient_valid():
115
+ return None
116
+
117
+ gradient_dtype = self.gradient_dtype if world_space else self.reference_gradient_dtype
118
+ zero_element = type_zero_element(gradient_dtype)
119
+
120
+ @cache.dynamic_func(suffix=f"{self.name}{world_space}")
121
+ def eval_grad_inner(args: self.ElementEvalArg, s: Sample, grad_transform: Any):
122
+ local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
123
+ node_count = self.space.topology.element_node_count(
124
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index
125
+ )
126
+
127
+ res = zero_element()
128
+ for k in range(node_count):
129
+ res += self.space.space_gradient(
130
+ self._read_node_value(args, s.element_index, k),
131
+ self.space.element_inner_weight_gradient(
132
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
133
+ ),
134
+ local_value_map,
135
+ grad_transform,
136
+ )
137
+ return res
138
+
139
+ if world_space:
140
+
141
+ @cache.dynamic_func(suffix=self.name)
142
+ def eval_grad_inner_world_space(args: self.ElementEvalArg, s: Sample):
143
+ grad_transform = self.space.element_inner_reference_gradient_transform(args.elt_arg, s)
144
+ return eval_grad_inner(args, s, grad_transform)
145
+
146
+ return eval_grad_inner_world_space
147
+ else:
148
+
149
+ @cache.dynamic_func(suffix=self.name)
150
+ def eval_grad_inner_ref_space(args: self.ElementEvalArg, s: Sample):
151
+ grad_transform = 1.0
152
+ return eval_grad_inner(args, s, grad_transform)
153
+
154
+ return eval_grad_inner_ref_space
155
+
156
+ def _make_eval_div_inner(self):
157
+ if not self.divergence_valid():
158
+ return None
159
+ zero_element = type_zero_element(self.divergence_dtype)
160
+
161
+ @cache.dynamic_func(suffix=self.name)
162
+ def eval_div_inner(args: self.ElementEvalArg, s: Sample):
163
+ grad_transform = self.space.element_inner_reference_gradient_transform(args.elt_arg, s)
164
+ local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
165
+ node_count = self.space.topology.element_node_count(
166
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index
167
+ )
168
+
169
+ res = zero_element()
170
+ for k in range(node_count):
171
+ res += self.space.space_divergence(
172
+ self._read_node_value(args, s.element_index, k),
173
+ self.space.element_inner_weight_gradient(
174
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
175
+ ),
176
+ local_value_map,
177
+ grad_transform,
178
+ )
179
+ return res
180
+
181
+ return eval_div_inner
182
+
183
+ def _make_eval_outer(self):
184
+ zero_element = type_zero_element(self.dtype)
185
+
186
+ @cache.dynamic_func(suffix=self.name)
187
+ def eval_outer(args: self.ElementEvalArg, s: Sample):
188
+ local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
189
+ node_count = self.space.topology.element_node_count(
190
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index
191
+ )
192
+
193
+ res = zero_element()
194
+ for k in range(node_count):
195
+ res += self.space.space_value(
196
+ self._read_node_value(args, s.element_index, k),
197
+ self.space.element_outer_weight(
198
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
199
+ ),
200
+ local_value_map,
201
+ )
202
+ return res
203
+
204
+ return eval_outer
205
+
206
+ def _make_eval_grad_outer(self, world_space: bool):
207
+ if not self.space.gradient_valid():
208
+ return None
209
+
210
+ gradient_dtype = self.gradient_dtype if world_space else self.reference_gradient_dtype
211
+ zero_element = type_zero_element(gradient_dtype)
212
+
213
+ @cache.dynamic_func(suffix=f"{self.name}{world_space}")
214
+ def eval_grad_outer(args: self.ElementEvalArg, s: Sample, grad_transform: Any):
215
+ local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
216
+ node_count = self.space.topology.element_node_count(
217
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index
218
+ )
219
+
220
+ res = zero_element()
221
+ for k in range(node_count):
222
+ res += self.space.space_gradient(
223
+ self._read_node_value(args, s.element_index, k),
224
+ self.space.element_outer_weight_gradient(
225
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
226
+ ),
227
+ local_value_map,
228
+ grad_transform,
229
+ )
230
+ return res
231
+
232
+ if world_space:
233
+
234
+ @cache.dynamic_func(suffix=self.name)
235
+ def eval_grad_outer_world_space(args: self.ElementEvalArg, s: Sample):
236
+ grad_transform = self.space.element_outer_reference_gradient_transform(args.elt_arg, s)
237
+ return eval_grad_outer(args, s, grad_transform)
238
+
239
+ return eval_grad_outer_world_space
240
+ else:
241
+
242
+ @cache.dynamic_func(suffix=self.name)
243
+ def eval_grad_outer_ref_space(args: self.ElementEvalArg, s: Sample):
244
+ grad_transform = 1.0
245
+ return eval_grad_outer(args, s, grad_transform)
246
+
247
+ return eval_grad_outer_ref_space
248
+
249
+ def _make_eval_div_outer(self):
250
+ if not self.divergence_valid():
251
+ return None
252
+
253
+ zero_element = type_zero_element(self.divergence_dtype)
254
+
255
+ @cache.dynamic_func(suffix=self.name)
256
+ def eval_div_outer(args: self.ElementEvalArg, s: Sample):
257
+ grad_transform = self.space.element_outer_reference_gradient_transform(args.elt_arg, s)
258
+ local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
259
+ node_count = self.space.topology.element_node_count(
260
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index
261
+ )
262
+
263
+ res = zero_element()
264
+ for k in range(node_count):
265
+ res += self.space.space_divergence(
266
+ self._read_node_value(args, s.element_index, k),
267
+ self.space.element_outer_weight_gradient(
268
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
269
+ ),
270
+ local_value_map,
271
+ grad_transform,
272
+ )
273
+ return res
274
+
275
+ return eval_div_outer
276
+
277
+ def _make_set_node_value(self):
278
+ @cache.dynamic_func(suffix=self.name)
279
+ def set_node_value(
280
+ elt_arg: self.space.ElementArg,
281
+ eval_arg: self.EvalArg,
282
+ element_index: ElementIndex,
283
+ node_index_in_element: int,
284
+ partition_node_index: int,
285
+ value: self.space.dtype,
286
+ ):
287
+ eval_arg.dof_values[partition_node_index] = self.space.node_dof_value(
288
+ elt_arg, eval_arg.space_arg, element_index, node_index_in_element, value
289
+ )
290
+
291
+ return set_node_value
292
+
293
+ def _make_node_partition_index(self):
294
+ @cache.dynamic_func(suffix=self.name)
295
+ def node_partition_index(args: self.ElementEvalArg, node_index: int):
296
+ return self.space_partition.partition_node_index(args.eval_arg.partition_arg, node_index)
297
+
298
+ return node_partition_index
299
+
300
+ def _make_node_count(self):
301
+ @cache.dynamic_func(suffix=self.name)
302
+ def node_count(args: self.ElementEvalArg, s: Sample):
303
+ return self.space.topology.element_node_count(args.elt_arg, args.eval_arg.topology_arg, s.element_index)
304
+
305
+ return node_count
306
+
307
+ def _make_at_node(self):
308
+ @cache.dynamic_func(suffix=self.name)
309
+ def at_node(args: self.ElementEvalArg, s: Sample, node_index_in_elt: int):
310
+ node_coords = self.space.node_coords_in_element(
311
+ args.elt_arg, args.eval_arg.space_arg, s.element_index, node_index_in_elt
312
+ )
313
+ return Sample(s.element_index, node_coords, s.qp_index, s.qp_weight, s.test_dof, s.trial_dof)
314
+
315
+ return at_node
316
+
317
+ def _make_node_index(self):
318
+ @cache.dynamic_func(suffix=self.name)
319
+ def node_index(args: self.ElementEvalArg, s: Sample, node_index_in_elt: int):
320
+ return self.space.topology.element_node_index(
321
+ args.elt_arg, args.eval_arg.topology_arg, s.element_index, node_index_in_elt
322
+ )
323
+
324
+ return node_index
325
+
326
+
327
+ class NodalField(NodalFieldBase):
328
+ """A field holding values for all degrees of freedom at each node of the underlying function space partition
329
+
330
+ See also: warp.fem.space.FunctionSpace.make_field
331
+ """
332
+
333
+ def __init__(self, space: FunctionSpace, space_partition: SpacePartition):
334
+ if space.topology != space_partition.space_topology:
335
+ raise ValueError("Incompatible space and space partition topologies")
336
+
337
+ super().__init__(space, space_partition)
338
+
339
+ self._dof_values = wp.zeros(n=self.space_partition.node_count(), dtype=self.dof_dtype)
340
+
341
+ @cache.cached_arg_value
342
+ def eval_arg_value(self, device):
343
+ return super().eval_arg_value(device)
344
+
345
+ def fill_eval_arg(self, arg, device):
346
+ arg.dof_values = self._dof_values.to(device)
347
+ self.space.fill_space_arg(arg.space_arg, device)
348
+ self.space_partition.fill_partition_arg(arg.partition_arg, device)
349
+ self.space.topology.fill_topo_arg(arg.topology_arg, device)
350
+
351
+ def rebind(self, space: FunctionSpace, space_partition: SpacePartition):
352
+ """Rebind the field to a new space partition and space.
353
+ The new space partition and space must be of similar types as the current ones
354
+ """
355
+
356
+ if space_partition.name != self.space_partition.name or space.name != self.space.name:
357
+ raise ValueError("Incompatible space and/or space partition")
358
+
359
+ self._space = space
360
+ self._space_partition = space_partition
361
+
362
+ node_count = space_partition.node_count()
363
+ if node_count < self._dof_values.shape[0]:
364
+ self._dof_values = self._dof_values[:node_count]
365
+ elif node_count > self._dof_values.shape[0]:
366
+ self._dof_values = wp.empty(n=node_count, dtype=self.dof_dtype)
367
+
368
+ self.eval_arg_value.invalidate(self)
369
+
370
+ @property
371
+ def dof_values(self) -> wp.array:
372
+ """Returns a warp array containing the values at all degrees of freedom of the underlying space partition"""
373
+ return self._dof_values
374
+
375
+ @dof_values.setter
376
+ def dof_values(self, values):
377
+ """Sets the degrees-of-freedom values
378
+
379
+ Args:
380
+ values: Array that is convertible to a warp array of length ``self.space_partition.node_count()`` and data type ``self.space.dof_dtype``
381
+ """
382
+
383
+ if isinstance(values, wp.array):
384
+ self._dof_values = values
385
+ else:
386
+ self._dof_values = wp.array(values, dtype=self.dof_dtype)
387
+
388
+ self.eval_arg_value.invalidate(self)
389
+
390
+ class Trace(NodalFieldBase):
391
+ def __init__(self, field):
392
+ self._field = field
393
+ super().__init__(field.space.trace(), field.space_partition)
394
+
395
+ def fill_eval_arg(self, arg, device):
396
+ arg.dof_values = self._field.dof_values.to(device)
397
+ self.space.fill_space_arg(arg.space_arg, device)
398
+ self.space_partition.fill_partition_arg(arg.partition_arg, device)
399
+ self.space.topology.fill_topo_arg(arg.topology_arg, device)
400
+
401
+ def trace(self) -> Trace:
402
+ trace_field = NodalField.Trace(self)
403
+ return trace_field
@@ -0,0 +1,39 @@
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 warp._src.fem.space import SpaceRestriction
17
+
18
+ from .field import DiscreteField
19
+
20
+ _wp_module_name_ = "warp.fem.field.restriction"
21
+
22
+
23
+ class FieldRestriction:
24
+ """Restriction of a discrete field to a given GeometryDomain"""
25
+
26
+ def __init__(self, space_restriction: SpaceRestriction, field: DiscreteField):
27
+ if field.space.dimension - 1 == space_restriction.space_topology.dimension:
28
+ field = field.trace()
29
+
30
+ if field.space.dimension != space_restriction.space_topology.dimension:
31
+ raise ValueError("Incompatible space and field dimensions")
32
+
33
+ if field.space.topology != space_restriction.space_topology:
34
+ raise ValueError("Incompatible field and space restriction topologies")
35
+
36
+ self.space_restriction = space_restriction
37
+ self.domain = self.space_restriction.domain
38
+ self.field = field
39
+ self.space = self.field.space