warp-lang 1.9.0__py3-none-win_amd64.whl → 1.10.0rc2__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of warp-lang might be problematic. Click here for more details.

Files changed (350) hide show
  1. warp/__init__.py +301 -287
  2. warp/__init__.pyi +2220 -313
  3. warp/_src/__init__.py +14 -0
  4. warp/_src/autograd.py +1075 -0
  5. warp/_src/build.py +618 -0
  6. warp/_src/build_dll.py +640 -0
  7. warp/{builtins.py → _src/builtins.py} +1497 -226
  8. warp/_src/codegen.py +4359 -0
  9. warp/{config.py → _src/config.py} +178 -169
  10. warp/_src/constants.py +57 -0
  11. warp/_src/context.py +8294 -0
  12. warp/_src/dlpack.py +462 -0
  13. warp/_src/fabric.py +355 -0
  14. warp/_src/fem/__init__.py +14 -0
  15. warp/_src/fem/adaptivity.py +508 -0
  16. warp/_src/fem/cache.py +687 -0
  17. warp/_src/fem/dirichlet.py +188 -0
  18. warp/{fem → _src/fem}/domain.py +40 -30
  19. warp/_src/fem/field/__init__.py +131 -0
  20. warp/_src/fem/field/field.py +701 -0
  21. warp/{fem → _src/fem}/field/nodal_field.py +30 -15
  22. warp/{fem → _src/fem}/field/restriction.py +1 -1
  23. warp/{fem → _src/fem}/field/virtual.py +53 -27
  24. warp/_src/fem/geometry/__init__.py +32 -0
  25. warp/{fem → _src/fem}/geometry/adaptive_nanogrid.py +77 -163
  26. warp/_src/fem/geometry/closest_point.py +97 -0
  27. warp/{fem → _src/fem}/geometry/deformed_geometry.py +14 -22
  28. warp/{fem → _src/fem}/geometry/element.py +32 -10
  29. warp/{fem → _src/fem}/geometry/geometry.py +48 -20
  30. warp/{fem → _src/fem}/geometry/grid_2d.py +12 -23
  31. warp/{fem → _src/fem}/geometry/grid_3d.py +12 -23
  32. warp/{fem → _src/fem}/geometry/hexmesh.py +40 -63
  33. warp/{fem → _src/fem}/geometry/nanogrid.py +255 -248
  34. warp/{fem → _src/fem}/geometry/partition.py +121 -63
  35. warp/{fem → _src/fem}/geometry/quadmesh.py +26 -45
  36. warp/{fem → _src/fem}/geometry/tetmesh.py +40 -63
  37. warp/{fem → _src/fem}/geometry/trimesh.py +26 -45
  38. warp/{fem → _src/fem}/integrate.py +164 -158
  39. warp/_src/fem/linalg.py +383 -0
  40. warp/_src/fem/operator.py +396 -0
  41. warp/_src/fem/polynomial.py +229 -0
  42. warp/{fem → _src/fem}/quadrature/pic_quadrature.py +15 -20
  43. warp/{fem → _src/fem}/quadrature/quadrature.py +95 -47
  44. warp/_src/fem/space/__init__.py +248 -0
  45. warp/{fem → _src/fem}/space/basis_function_space.py +20 -11
  46. warp/_src/fem/space/basis_space.py +679 -0
  47. warp/{fem → _src/fem}/space/dof_mapper.py +3 -3
  48. warp/{fem → _src/fem}/space/function_space.py +14 -13
  49. warp/{fem → _src/fem}/space/grid_2d_function_space.py +4 -7
  50. warp/{fem → _src/fem}/space/grid_3d_function_space.py +4 -4
  51. warp/{fem → _src/fem}/space/hexmesh_function_space.py +4 -10
  52. warp/{fem → _src/fem}/space/nanogrid_function_space.py +3 -9
  53. warp/{fem → _src/fem}/space/partition.py +117 -60
  54. warp/{fem → _src/fem}/space/quadmesh_function_space.py +4 -10
  55. warp/{fem → _src/fem}/space/restriction.py +66 -33
  56. warp/_src/fem/space/shape/__init__.py +152 -0
  57. warp/{fem → _src/fem}/space/shape/cube_shape_function.py +9 -9
  58. warp/{fem → _src/fem}/space/shape/shape_function.py +8 -9
  59. warp/{fem → _src/fem}/space/shape/square_shape_function.py +6 -6
  60. warp/{fem → _src/fem}/space/shape/tet_shape_function.py +3 -3
  61. warp/{fem → _src/fem}/space/shape/triangle_shape_function.py +3 -3
  62. warp/{fem → _src/fem}/space/tetmesh_function_space.py +3 -9
  63. warp/_src/fem/space/topology.py +459 -0
  64. warp/{fem → _src/fem}/space/trimesh_function_space.py +3 -9
  65. warp/_src/fem/types.py +112 -0
  66. warp/_src/fem/utils.py +486 -0
  67. warp/_src/jax.py +186 -0
  68. warp/_src/jax_experimental/__init__.py +14 -0
  69. warp/_src/jax_experimental/custom_call.py +387 -0
  70. warp/_src/jax_experimental/ffi.py +1284 -0
  71. warp/_src/jax_experimental/xla_ffi.py +656 -0
  72. warp/_src/marching_cubes.py +708 -0
  73. warp/_src/math.py +414 -0
  74. warp/_src/optim/__init__.py +14 -0
  75. warp/_src/optim/adam.py +163 -0
  76. warp/_src/optim/linear.py +1606 -0
  77. warp/_src/optim/sgd.py +112 -0
  78. warp/_src/paddle.py +406 -0
  79. warp/_src/render/__init__.py +14 -0
  80. warp/_src/render/imgui_manager.py +289 -0
  81. warp/_src/render/render_opengl.py +3636 -0
  82. warp/_src/render/render_usd.py +937 -0
  83. warp/_src/render/utils.py +160 -0
  84. warp/_src/sparse.py +2716 -0
  85. warp/_src/tape.py +1206 -0
  86. warp/{thirdparty → _src/thirdparty}/unittest_parallel.py +9 -2
  87. warp/_src/torch.py +391 -0
  88. warp/_src/types.py +5870 -0
  89. warp/_src/utils.py +1693 -0
  90. warp/autograd.py +12 -1054
  91. warp/bin/warp-clang.dll +0 -0
  92. warp/bin/warp.dll +0 -0
  93. warp/build.py +8 -588
  94. warp/build_dll.py +6 -471
  95. warp/codegen.py +6 -4246
  96. warp/constants.py +6 -39
  97. warp/context.py +12 -7851
  98. warp/dlpack.py +6 -444
  99. warp/examples/distributed/example_jacobi_mpi.py +4 -5
  100. warp/examples/fem/example_adaptive_grid.py +1 -1
  101. warp/examples/fem/example_apic_fluid.py +1 -1
  102. warp/examples/fem/example_burgers.py +8 -8
  103. warp/examples/fem/example_diffusion.py +1 -1
  104. warp/examples/fem/example_distortion_energy.py +1 -1
  105. warp/examples/fem/example_mixed_elasticity.py +2 -2
  106. warp/examples/fem/example_navier_stokes.py +1 -1
  107. warp/examples/fem/example_nonconforming_contact.py +7 -7
  108. warp/examples/fem/example_stokes.py +1 -1
  109. warp/examples/fem/example_stokes_transfer.py +1 -1
  110. warp/examples/fem/utils.py +2 -2
  111. warp/examples/interop/example_jax_callable.py +1 -1
  112. warp/examples/interop/example_jax_ffi_callback.py +1 -1
  113. warp/examples/interop/example_jax_kernel.py +3 -2
  114. warp/examples/tile/example_tile_mcgp.py +191 -0
  115. warp/fabric.py +6 -337
  116. warp/fem/__init__.py +159 -97
  117. warp/fem/adaptivity.py +7 -489
  118. warp/fem/cache.py +9 -648
  119. warp/fem/dirichlet.py +6 -184
  120. warp/fem/field/__init__.py +8 -109
  121. warp/fem/field/field.py +7 -652
  122. warp/fem/geometry/__init__.py +7 -18
  123. warp/fem/geometry/closest_point.py +11 -77
  124. warp/fem/linalg.py +18 -366
  125. warp/fem/operator.py +11 -369
  126. warp/fem/polynomial.py +9 -209
  127. warp/fem/space/__init__.py +5 -211
  128. warp/fem/space/basis_space.py +6 -662
  129. warp/fem/space/shape/__init__.py +41 -118
  130. warp/fem/space/topology.py +6 -437
  131. warp/fem/types.py +6 -81
  132. warp/fem/utils.py +11 -444
  133. warp/jax.py +8 -165
  134. warp/jax_experimental/__init__.py +14 -1
  135. warp/jax_experimental/custom_call.py +8 -342
  136. warp/jax_experimental/ffi.py +17 -853
  137. warp/jax_experimental/xla_ffi.py +5 -596
  138. warp/marching_cubes.py +5 -689
  139. warp/math.py +16 -393
  140. warp/native/array.h +385 -37
  141. warp/native/builtin.h +316 -39
  142. warp/native/bvh.cpp +43 -9
  143. warp/native/bvh.cu +62 -27
  144. warp/native/bvh.h +310 -309
  145. warp/native/clang/clang.cpp +102 -97
  146. warp/native/coloring.cpp +0 -1
  147. warp/native/crt.h +208 -0
  148. warp/native/exports.h +156 -0
  149. warp/native/hashgrid.cu +2 -0
  150. warp/native/intersect.h +24 -1
  151. warp/native/intersect_tri.h +44 -35
  152. warp/native/mat.h +1456 -276
  153. warp/native/mesh.cpp +4 -4
  154. warp/native/mesh.cu +4 -2
  155. warp/native/mesh.h +176 -61
  156. warp/native/quat.h +0 -52
  157. warp/native/scan.cu +2 -0
  158. warp/native/sort.cu +22 -13
  159. warp/native/sort.h +2 -0
  160. warp/native/sparse.cu +7 -3
  161. warp/native/spatial.h +12 -0
  162. warp/native/tile.h +837 -70
  163. warp/native/tile_radix_sort.h +1 -1
  164. warp/native/tile_reduce.h +394 -46
  165. warp/native/tile_scan.h +4 -4
  166. warp/native/vec.h +469 -53
  167. warp/native/version.h +23 -0
  168. warp/native/volume.cpp +1 -1
  169. warp/native/volume.cu +1 -0
  170. warp/native/volume.h +1 -1
  171. warp/native/volume_builder.cu +2 -0
  172. warp/native/warp.cpp +60 -32
  173. warp/native/warp.cu +313 -201
  174. warp/native/warp.h +14 -11
  175. warp/optim/__init__.py +6 -3
  176. warp/optim/adam.py +6 -145
  177. warp/optim/linear.py +14 -1585
  178. warp/optim/sgd.py +6 -94
  179. warp/paddle.py +6 -388
  180. warp/render/__init__.py +8 -4
  181. warp/render/imgui_manager.py +7 -267
  182. warp/render/render_opengl.py +6 -3616
  183. warp/render/render_usd.py +6 -918
  184. warp/render/utils.py +6 -142
  185. warp/sparse.py +37 -2563
  186. warp/tape.py +6 -1188
  187. warp/tests/__main__.py +1 -1
  188. warp/tests/cuda/test_async.py +4 -4
  189. warp/tests/cuda/test_conditional_captures.py +1 -1
  190. warp/tests/cuda/test_multigpu.py +1 -1
  191. warp/tests/cuda/test_streams.py +58 -1
  192. warp/tests/geometry/test_bvh.py +157 -22
  193. warp/tests/geometry/test_hash_grid.py +38 -0
  194. warp/tests/geometry/test_marching_cubes.py +0 -1
  195. warp/tests/geometry/test_mesh.py +5 -3
  196. warp/tests/geometry/test_mesh_query_aabb.py +5 -12
  197. warp/tests/geometry/test_mesh_query_point.py +5 -2
  198. warp/tests/geometry/test_mesh_query_ray.py +15 -3
  199. warp/tests/geometry/test_volume_write.py +5 -5
  200. warp/tests/interop/test_dlpack.py +14 -14
  201. warp/tests/interop/test_jax.py +1382 -79
  202. warp/tests/interop/test_paddle.py +1 -1
  203. warp/tests/test_adam.py +0 -1
  204. warp/tests/test_arithmetic.py +9 -9
  205. warp/tests/test_array.py +529 -100
  206. warp/tests/test_array_reduce.py +3 -3
  207. warp/tests/test_atomic.py +12 -8
  208. warp/tests/test_atomic_bitwise.py +209 -0
  209. warp/tests/test_atomic_cas.py +4 -4
  210. warp/tests/test_bool.py +2 -2
  211. warp/tests/test_builtins_resolution.py +5 -571
  212. warp/tests/test_codegen.py +34 -15
  213. warp/tests/test_conditional.py +1 -1
  214. warp/tests/test_context.py +6 -6
  215. warp/tests/test_copy.py +242 -161
  216. warp/tests/test_ctypes.py +3 -3
  217. warp/tests/test_devices.py +24 -2
  218. warp/tests/test_examples.py +16 -84
  219. warp/tests/test_fabricarray.py +35 -35
  220. warp/tests/test_fast_math.py +0 -2
  221. warp/tests/test_fem.py +60 -14
  222. warp/tests/test_fixedarray.py +3 -3
  223. warp/tests/test_func.py +8 -5
  224. warp/tests/test_generics.py +1 -1
  225. warp/tests/test_indexedarray.py +24 -24
  226. warp/tests/test_intersect.py +39 -9
  227. warp/tests/test_large.py +1 -1
  228. warp/tests/test_lerp.py +3 -1
  229. warp/tests/test_linear_solvers.py +1 -1
  230. warp/tests/test_map.py +49 -4
  231. warp/tests/test_mat.py +52 -62
  232. warp/tests/test_mat_constructors.py +4 -5
  233. warp/tests/test_mat_lite.py +1 -1
  234. warp/tests/test_mat_scalar_ops.py +121 -121
  235. warp/tests/test_math.py +34 -0
  236. warp/tests/test_module_aot.py +4 -4
  237. warp/tests/test_modules_lite.py +28 -2
  238. warp/tests/test_print.py +11 -11
  239. warp/tests/test_quat.py +93 -58
  240. warp/tests/test_runlength_encode.py +1 -1
  241. warp/tests/test_scalar_ops.py +38 -10
  242. warp/tests/test_smoothstep.py +1 -1
  243. warp/tests/test_sparse.py +126 -15
  244. warp/tests/test_spatial.py +105 -87
  245. warp/tests/test_special_values.py +6 -6
  246. warp/tests/test_static.py +7 -7
  247. warp/tests/test_struct.py +13 -2
  248. warp/tests/test_triangle_closest_point.py +48 -1
  249. warp/tests/test_tuple.py +96 -0
  250. warp/tests/test_types.py +82 -9
  251. warp/tests/test_utils.py +52 -52
  252. warp/tests/test_vec.py +29 -29
  253. warp/tests/test_vec_constructors.py +5 -5
  254. warp/tests/test_vec_scalar_ops.py +97 -97
  255. warp/tests/test_version.py +75 -0
  256. warp/tests/tile/test_tile.py +239 -0
  257. warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
  258. warp/tests/tile/test_tile_cholesky.py +7 -4
  259. warp/tests/tile/test_tile_load.py +26 -2
  260. warp/tests/tile/test_tile_mathdx.py +3 -3
  261. warp/tests/tile/test_tile_matmul.py +1 -1
  262. warp/tests/tile/test_tile_mlp.py +2 -4
  263. warp/tests/tile/test_tile_reduce.py +214 -13
  264. warp/tests/unittest_suites.py +6 -14
  265. warp/tests/unittest_utils.py +10 -9
  266. warp/tests/walkthrough_debug.py +3 -1
  267. warp/torch.py +6 -373
  268. warp/types.py +29 -5750
  269. warp/utils.py +10 -1659
  270. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0rc2.dist-info}/METADATA +47 -103
  271. warp_lang-1.10.0rc2.dist-info/RECORD +468 -0
  272. warp_lang-1.10.0rc2.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
  273. warp_lang-1.10.0rc2.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
  274. warp_lang-1.10.0rc2.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
  275. warp_lang-1.10.0rc2.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
  276. warp_lang-1.10.0rc2.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
  277. warp_lang-1.10.0rc2.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
  278. warp_lang-1.10.0rc2.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
  279. warp_lang-1.10.0rc2.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
  280. warp_lang-1.10.0rc2.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
  281. warp_lang-1.10.0rc2.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
  282. warp_lang-1.10.0rc2.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
  283. warp_lang-1.10.0rc2.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
  284. warp_lang-1.10.0rc2.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
  285. warp_lang-1.10.0rc2.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
  286. warp_lang-1.10.0rc2.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
  287. warp/examples/assets/cartpole.urdf +0 -110
  288. warp/examples/assets/crazyflie.usd +0 -0
  289. warp/examples/assets/nv_ant.xml +0 -92
  290. warp/examples/assets/nv_humanoid.xml +0 -183
  291. warp/examples/assets/quadruped.urdf +0 -268
  292. warp/examples/optim/example_bounce.py +0 -266
  293. warp/examples/optim/example_cloth_throw.py +0 -228
  294. warp/examples/optim/example_drone.py +0 -870
  295. warp/examples/optim/example_inverse_kinematics.py +0 -182
  296. warp/examples/optim/example_inverse_kinematics_torch.py +0 -191
  297. warp/examples/optim/example_softbody_properties.py +0 -400
  298. warp/examples/optim/example_spring_cage.py +0 -245
  299. warp/examples/optim/example_trajectory.py +0 -227
  300. warp/examples/sim/example_cartpole.py +0 -143
  301. warp/examples/sim/example_cloth.py +0 -225
  302. warp/examples/sim/example_cloth_self_contact.py +0 -316
  303. warp/examples/sim/example_granular.py +0 -130
  304. warp/examples/sim/example_granular_collision_sdf.py +0 -202
  305. warp/examples/sim/example_jacobian_ik.py +0 -244
  306. warp/examples/sim/example_particle_chain.py +0 -124
  307. warp/examples/sim/example_quadruped.py +0 -203
  308. warp/examples/sim/example_rigid_chain.py +0 -203
  309. warp/examples/sim/example_rigid_contact.py +0 -195
  310. warp/examples/sim/example_rigid_force.py +0 -133
  311. warp/examples/sim/example_rigid_gyroscopic.py +0 -115
  312. warp/examples/sim/example_rigid_soft_contact.py +0 -140
  313. warp/examples/sim/example_soft_body.py +0 -196
  314. warp/examples/tile/example_tile_walker.py +0 -327
  315. warp/sim/__init__.py +0 -74
  316. warp/sim/articulation.py +0 -793
  317. warp/sim/collide.py +0 -2570
  318. warp/sim/graph_coloring.py +0 -307
  319. warp/sim/import_mjcf.py +0 -791
  320. warp/sim/import_snu.py +0 -227
  321. warp/sim/import_urdf.py +0 -579
  322. warp/sim/import_usd.py +0 -898
  323. warp/sim/inertia.py +0 -357
  324. warp/sim/integrator.py +0 -245
  325. warp/sim/integrator_euler.py +0 -2000
  326. warp/sim/integrator_featherstone.py +0 -2101
  327. warp/sim/integrator_vbd.py +0 -2487
  328. warp/sim/integrator_xpbd.py +0 -3295
  329. warp/sim/model.py +0 -4821
  330. warp/sim/particles.py +0 -121
  331. warp/sim/render.py +0 -431
  332. warp/sim/utils.py +0 -431
  333. warp/tests/sim/disabled_kinematics.py +0 -244
  334. warp/tests/sim/test_cloth.py +0 -863
  335. warp/tests/sim/test_collision.py +0 -743
  336. warp/tests/sim/test_coloring.py +0 -347
  337. warp/tests/sim/test_inertia.py +0 -161
  338. warp/tests/sim/test_model.py +0 -226
  339. warp/tests/sim/test_sim_grad.py +0 -287
  340. warp/tests/sim/test_sim_grad_bounce_linear.py +0 -212
  341. warp/tests/sim/test_sim_kinematics.py +0 -98
  342. warp/thirdparty/__init__.py +0 -0
  343. warp_lang-1.9.0.dist-info/RECORD +0 -456
  344. /warp/{fem → _src/fem}/quadrature/__init__.py +0 -0
  345. /warp/{tests/sim → _src/thirdparty}/__init__.py +0 -0
  346. /warp/{thirdparty → _src/thirdparty}/appdirs.py +0 -0
  347. /warp/{thirdparty → _src/thirdparty}/dlpack.py +0 -0
  348. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0rc2.dist-info}/WHEEL +0 -0
  349. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0rc2.dist-info}/licenses/LICENSE.md +0 -0
  350. {warp_lang-1.9.0.dist-info → warp_lang-1.10.0rc2.dist-info}/top_level.txt +0 -0
@@ -55,9 +55,9 @@ def test_spatial_vector_constructors(test, device, dtype, register_kernels=False
55
55
  np.float64: 1.0e-8,
56
56
  }.get(dtype, 0)
57
57
 
58
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
59
- vec3 = wp.types.vector(length=3, dtype=wptype)
60
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
58
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
59
+ vec3 = wp._src.types.vector(length=3, dtype=wptype)
60
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
61
61
 
62
62
  def check_spatial_vector_component_constructor(
63
63
  input: wp.array(dtype=wptype),
@@ -140,19 +140,19 @@ def test_spatial_vector_indexing(test, device, dtype, register_kernels=False):
140
140
  np.float64: 1.0e-8,
141
141
  }.get(dtype, 0)
142
142
 
143
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
144
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
143
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
144
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
145
145
 
146
146
  def check_spatial_vector_indexing(
147
147
  input: wp.array(dtype=spatial_vector),
148
148
  out: wp.array(dtype=wptype),
149
149
  ):
150
- inpt = input[0]
150
+ elem = input[0]
151
151
 
152
152
  # multiply outputs by 2 so we've got something to backpropagate:
153
153
  idx = 0
154
154
  for i in range(6):
155
- out[idx] = wptype(2) * inpt[i]
155
+ out[idx] = wptype(2) * elem[i]
156
156
  idx = idx + 1
157
157
 
158
158
  kernel = getkernel(check_spatial_vector_indexing, suffix=dtype.__name__)
@@ -192,8 +192,8 @@ def test_spatial_vector_scalar_multiplication(test, device, dtype, register_kern
192
192
  np.float64: 1.0e-8,
193
193
  }.get(dtype, 0)
194
194
 
195
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
196
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
195
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
196
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
197
197
 
198
198
  def check_spatial_vector_scalar_mul(
199
199
  s: wp.array(dtype=wptype),
@@ -262,8 +262,8 @@ def test_spatial_vector_add_sub(test, device, dtype, register_kernels=False):
262
262
  np.float64: 1.0e-8,
263
263
  }.get(dtype, 0)
264
264
 
265
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
266
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
265
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
266
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
267
267
 
268
268
  def check_spatial_vector_add_sub(
269
269
  q: wp.array(dtype=spatial_vector),
@@ -338,8 +338,8 @@ def test_spatial_dot(test, device, dtype, register_kernels=False):
338
338
  np.float64: 1.0e-8,
339
339
  }.get(dtype, 0)
340
340
 
341
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
342
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
341
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
342
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
343
343
 
344
344
  def check_spatial_dot(
345
345
  s: wp.array(dtype=spatial_vector),
@@ -390,8 +390,8 @@ def test_spatial_cross(test, device, dtype, register_kernels=False):
390
390
  np.float64: 1.0e-8,
391
391
  }.get(dtype, 0)
392
392
 
393
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
394
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
393
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
394
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
395
395
 
396
396
  def check_spatial_cross(
397
397
  s: wp.array(dtype=spatial_vector),
@@ -544,8 +544,8 @@ def test_spatial_top_bottom(test, device, dtype, register_kernels=False):
544
544
  np.float64: 1.0e-8,
545
545
  }.get(dtype, 0)
546
546
 
547
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
548
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
547
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
548
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
549
549
 
550
550
  def check_spatial_top_bottom(
551
551
  s: wp.array(dtype=spatial_vector),
@@ -613,25 +613,25 @@ def test_transform_constructors(test, device, dtype, register_kernels=False):
613
613
  np.float64: 1.0e-8,
614
614
  }.get(dtype, 0)
615
615
 
616
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
617
- vec3 = wp.types.vector(length=3, dtype=wptype)
618
- transform = wp.types.transformation(dtype=wptype)
619
- quat = wp.types.quaternion(dtype=wptype)
616
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
617
+ vec3 = wp._src.types.vector(length=3, dtype=wptype)
618
+ transform = wp._src.types.transformation(dtype=wptype)
619
+ quat = wp._src.types.quaternion(dtype=wptype)
620
620
 
621
621
  def check_transform_constructor(
622
622
  input: wp.array(dtype=wptype),
623
623
  out: wp.array(dtype=wptype),
624
624
  ):
625
- result = transform(vec3(input[0], input[1], input[2]), quat(input[3], input[4], input[5], input[6]))
625
+ a = transform(vec3(input[0], input[1], input[2]), quat(input[3], input[4], input[5], input[6]))
626
+ b = transform(input[0], input[1], input[2], input[3], input[4], input[5], input[6])
626
627
 
627
- # multiply the output by 2 so we've got something to backpropagate:
628
- out[0] = wptype(2) * result[0]
629
- out[1] = wptype(2) * result[1]
630
- out[2] = wptype(2) * result[2]
631
- out[3] = wptype(2) * result[3]
632
- out[4] = wptype(2) * result[4]
633
- out[5] = wptype(2) * result[5]
634
- out[6] = wptype(2) * result[6]
628
+ out[0] = a[0] + b[0]
629
+ out[1] = a[1] + b[1]
630
+ out[2] = a[2] + b[2]
631
+ out[3] = a[3] + b[3]
632
+ out[4] = a[4] + b[4]
633
+ out[5] = a[5] + b[5]
634
+ out[6] = a[6] + b[6]
635
635
 
636
636
  kernel = getkernel(check_transform_constructor, suffix=dtype.__name__)
637
637
  output_select_kernel = get_select_kernel(wptype)
@@ -672,19 +672,19 @@ def test_transform_indexing(test, device, dtype, register_kernels=False):
672
672
  np.float64: 1.0e-8,
673
673
  }.get(dtype, 0)
674
674
 
675
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
676
- transform = wp.types.transformation(dtype=wptype)
675
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
676
+ transform = wp._src.types.transformation(dtype=wptype)
677
677
 
678
678
  def check_transform_indexing(
679
679
  input: wp.array(dtype=transform),
680
680
  out: wp.array(dtype=wptype),
681
681
  ):
682
- inpt = input[0]
682
+ elem = input[0]
683
683
 
684
684
  # multiply outputs by 2 so we've got something to backpropagate:
685
685
  idx = 0
686
686
  for i in range(7):
687
- out[idx] = wptype(2) * inpt[i]
687
+ out[idx] = wptype(2) * elem[i]
688
688
  idx = idx + 1
689
689
 
690
690
  kernel = getkernel(check_transform_indexing, suffix=dtype.__name__)
@@ -721,8 +721,8 @@ def test_transform_scalar_multiplication(test, device, dtype, register_kernels=F
721
721
  np.float64: 1.0e-8,
722
722
  }.get(dtype, 0)
723
723
 
724
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
725
- transform = wp.types.transformation(dtype=wptype)
724
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
725
+ transform = wp._src.types.transformation(dtype=wptype)
726
726
 
727
727
  def check_transform_scalar_mul(
728
728
  s: wp.array(dtype=wptype),
@@ -789,8 +789,8 @@ def test_transform_add_sub(test, device, dtype, register_kernels=False):
789
789
  np.float64: 1.0e-8,
790
790
  }.get(dtype, 0)
791
791
 
792
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
793
- transform = wp.types.transformation(dtype=wptype)
792
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
793
+ transform = wp._src.types.transformation(dtype=wptype)
794
794
 
795
795
  def check_transform_add_sub(
796
796
  q: wp.array(dtype=transform),
@@ -866,8 +866,8 @@ def test_transform_get_trans_rot(test, device, dtype, register_kernels=False):
866
866
  np.float64: 1.0e-8,
867
867
  }.get(dtype, 0)
868
868
 
869
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
870
- transform = wp.types.transformation(dtype=wptype)
869
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
870
+ transform = wp._src.types.transformation(dtype=wptype)
871
871
 
872
872
  def check_transform_get_trans_rot(
873
873
  s: wp.array(dtype=transform),
@@ -936,8 +936,8 @@ def test_transform_multiply(test, device, dtype, register_kernels=False):
936
936
  np.float64: 1.0e-8,
937
937
  }.get(dtype, 0)
938
938
 
939
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
940
- transform = wp.types.transformation(dtype=wptype)
939
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
940
+ transform = wp._src.types.transformation(dtype=wptype)
941
941
 
942
942
  def check_transform_multiply(
943
943
  a: wp.array(dtype=transform),
@@ -1045,8 +1045,8 @@ def test_transform_inverse(test, device, dtype, register_kernels=False):
1045
1045
  np.float64: 1.0e-8,
1046
1046
  }.get(dtype, 0)
1047
1047
 
1048
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1049
- transform = wp.types.transformation(dtype=wptype)
1048
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1049
+ transform = wp._src.types.transformation(dtype=wptype)
1050
1050
 
1051
1051
  def check_transform_inverse(
1052
1052
  a: wp.array(dtype=transform),
@@ -1138,9 +1138,9 @@ def test_transform_point_vector(test, device, dtype, register_kernels=False):
1138
1138
  np.float64: 1.0e-8,
1139
1139
  }.get(dtype, 0)
1140
1140
 
1141
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1142
- transform = wp.types.transformation(dtype=wptype)
1143
- vec3 = wp.types.vector(length=3, dtype=wptype)
1141
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1142
+ transform = wp._src.types.transformation(dtype=wptype)
1143
+ vec3 = wp._src.types.vector(length=3, dtype=wptype)
1144
1144
 
1145
1145
  def check_transform_point_vector(
1146
1146
  t: wp.array(dtype=transform),
@@ -1246,8 +1246,8 @@ def test_spatial_matrix_constructors(test, device, dtype, register_kernels=False
1246
1246
  np.float64: 1.0e-8,
1247
1247
  }.get(dtype, 0)
1248
1248
 
1249
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1250
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1249
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1250
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1251
1251
 
1252
1252
  def check_spatial_matrix_constructor(
1253
1253
  input: wp.array(dtype=wptype),
@@ -1342,20 +1342,20 @@ def test_spatial_matrix_indexing(test, device, dtype, register_kernels=False):
1342
1342
  np.float64: 1.0e-8,
1343
1343
  }.get(dtype, 0)
1344
1344
 
1345
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1346
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1345
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1346
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1347
1347
 
1348
1348
  def check_spatial_matrix_indexing(
1349
1349
  input: wp.array(dtype=spatial_matrix),
1350
1350
  out: wp.array(dtype=wptype),
1351
1351
  ):
1352
- inpt = input[0]
1352
+ elem = input[0]
1353
1353
 
1354
1354
  # multiply outputs by 2 so we've got something to backpropagate:
1355
1355
  idx = 0
1356
1356
  for i in range(6):
1357
1357
  for j in range(6):
1358
- out[idx] = wptype(2) * inpt[i, j]
1358
+ out[idx] = wptype(2) * elem[i, j]
1359
1359
  idx = idx + 1
1360
1360
 
1361
1361
  kernel = getkernel(check_spatial_matrix_indexing, suffix=dtype.__name__)
@@ -1397,8 +1397,8 @@ def test_spatial_matrix_scalar_multiplication(test, device, dtype, register_kern
1397
1397
  np.float64: 1.0e-8,
1398
1398
  }.get(dtype, 0)
1399
1399
 
1400
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1401
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1400
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1401
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1402
1402
 
1403
1403
  def check_spatial_matrix_scalar_mul(
1404
1404
  s: wp.array(dtype=wptype),
@@ -1473,8 +1473,8 @@ def test_spatial_matrix_add_sub(test, device, dtype, register_kernels=False):
1473
1473
  np.float64: 1.0e-8,
1474
1474
  }.get(dtype, 0)
1475
1475
 
1476
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1477
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1476
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1477
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1478
1478
 
1479
1479
  def check_spatial_matrix_add_sub(
1480
1480
  q: wp.array(dtype=spatial_matrix),
@@ -1561,9 +1561,9 @@ def test_spatial_matvec_multiplication(test, device, dtype, register_kernels=Fal
1561
1561
  np.float64: 1.0e-8,
1562
1562
  }.get(dtype, 0)
1563
1563
 
1564
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1565
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1566
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
1564
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1565
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1566
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
1567
1567
 
1568
1568
  output_select_kernel = get_select_kernel(wptype)
1569
1569
 
@@ -1622,8 +1622,8 @@ def test_spatial_matmat_multiplication(test, device, dtype, register_kernels=Fal
1622
1622
  np.float64: 5.0e-7,
1623
1623
  }.get(dtype, 0)
1624
1624
 
1625
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1626
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1625
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1626
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1627
1627
 
1628
1628
  output_select_kernel = get_select_kernel(wptype)
1629
1629
 
@@ -1689,8 +1689,8 @@ def test_spatial_mat_transpose(test, device, dtype, register_kernels=False):
1689
1689
  np.float64: 1.0e-8,
1690
1690
  }.get(dtype, 0)
1691
1691
 
1692
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1693
- spatial_matrix = wp.types.matrix(shape=(6, 6), dtype=wptype)
1692
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1693
+ spatial_matrix = wp._src.types.matrix(shape=(6, 6), dtype=wptype)
1694
1694
 
1695
1695
  output_select_kernel = get_select_kernel(wptype)
1696
1696
 
@@ -1746,8 +1746,8 @@ def test_spatial_outer_product(test, device, dtype, register_kernels=False):
1746
1746
  np.float64: 1.0e-8,
1747
1747
  }.get(dtype, 0)
1748
1748
 
1749
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1750
- spatial_vector = wp.types.vector(length=6, dtype=wptype)
1749
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1750
+ spatial_vector = wp._src.types.vector(length=6, dtype=wptype)
1751
1751
 
1752
1752
  output_select_kernel = get_select_kernel(wptype)
1753
1753
 
@@ -1826,8 +1826,8 @@ def test_spatial_adjoint(test, device, dtype, register_kernels=False):
1826
1826
  np.float64: 1.0e-8,
1827
1827
  }.get(dtype, 0)
1828
1828
 
1829
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1830
- mat3 = wp.types.matrix(shape=(3, 3), dtype=wptype)
1829
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1830
+ mat3 = wp._src.types.matrix(shape=(3, 3), dtype=wptype)
1831
1831
 
1832
1832
  output_select_kernel = get_select_kernel(wptype)
1833
1833
 
@@ -1901,7 +1901,7 @@ def test_spatial_adjoint(test, device, dtype, register_kernels=False):
1901
1901
 
1902
1902
 
1903
1903
  def test_transform_identity(test, device, dtype, register_kernels=False):
1904
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1904
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1905
1905
 
1906
1906
  def transform_identity_test(output: wp.array(dtype=wptype)):
1907
1907
  t = wp.transform_identity(dtype=wptype)
@@ -1936,7 +1936,7 @@ def test_transform_identity(test, device, dtype, register_kernels=False):
1936
1936
  def test_transform_anon_type_instance(test, device, dtype, register_kernels=False):
1937
1937
  rng = np.random.default_rng(123)
1938
1938
 
1939
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1939
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1940
1940
 
1941
1941
  def transform_create_test(input: wp.array(dtype=wptype), output: wp.array(dtype=wptype)):
1942
1942
  t = wp.transformation(
@@ -1970,10 +1970,10 @@ def test_transform_anon_type_instance(test, device, dtype, register_kernels=Fals
1970
1970
 
1971
1971
 
1972
1972
  def test_transform_from_matrix(test, device, dtype, register_kernels=False):
1973
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
1974
- mat44 = wp.types.matrix((4, 4), wptype)
1975
- vec3 = wp.types.vector(3, wptype)
1976
- quat = wp.types.quaternion(wptype)
1973
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
1974
+ mat44 = wp._src.types.matrix((4, 4), wptype)
1975
+ vec3 = wp._src.types.vector(3, wptype)
1976
+ quat = wp._src.types.quaternion(wptype)
1977
1977
 
1978
1978
  def transform_from_matrix_kernel():
1979
1979
  # fmt: off
@@ -1999,10 +1999,10 @@ def test_transform_from_matrix(test, device, dtype, register_kernels=False):
1999
1999
 
2000
2000
 
2001
2001
  def test_transform_to_matrix(test, device, dtype, register_kernels=False):
2002
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
2003
- mat44 = wp.types.matrix((4, 4), wptype)
2004
- vec3 = wp.types.vector(3, wptype)
2005
- quat = wp.types.quaternion(wptype)
2002
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
2003
+ mat44 = wp._src.types.matrix((4, 4), wptype)
2004
+ vec3 = wp._src.types.vector(3, wptype)
2005
+ quat = wp._src.types.quaternion(wptype)
2006
2006
 
2007
2007
  def transform_to_matrix_kernel():
2008
2008
  p = vec3(wptype(1.0), wptype(2.0), wptype(3.0))
@@ -2031,10 +2031,10 @@ def test_transform_to_matrix(test, device, dtype, register_kernels=False):
2031
2031
 
2032
2032
 
2033
2033
  def test_transform_compose(test, device, dtype, register_kernels=False):
2034
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
2035
- mat44 = wp.types.matrix((4, 4), wptype)
2036
- vec3 = wp.types.vector(3, wptype)
2037
- quat = wp.types.quaternion(wptype)
2034
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
2035
+ mat44 = wp._src.types.matrix((4, 4), wptype)
2036
+ vec3 = wp._src.types.vector(3, wptype)
2037
+ quat = wp._src.types.quaternion(wptype)
2038
2038
 
2039
2039
  def transform_compose_kernel():
2040
2040
  p = vec3(wptype(1.0), wptype(2.0), wptype(3.0))
@@ -2063,10 +2063,10 @@ def test_transform_compose(test, device, dtype, register_kernels=False):
2063
2063
 
2064
2064
 
2065
2065
  def test_transform_decompose(test, device, dtype, register_kernels=False):
2066
- wptype = wp.types.np_dtype_to_warp_type[np.dtype(dtype)]
2067
- mat44 = wp.types.matrix((4, 4), wptype)
2068
- vec3 = wp.types.vector(3, wptype)
2069
- quat = wp.types.quaternion(wptype)
2066
+ wptype = wp._src.types.np_dtype_to_warp_type[np.dtype(dtype)]
2067
+ mat44 = wp._src.types.matrix((4, 4), wptype)
2068
+ vec3 = wp._src.types.vector(3, wptype)
2069
+ quat = wp._src.types.quaternion(wptype)
2070
2070
 
2071
2071
  def transform_decompose_kernel():
2072
2072
  # fmt: off
@@ -2519,7 +2519,6 @@ def test_transform_slicing_assign(test, device):
2519
2519
  vec2 = wp.vec(2, float)
2520
2520
  vec3 = wp.vec(3, float)
2521
2521
  vec4 = wp.vec(4, float)
2522
- vec5 = wp.vec(5, float)
2523
2522
  vec6 = wp.vec(6, float)
2524
2523
  vec7 = wp.vec(7, float)
2525
2524
 
@@ -2612,6 +2611,24 @@ def test_transform_slicing_assign_backward(test, device):
2612
2611
  assert_np_equal(x.grad.numpy(), np.array(((1.0, 1.0),), dtype=float))
2613
2612
 
2614
2613
 
2614
+ def test_transform_default_q_arg(test, device):
2615
+ vec7 = wp.vec(7, float)
2616
+
2617
+ @wp.func
2618
+ def fn():
2619
+ t = wp.transform(p=wp.vec3(1.0, 2.0, 3.0))
2620
+
2621
+ wp.expect_eq(t[:] == vec7(1.0, 2.0, 3.0, 0.0, 0.0, 0.0, 1.0), True)
2622
+
2623
+ @wp.kernel(module="unique")
2624
+ def kernel():
2625
+ fn()
2626
+
2627
+ wp.launch(kernel, 1, device=device)
2628
+ wp.synchronize()
2629
+ fn()
2630
+
2631
+
2615
2632
  devices = get_test_devices()
2616
2633
 
2617
2634
 
@@ -2834,6 +2851,7 @@ add_function_test(TestSpatial, "test_transform_slicing_assign", test_transform_s
2834
2851
  add_function_test(
2835
2852
  TestSpatial, "test_transform_slicing_assign_backward", test_transform_slicing_assign_backward, devices=devices
2836
2853
  )
2854
+ add_function_test(TestSpatial, "test_transform_default_q_arg", test_transform_default_q_arg, devices=devices)
2837
2855
 
2838
2856
 
2839
2857
  if __name__ == "__main__":
@@ -152,7 +152,7 @@ def test_nan_scalar(test, device, dtype, register_kernels=False):
152
152
 
153
153
 
154
154
  def test_is_special_vec(test, device, dtype, register_kernels=False):
155
- vector_type = wp.types.vector(5, dtype)
155
+ vector_type = wp._src.types.vector(5, dtype)
156
156
 
157
157
  def check_special_vec(bool_outputs: wp.array(dtype=wp.bool)):
158
158
  zeros_vector = vector_type()
@@ -197,7 +197,7 @@ def test_is_special_vec(test, device, dtype, register_kernels=False):
197
197
 
198
198
 
199
199
  def test_is_special_mat(test, device, dtype, register_kernels=False):
200
- mat_type = wp.types.matrix((5, 5), dtype)
200
+ mat_type = wp._src.types.matrix((5, 5), dtype)
201
201
 
202
202
  def check_special_mat(bool_outputs: wp.array(dtype=wp.bool)):
203
203
  zeros_mat = mat_type()
@@ -242,7 +242,7 @@ def test_is_special_mat(test, device, dtype, register_kernels=False):
242
242
 
243
243
 
244
244
  def test_is_special_quat(test, device, dtype, register_kernels=False):
245
- quat_type = wp.types.quaternion(dtype)
245
+ quat_type = wp._src.types.quaternion(dtype)
246
246
 
247
247
  def check_special_quat(bool_outputs: wp.array(dtype=wp.bool)):
248
248
  zeros_quat = quat_type()
@@ -285,8 +285,8 @@ def test_is_special_quat(test, device, dtype, register_kernels=False):
285
285
 
286
286
 
287
287
  def test_is_special_int(test, device, dtype, register_kernels=False):
288
- vector_type = wp.types.vector(5, dtype)
289
- matrix_type = wp.types.matrix((5, 5), dtype)
288
+ vector_type = wp._src.types.vector(5, dtype)
289
+ matrix_type = wp._src.types.matrix((5, 5), dtype)
290
290
 
291
291
  def check_is_special_int(bool_outputs: wp.array(dtype=wp.bool)):
292
292
  bool_outputs[0] = wp.isfinite(dtype(0))
@@ -350,7 +350,7 @@ for dtype in [wp.float16, wp.float32, wp.float64]:
350
350
  )
351
351
 
352
352
  # Ensure functions like wp.isfinite work on integer types
353
- for dtype in wp.types.int_types:
353
+ for dtype in wp._src.types.int_types:
354
354
  add_function_test_register_kernel(
355
355
  TestSpecialValues, f"test_is_special_int_{dtype.__name__}", test_is_special_int, devices=devices, dtype=dtype
356
356
  )
warp/tests/test_static.py CHANGED
@@ -155,7 +155,7 @@ def test_invalid_static_expression(test, device):
155
155
  wp.static(1.0 / 0.0)
156
156
 
157
157
  with test.assertRaisesRegex(
158
- warp.codegen.WarpCodegenError, r"Error evaluating static expression\: float division by zero"
158
+ warp._src.codegen.WarpCodegenError, r"Error evaluating static expression\: (?:float )?division by zero"
159
159
  ):
160
160
  wp.launch(invalid_kernel, 1, device=device)
161
161
 
@@ -164,7 +164,7 @@ def test_invalid_static_expression(test, device):
164
164
  wp.static(i * 2)
165
165
 
166
166
  with test.assertRaisesRegex(
167
- wp.codegen.WarpCodegenError,
167
+ wp._src.codegen.WarpCodegenError,
168
168
  r"Error evaluating static expression\: name 'i' is not defined\. Make sure all variables used in the static expression are constant\.",
169
169
  ):
170
170
  wp.launch(invalid_kernel, 1, device=device, inputs=[3])
@@ -176,7 +176,7 @@ def test_static_expression_return_types(test, device):
176
176
  wp.static(wp.zeros(3, device=device))
177
177
 
178
178
  with test.assertRaisesRegex(
179
- warp.codegen.WarpCodegenError,
179
+ warp._src.codegen.WarpCodegenError,
180
180
  r"Static expression returns an unsupported value\: a Warp array cannot be created inside Warp kernels",
181
181
  ):
182
182
  wp.launch(invalid_kernel, 1, device=device)
@@ -211,7 +211,7 @@ def test_static_expression_return_types(test, device):
211
211
  wp.static(create_struct())
212
212
 
213
213
  with test.assertRaisesRegex(
214
- warp.codegen.WarpCodegenError,
214
+ warp._src.codegen.WarpCodegenError,
215
215
  r"Static expression returns an unsupported value: the returned Warp struct contains a data type that cannot be constructed inside Warp kernels\: a Warp array cannot be created inside Warp kernels at .*?Foo\.bar\.baz",
216
216
  ):
217
217
  wp.launch(invalid_kernel, 1, device=device)
@@ -224,7 +224,7 @@ def test_static_expression_return_types(test, device):
224
224
  wp.static(function_with_no_return_value())
225
225
 
226
226
  with test.assertRaisesRegex(
227
- warp.codegen.WarpCodegenError,
227
+ warp._src.codegen.WarpCodegenError,
228
228
  r"Static expression returns an unsupported value\: None is returned",
229
229
  ):
230
230
  wp.launch(invalid_kernel, 1, device=device)
@@ -237,7 +237,7 @@ def test_static_expression_return_types(test, device):
237
237
  wp.static(MyClass())
238
238
 
239
239
  with test.assertRaisesRegex(
240
- warp.codegen.WarpCodegenError,
240
+ warp._src.codegen.WarpCodegenError,
241
241
  r"Static expression returns an unsupported value\: value of type .*?MyClass",
242
242
  ):
243
243
  wp.launch(invalid_kernel, 1, device=device)
@@ -489,7 +489,7 @@ def test_static_constant_hash(test, _):
489
489
  test.assertEqual(hash1, hash3)
490
490
 
491
491
  # Warp types (scalars, vectors, matrices)
492
- for warp_type in [*wp.types.scalar_types, *wp.types.vector_types]:
492
+ for warp_type in [*wp._src.types.scalar_types, *wp._src.types.vector_types]:
493
493
  type_name = warp_type.__name__
494
494
  with test.subTest(msg=f"wp.{type_name}"):
495
495
  value1 = ", ".join([str(17)] * warp_type._length_)
warp/tests/test_struct.py CHANGED
@@ -243,12 +243,18 @@ class MatStruct:
243
243
  @wp.kernel
244
244
  def kernel_nested_mat(out: wp.array(dtype=wp.mat44)):
245
245
  s = MatStruct()
246
- m = wp.mat44()
247
246
 
247
+ s.m[0, 0] = 2.0
248
248
  s.m[1, 2] = 3.0
249
+ s.m[2][1] = 5.0
249
250
 
250
251
  out[0] = s.m
251
252
 
253
+ out[0][2, 2] = 6.0
254
+ out[0][1][1] = 7.0
255
+
256
+ out[0][3, 3] = out[0][0][0]
257
+
252
258
 
253
259
  def test_nested_mat(test, device):
254
260
  m = wp.array([wp.mat44()], dtype=wp.mat44, device=device)
@@ -256,7 +262,12 @@ def test_nested_mat(test, device):
256
262
  wp.synchronize()
257
263
 
258
264
  out = m.numpy()
265
+ assert_np_equal(out[0][0, 0], 2.0)
259
266
  assert_np_equal(out[0][1, 2], 3.0)
267
+ assert_np_equal(out[0][2][1], 5.0)
268
+ assert_np_equal(out[0][2, 2], 6.0)
269
+ assert_np_equal(out[0][1][1], 7.0)
270
+ assert_np_equal(out[0][3, 3], 2.0)
260
271
 
261
272
 
262
273
  def test_assign_view(test, device):
@@ -267,7 +278,7 @@ def test_assign_view(test, device):
267
278
  m = wp.array([[wp.mat44()]], dtype=wp.mat44, device=device)
268
279
 
269
280
  with test.assertRaisesRegex(
270
- wp.codegen.WarpCodegenError,
281
+ wp._src.codegen.WarpCodegenError,
271
282
  r"Incorrect number of indices specified for array indexing",
272
283
  ):
273
284
  wp.launch(kernel_assign_view, dim=[1, 1], outputs=[m], device=device)
@@ -15,10 +15,57 @@
15
15
 
16
16
  import unittest
17
17
 
18
- from warp.sim.collide import triangle_closest_point_barycentric
19
18
  from warp.tests.unittest_utils import *
20
19
 
21
20
 
21
+ @wp.func
22
+ def triangle_closest_point_barycentric(a: wp.vec3, b: wp.vec3, c: wp.vec3, p: wp.vec3):
23
+ ab = b - a
24
+ ac = c - a
25
+ ap = p - a
26
+
27
+ d1 = wp.dot(ab, ap)
28
+ d2 = wp.dot(ac, ap)
29
+
30
+ if d1 <= 0.0 and d2 <= 0.0:
31
+ return wp.vec3(1.0, 0.0, 0.0)
32
+
33
+ bp = p - b
34
+ d3 = wp.dot(ab, bp)
35
+ d4 = wp.dot(ac, bp)
36
+
37
+ if d3 >= 0.0 and d4 <= d3:
38
+ return wp.vec3(0.0, 1.0, 0.0)
39
+
40
+ vc = d1 * d4 - d3 * d2
41
+ v = d1 / (d1 - d3)
42
+ if vc <= 0.0 and d1 >= 0.0 and d3 <= 0.0:
43
+ return wp.vec3(1.0 - v, v, 0.0)
44
+
45
+ cp = p - c
46
+ d5 = wp.dot(ab, cp)
47
+ d6 = wp.dot(ac, cp)
48
+
49
+ if d6 >= 0.0 and d5 <= d6:
50
+ return wp.vec3(0.0, 0.0, 1.0)
51
+
52
+ vb = d5 * d2 - d1 * d6
53
+ w = d2 / (d2 - d6)
54
+ if vb <= 0.0 and d2 >= 0.0 and d6 <= 0.0:
55
+ return wp.vec3(1.0 - w, 0.0, w)
56
+
57
+ va = d3 * d6 - d5 * d4
58
+ w = (d4 - d3) / ((d4 - d3) + (d5 - d6))
59
+ if va <= 0.0 and (d4 - d3) >= 0.0 and (d5 - d6) >= 0.0:
60
+ return wp.vec3(0.0, 1.0 - w, w)
61
+
62
+ denom = 1.0 / (va + vb + vc)
63
+ v = vb * denom
64
+ w = vc * denom
65
+
66
+ return wp.vec3(1.0 - v - w, v, w)
67
+
68
+
22
69
  # a-b is the edge where the closest point is located at
23
70
  @wp.func
24
71
  def check_edge_feasible_region(p: wp.vec3, a: wp.vec3, b: wp.vec3, c: wp.vec3, eps: float):