warp-lang 1.7.0__py3-none-manylinux_2_34_aarch64.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 (429) hide show
  1. warp/__init__.py +139 -0
  2. warp/__init__.pyi +1 -0
  3. warp/autograd.py +1142 -0
  4. warp/bin/warp-clang.so +0 -0
  5. warp/bin/warp.so +0 -0
  6. warp/build.py +557 -0
  7. warp/build_dll.py +405 -0
  8. warp/builtins.py +6855 -0
  9. warp/codegen.py +3969 -0
  10. warp/config.py +158 -0
  11. warp/constants.py +57 -0
  12. warp/context.py +6812 -0
  13. warp/dlpack.py +462 -0
  14. warp/examples/__init__.py +24 -0
  15. warp/examples/assets/bear.usd +0 -0
  16. warp/examples/assets/bunny.usd +0 -0
  17. warp/examples/assets/cartpole.urdf +110 -0
  18. warp/examples/assets/crazyflie.usd +0 -0
  19. warp/examples/assets/cube.usd +0 -0
  20. warp/examples/assets/nonuniform.usd +0 -0
  21. warp/examples/assets/nv_ant.xml +92 -0
  22. warp/examples/assets/nv_humanoid.xml +183 -0
  23. warp/examples/assets/nvidia_logo.png +0 -0
  24. warp/examples/assets/pixel.jpg +0 -0
  25. warp/examples/assets/quadruped.urdf +268 -0
  26. warp/examples/assets/rocks.nvdb +0 -0
  27. warp/examples/assets/rocks.usd +0 -0
  28. warp/examples/assets/sphere.usd +0 -0
  29. warp/examples/assets/square_cloth.usd +0 -0
  30. warp/examples/benchmarks/benchmark_api.py +389 -0
  31. warp/examples/benchmarks/benchmark_cloth.py +296 -0
  32. warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
  33. warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
  34. warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
  35. warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
  36. warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
  37. warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
  38. warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
  39. warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
  40. warp/examples/benchmarks/benchmark_gemm.py +164 -0
  41. warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
  42. warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
  43. warp/examples/benchmarks/benchmark_launches.py +301 -0
  44. warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
  45. warp/examples/browse.py +37 -0
  46. warp/examples/core/example_cupy.py +86 -0
  47. warp/examples/core/example_dem.py +241 -0
  48. warp/examples/core/example_fluid.py +299 -0
  49. warp/examples/core/example_graph_capture.py +150 -0
  50. warp/examples/core/example_marching_cubes.py +194 -0
  51. warp/examples/core/example_mesh.py +180 -0
  52. warp/examples/core/example_mesh_intersect.py +211 -0
  53. warp/examples/core/example_nvdb.py +182 -0
  54. warp/examples/core/example_raycast.py +111 -0
  55. warp/examples/core/example_raymarch.py +205 -0
  56. warp/examples/core/example_render_opengl.py +193 -0
  57. warp/examples/core/example_sample_mesh.py +300 -0
  58. warp/examples/core/example_sph.py +411 -0
  59. warp/examples/core/example_torch.py +211 -0
  60. warp/examples/core/example_wave.py +269 -0
  61. warp/examples/fem/example_adaptive_grid.py +286 -0
  62. warp/examples/fem/example_apic_fluid.py +423 -0
  63. warp/examples/fem/example_burgers.py +261 -0
  64. warp/examples/fem/example_convection_diffusion.py +178 -0
  65. warp/examples/fem/example_convection_diffusion_dg.py +204 -0
  66. warp/examples/fem/example_deformed_geometry.py +172 -0
  67. warp/examples/fem/example_diffusion.py +196 -0
  68. warp/examples/fem/example_diffusion_3d.py +225 -0
  69. warp/examples/fem/example_diffusion_mgpu.py +220 -0
  70. warp/examples/fem/example_distortion_energy.py +228 -0
  71. warp/examples/fem/example_magnetostatics.py +240 -0
  72. warp/examples/fem/example_mixed_elasticity.py +291 -0
  73. warp/examples/fem/example_navier_stokes.py +261 -0
  74. warp/examples/fem/example_nonconforming_contact.py +298 -0
  75. warp/examples/fem/example_stokes.py +213 -0
  76. warp/examples/fem/example_stokes_transfer.py +262 -0
  77. warp/examples/fem/example_streamlines.py +352 -0
  78. warp/examples/fem/utils.py +1000 -0
  79. warp/examples/interop/example_jax_callable.py +116 -0
  80. warp/examples/interop/example_jax_ffi_callback.py +132 -0
  81. warp/examples/interop/example_jax_kernel.py +205 -0
  82. warp/examples/optim/example_bounce.py +266 -0
  83. warp/examples/optim/example_cloth_throw.py +228 -0
  84. warp/examples/optim/example_diffray.py +561 -0
  85. warp/examples/optim/example_drone.py +870 -0
  86. warp/examples/optim/example_fluid_checkpoint.py +497 -0
  87. warp/examples/optim/example_inverse_kinematics.py +182 -0
  88. warp/examples/optim/example_inverse_kinematics_torch.py +191 -0
  89. warp/examples/optim/example_softbody_properties.py +400 -0
  90. warp/examples/optim/example_spring_cage.py +245 -0
  91. warp/examples/optim/example_trajectory.py +227 -0
  92. warp/examples/sim/example_cartpole.py +143 -0
  93. warp/examples/sim/example_cloth.py +225 -0
  94. warp/examples/sim/example_cloth_self_contact.py +322 -0
  95. warp/examples/sim/example_granular.py +130 -0
  96. warp/examples/sim/example_granular_collision_sdf.py +202 -0
  97. warp/examples/sim/example_jacobian_ik.py +244 -0
  98. warp/examples/sim/example_particle_chain.py +124 -0
  99. warp/examples/sim/example_quadruped.py +203 -0
  100. warp/examples/sim/example_rigid_chain.py +203 -0
  101. warp/examples/sim/example_rigid_contact.py +195 -0
  102. warp/examples/sim/example_rigid_force.py +133 -0
  103. warp/examples/sim/example_rigid_gyroscopic.py +115 -0
  104. warp/examples/sim/example_rigid_soft_contact.py +140 -0
  105. warp/examples/sim/example_soft_body.py +196 -0
  106. warp/examples/tile/example_tile_cholesky.py +87 -0
  107. warp/examples/tile/example_tile_convolution.py +66 -0
  108. warp/examples/tile/example_tile_fft.py +55 -0
  109. warp/examples/tile/example_tile_filtering.py +113 -0
  110. warp/examples/tile/example_tile_matmul.py +85 -0
  111. warp/examples/tile/example_tile_mlp.py +383 -0
  112. warp/examples/tile/example_tile_nbody.py +199 -0
  113. warp/examples/tile/example_tile_walker.py +327 -0
  114. warp/fabric.py +355 -0
  115. warp/fem/__init__.py +106 -0
  116. warp/fem/adaptivity.py +508 -0
  117. warp/fem/cache.py +572 -0
  118. warp/fem/dirichlet.py +202 -0
  119. warp/fem/domain.py +411 -0
  120. warp/fem/field/__init__.py +125 -0
  121. warp/fem/field/field.py +619 -0
  122. warp/fem/field/nodal_field.py +326 -0
  123. warp/fem/field/restriction.py +37 -0
  124. warp/fem/field/virtual.py +848 -0
  125. warp/fem/geometry/__init__.py +32 -0
  126. warp/fem/geometry/adaptive_nanogrid.py +857 -0
  127. warp/fem/geometry/closest_point.py +84 -0
  128. warp/fem/geometry/deformed_geometry.py +221 -0
  129. warp/fem/geometry/element.py +776 -0
  130. warp/fem/geometry/geometry.py +362 -0
  131. warp/fem/geometry/grid_2d.py +392 -0
  132. warp/fem/geometry/grid_3d.py +452 -0
  133. warp/fem/geometry/hexmesh.py +911 -0
  134. warp/fem/geometry/nanogrid.py +571 -0
  135. warp/fem/geometry/partition.py +389 -0
  136. warp/fem/geometry/quadmesh.py +663 -0
  137. warp/fem/geometry/tetmesh.py +855 -0
  138. warp/fem/geometry/trimesh.py +806 -0
  139. warp/fem/integrate.py +2335 -0
  140. warp/fem/linalg.py +419 -0
  141. warp/fem/operator.py +293 -0
  142. warp/fem/polynomial.py +229 -0
  143. warp/fem/quadrature/__init__.py +17 -0
  144. warp/fem/quadrature/pic_quadrature.py +299 -0
  145. warp/fem/quadrature/quadrature.py +591 -0
  146. warp/fem/space/__init__.py +228 -0
  147. warp/fem/space/basis_function_space.py +468 -0
  148. warp/fem/space/basis_space.py +667 -0
  149. warp/fem/space/dof_mapper.py +251 -0
  150. warp/fem/space/function_space.py +309 -0
  151. warp/fem/space/grid_2d_function_space.py +177 -0
  152. warp/fem/space/grid_3d_function_space.py +227 -0
  153. warp/fem/space/hexmesh_function_space.py +257 -0
  154. warp/fem/space/nanogrid_function_space.py +201 -0
  155. warp/fem/space/partition.py +367 -0
  156. warp/fem/space/quadmesh_function_space.py +223 -0
  157. warp/fem/space/restriction.py +179 -0
  158. warp/fem/space/shape/__init__.py +143 -0
  159. warp/fem/space/shape/cube_shape_function.py +1105 -0
  160. warp/fem/space/shape/shape_function.py +133 -0
  161. warp/fem/space/shape/square_shape_function.py +926 -0
  162. warp/fem/space/shape/tet_shape_function.py +834 -0
  163. warp/fem/space/shape/triangle_shape_function.py +672 -0
  164. warp/fem/space/tetmesh_function_space.py +271 -0
  165. warp/fem/space/topology.py +424 -0
  166. warp/fem/space/trimesh_function_space.py +194 -0
  167. warp/fem/types.py +99 -0
  168. warp/fem/utils.py +420 -0
  169. warp/jax.py +187 -0
  170. warp/jax_experimental/__init__.py +16 -0
  171. warp/jax_experimental/custom_call.py +351 -0
  172. warp/jax_experimental/ffi.py +698 -0
  173. warp/jax_experimental/xla_ffi.py +602 -0
  174. warp/math.py +244 -0
  175. warp/native/array.h +1145 -0
  176. warp/native/builtin.h +1800 -0
  177. warp/native/bvh.cpp +492 -0
  178. warp/native/bvh.cu +791 -0
  179. warp/native/bvh.h +554 -0
  180. warp/native/clang/clang.cpp +536 -0
  181. warp/native/coloring.cpp +613 -0
  182. warp/native/crt.cpp +51 -0
  183. warp/native/crt.h +362 -0
  184. warp/native/cuda_crt.h +1058 -0
  185. warp/native/cuda_util.cpp +646 -0
  186. warp/native/cuda_util.h +307 -0
  187. warp/native/error.cpp +77 -0
  188. warp/native/error.h +36 -0
  189. warp/native/exports.h +1878 -0
  190. warp/native/fabric.h +245 -0
  191. warp/native/hashgrid.cpp +311 -0
  192. warp/native/hashgrid.cu +87 -0
  193. warp/native/hashgrid.h +240 -0
  194. warp/native/initializer_array.h +41 -0
  195. warp/native/intersect.h +1230 -0
  196. warp/native/intersect_adj.h +375 -0
  197. warp/native/intersect_tri.h +339 -0
  198. warp/native/marching.cpp +19 -0
  199. warp/native/marching.cu +514 -0
  200. warp/native/marching.h +19 -0
  201. warp/native/mat.h +2220 -0
  202. warp/native/mathdx.cpp +87 -0
  203. warp/native/matnn.h +343 -0
  204. warp/native/mesh.cpp +266 -0
  205. warp/native/mesh.cu +404 -0
  206. warp/native/mesh.h +1980 -0
  207. warp/native/nanovdb/GridHandle.h +366 -0
  208. warp/native/nanovdb/HostBuffer.h +590 -0
  209. warp/native/nanovdb/NanoVDB.h +6624 -0
  210. warp/native/nanovdb/PNanoVDB.h +3390 -0
  211. warp/native/noise.h +859 -0
  212. warp/native/quat.h +1371 -0
  213. warp/native/rand.h +342 -0
  214. warp/native/range.h +139 -0
  215. warp/native/reduce.cpp +174 -0
  216. warp/native/reduce.cu +364 -0
  217. warp/native/runlength_encode.cpp +79 -0
  218. warp/native/runlength_encode.cu +61 -0
  219. warp/native/scan.cpp +47 -0
  220. warp/native/scan.cu +53 -0
  221. warp/native/scan.h +23 -0
  222. warp/native/solid_angle.h +466 -0
  223. warp/native/sort.cpp +251 -0
  224. warp/native/sort.cu +277 -0
  225. warp/native/sort.h +33 -0
  226. warp/native/sparse.cpp +378 -0
  227. warp/native/sparse.cu +524 -0
  228. warp/native/spatial.h +657 -0
  229. warp/native/svd.h +702 -0
  230. warp/native/temp_buffer.h +46 -0
  231. warp/native/tile.h +2584 -0
  232. warp/native/tile_reduce.h +264 -0
  233. warp/native/vec.h +1426 -0
  234. warp/native/volume.cpp +501 -0
  235. warp/native/volume.cu +67 -0
  236. warp/native/volume.h +969 -0
  237. warp/native/volume_builder.cu +477 -0
  238. warp/native/volume_builder.h +52 -0
  239. warp/native/volume_impl.h +70 -0
  240. warp/native/warp.cpp +1082 -0
  241. warp/native/warp.cu +3636 -0
  242. warp/native/warp.h +381 -0
  243. warp/optim/__init__.py +17 -0
  244. warp/optim/adam.py +163 -0
  245. warp/optim/linear.py +1137 -0
  246. warp/optim/sgd.py +112 -0
  247. warp/paddle.py +407 -0
  248. warp/render/__init__.py +18 -0
  249. warp/render/render_opengl.py +3518 -0
  250. warp/render/render_usd.py +784 -0
  251. warp/render/utils.py +160 -0
  252. warp/sim/__init__.py +65 -0
  253. warp/sim/articulation.py +793 -0
  254. warp/sim/collide.py +2395 -0
  255. warp/sim/graph_coloring.py +300 -0
  256. warp/sim/import_mjcf.py +790 -0
  257. warp/sim/import_snu.py +227 -0
  258. warp/sim/import_urdf.py +579 -0
  259. warp/sim/import_usd.py +894 -0
  260. warp/sim/inertia.py +324 -0
  261. warp/sim/integrator.py +242 -0
  262. warp/sim/integrator_euler.py +1997 -0
  263. warp/sim/integrator_featherstone.py +2101 -0
  264. warp/sim/integrator_vbd.py +2048 -0
  265. warp/sim/integrator_xpbd.py +3292 -0
  266. warp/sim/model.py +4791 -0
  267. warp/sim/particles.py +121 -0
  268. warp/sim/render.py +427 -0
  269. warp/sim/utils.py +428 -0
  270. warp/sparse.py +2057 -0
  271. warp/stubs.py +3333 -0
  272. warp/tape.py +1203 -0
  273. warp/tests/__init__.py +1 -0
  274. warp/tests/__main__.py +4 -0
  275. warp/tests/assets/curlnoise_golden.npy +0 -0
  276. warp/tests/assets/mlp_golden.npy +0 -0
  277. warp/tests/assets/pixel.npy +0 -0
  278. warp/tests/assets/pnoise_golden.npy +0 -0
  279. warp/tests/assets/spiky.usd +0 -0
  280. warp/tests/assets/test_grid.nvdb +0 -0
  281. warp/tests/assets/test_index_grid.nvdb +0 -0
  282. warp/tests/assets/test_int32_grid.nvdb +0 -0
  283. warp/tests/assets/test_vec_grid.nvdb +0 -0
  284. warp/tests/assets/torus.nvdb +0 -0
  285. warp/tests/assets/torus.usda +105 -0
  286. warp/tests/aux_test_class_kernel.py +34 -0
  287. warp/tests/aux_test_compile_consts_dummy.py +18 -0
  288. warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
  289. warp/tests/aux_test_dependent.py +29 -0
  290. warp/tests/aux_test_grad_customs.py +29 -0
  291. warp/tests/aux_test_instancing_gc.py +26 -0
  292. warp/tests/aux_test_module_unload.py +23 -0
  293. warp/tests/aux_test_name_clash1.py +40 -0
  294. warp/tests/aux_test_name_clash2.py +40 -0
  295. warp/tests/aux_test_reference.py +9 -0
  296. warp/tests/aux_test_reference_reference.py +8 -0
  297. warp/tests/aux_test_square.py +16 -0
  298. warp/tests/aux_test_unresolved_func.py +22 -0
  299. warp/tests/aux_test_unresolved_symbol.py +22 -0
  300. warp/tests/cuda/__init__.py +0 -0
  301. warp/tests/cuda/test_async.py +676 -0
  302. warp/tests/cuda/test_ipc.py +124 -0
  303. warp/tests/cuda/test_mempool.py +233 -0
  304. warp/tests/cuda/test_multigpu.py +169 -0
  305. warp/tests/cuda/test_peer.py +139 -0
  306. warp/tests/cuda/test_pinned.py +84 -0
  307. warp/tests/cuda/test_streams.py +634 -0
  308. warp/tests/geometry/__init__.py +0 -0
  309. warp/tests/geometry/test_bvh.py +200 -0
  310. warp/tests/geometry/test_hash_grid.py +221 -0
  311. warp/tests/geometry/test_marching_cubes.py +74 -0
  312. warp/tests/geometry/test_mesh.py +316 -0
  313. warp/tests/geometry/test_mesh_query_aabb.py +399 -0
  314. warp/tests/geometry/test_mesh_query_point.py +932 -0
  315. warp/tests/geometry/test_mesh_query_ray.py +311 -0
  316. warp/tests/geometry/test_volume.py +1103 -0
  317. warp/tests/geometry/test_volume_write.py +346 -0
  318. warp/tests/interop/__init__.py +0 -0
  319. warp/tests/interop/test_dlpack.py +729 -0
  320. warp/tests/interop/test_jax.py +371 -0
  321. warp/tests/interop/test_paddle.py +800 -0
  322. warp/tests/interop/test_torch.py +1001 -0
  323. warp/tests/run_coverage_serial.py +39 -0
  324. warp/tests/sim/__init__.py +0 -0
  325. warp/tests/sim/disabled_kinematics.py +244 -0
  326. warp/tests/sim/flaky_test_sim_grad.py +290 -0
  327. warp/tests/sim/test_collision.py +604 -0
  328. warp/tests/sim/test_coloring.py +258 -0
  329. warp/tests/sim/test_model.py +224 -0
  330. warp/tests/sim/test_sim_grad_bounce_linear.py +212 -0
  331. warp/tests/sim/test_sim_kinematics.py +98 -0
  332. warp/tests/sim/test_vbd.py +597 -0
  333. warp/tests/test_adam.py +163 -0
  334. warp/tests/test_arithmetic.py +1096 -0
  335. warp/tests/test_array.py +2972 -0
  336. warp/tests/test_array_reduce.py +156 -0
  337. warp/tests/test_assert.py +250 -0
  338. warp/tests/test_atomic.py +153 -0
  339. warp/tests/test_bool.py +220 -0
  340. warp/tests/test_builtins_resolution.py +1298 -0
  341. warp/tests/test_closest_point_edge_edge.py +327 -0
  342. warp/tests/test_codegen.py +810 -0
  343. warp/tests/test_codegen_instancing.py +1495 -0
  344. warp/tests/test_compile_consts.py +215 -0
  345. warp/tests/test_conditional.py +252 -0
  346. warp/tests/test_context.py +42 -0
  347. warp/tests/test_copy.py +238 -0
  348. warp/tests/test_ctypes.py +638 -0
  349. warp/tests/test_dense.py +73 -0
  350. warp/tests/test_devices.py +97 -0
  351. warp/tests/test_examples.py +482 -0
  352. warp/tests/test_fabricarray.py +996 -0
  353. warp/tests/test_fast_math.py +74 -0
  354. warp/tests/test_fem.py +2003 -0
  355. warp/tests/test_fp16.py +136 -0
  356. warp/tests/test_func.py +454 -0
  357. warp/tests/test_future_annotations.py +98 -0
  358. warp/tests/test_generics.py +656 -0
  359. warp/tests/test_grad.py +893 -0
  360. warp/tests/test_grad_customs.py +339 -0
  361. warp/tests/test_grad_debug.py +341 -0
  362. warp/tests/test_implicit_init.py +411 -0
  363. warp/tests/test_import.py +45 -0
  364. warp/tests/test_indexedarray.py +1140 -0
  365. warp/tests/test_intersect.py +73 -0
  366. warp/tests/test_iter.py +76 -0
  367. warp/tests/test_large.py +177 -0
  368. warp/tests/test_launch.py +411 -0
  369. warp/tests/test_lerp.py +151 -0
  370. warp/tests/test_linear_solvers.py +193 -0
  371. warp/tests/test_lvalue.py +427 -0
  372. warp/tests/test_mat.py +2089 -0
  373. warp/tests/test_mat_lite.py +122 -0
  374. warp/tests/test_mat_scalar_ops.py +2913 -0
  375. warp/tests/test_math.py +178 -0
  376. warp/tests/test_mlp.py +282 -0
  377. warp/tests/test_module_hashing.py +258 -0
  378. warp/tests/test_modules_lite.py +44 -0
  379. warp/tests/test_noise.py +252 -0
  380. warp/tests/test_operators.py +299 -0
  381. warp/tests/test_options.py +129 -0
  382. warp/tests/test_overwrite.py +551 -0
  383. warp/tests/test_print.py +339 -0
  384. warp/tests/test_quat.py +2315 -0
  385. warp/tests/test_rand.py +339 -0
  386. warp/tests/test_reload.py +302 -0
  387. warp/tests/test_rounding.py +185 -0
  388. warp/tests/test_runlength_encode.py +196 -0
  389. warp/tests/test_scalar_ops.py +105 -0
  390. warp/tests/test_smoothstep.py +108 -0
  391. warp/tests/test_snippet.py +318 -0
  392. warp/tests/test_sparse.py +582 -0
  393. warp/tests/test_spatial.py +2229 -0
  394. warp/tests/test_special_values.py +361 -0
  395. warp/tests/test_static.py +592 -0
  396. warp/tests/test_struct.py +734 -0
  397. warp/tests/test_tape.py +204 -0
  398. warp/tests/test_transient_module.py +93 -0
  399. warp/tests/test_triangle_closest_point.py +145 -0
  400. warp/tests/test_types.py +562 -0
  401. warp/tests/test_utils.py +588 -0
  402. warp/tests/test_vec.py +1487 -0
  403. warp/tests/test_vec_lite.py +80 -0
  404. warp/tests/test_vec_scalar_ops.py +2327 -0
  405. warp/tests/test_verify_fp.py +100 -0
  406. warp/tests/tile/__init__.py +0 -0
  407. warp/tests/tile/test_tile.py +780 -0
  408. warp/tests/tile/test_tile_load.py +407 -0
  409. warp/tests/tile/test_tile_mathdx.py +208 -0
  410. warp/tests/tile/test_tile_mlp.py +402 -0
  411. warp/tests/tile/test_tile_reduce.py +447 -0
  412. warp/tests/tile/test_tile_shared_memory.py +247 -0
  413. warp/tests/tile/test_tile_view.py +173 -0
  414. warp/tests/unittest_serial.py +47 -0
  415. warp/tests/unittest_suites.py +427 -0
  416. warp/tests/unittest_utils.py +468 -0
  417. warp/tests/walkthrough_debug.py +93 -0
  418. warp/thirdparty/__init__.py +0 -0
  419. warp/thirdparty/appdirs.py +598 -0
  420. warp/thirdparty/dlpack.py +145 -0
  421. warp/thirdparty/unittest_parallel.py +570 -0
  422. warp/torch.py +391 -0
  423. warp/types.py +5230 -0
  424. warp/utils.py +1137 -0
  425. warp_lang-1.7.0.dist-info/METADATA +516 -0
  426. warp_lang-1.7.0.dist-info/RECORD +429 -0
  427. warp_lang-1.7.0.dist-info/WHEEL +5 -0
  428. warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
  429. warp_lang-1.7.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,375 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #pragma once
19
+
20
+ #include "builtin.h"
21
+
22
+ namespace wp
23
+ {
24
+
25
+ //----------------------------------------------------------------
26
+ // Generated adjoint for closest_point_edge_edge.
27
+ // See intersect.h for forward mode and comments.
28
+
29
+ static CUDA_CALLABLE void adj_closest_point_edge_edge(vec3 var_p1,
30
+ vec3 var_q1,
31
+ vec3 var_p2,
32
+ vec3 var_q2,
33
+ float32 var_epsilon,
34
+ vec3 & adj_p1,
35
+ vec3 & adj_q1,
36
+ vec3 & adj_p2,
37
+ vec3 & adj_q2,
38
+ float32 & adj_epsilon,
39
+ vec3 & adj_ret)
40
+ {
41
+ //---------
42
+ // primal vars
43
+ vec3 var_0;
44
+ vec3 var_1;
45
+ vec3 var_2;
46
+ float32 var_3;
47
+ float32 var_4;
48
+ float32 var_5;
49
+ const float32 var_6 = 0.0;
50
+ float32 var_7;
51
+ float32 var_8;
52
+ vec3 var_9;
53
+ float32 var_10;
54
+ bool var_11;
55
+ bool var_12;
56
+ bool var_13;
57
+ // vec3 var_14;
58
+ bool var_15;
59
+ float32 var_16;
60
+ float32 var_17;
61
+ float32 var_18;
62
+ float32 var_19;
63
+ float32 var_20;
64
+ float32 var_21;
65
+ bool var_22;
66
+ float32 var_23;
67
+ float32 var_24;
68
+ const float32 var_25 = 1.0;
69
+ float32 var_26;
70
+ float32 var_27;
71
+ float32 var_28;
72
+ float32 var_29;
73
+ float32 var_30;
74
+ float32 var_31;
75
+ float32 var_32;
76
+ float32 var_33;
77
+ bool var_34;
78
+ float32 var_35;
79
+ float32 var_36;
80
+ float32 var_37;
81
+ float32 var_38;
82
+ float32 var_39;
83
+ float32 var_40;
84
+ float32 var_41;
85
+ float32 var_42;
86
+ float32 var_43;
87
+ float32 var_44;
88
+ bool var_45;
89
+ float32 var_46;
90
+ float32 var_47;
91
+ float32 var_48;
92
+ float32 var_49;
93
+ float32 var_50;
94
+ bool var_51;
95
+ float32 var_52;
96
+ float32 var_53;
97
+ float32 var_54;
98
+ float32 var_55;
99
+ float32 var_56;
100
+ float32 var_57;
101
+ float32 var_58;
102
+ float32 var_59;
103
+ float32 var_60;
104
+ float32 var_61;
105
+ float32 var_62;
106
+ vec3 var_63;
107
+ vec3 var_64;
108
+ vec3 var_65;
109
+ vec3 var_66;
110
+ vec3 var_67;
111
+ vec3 var_68;
112
+ vec3 var_69;
113
+ float32 var_70;
114
+ // vec3 var_71;
115
+ //---------
116
+ // dual vars
117
+ vec3 adj_0 = 0;
118
+ vec3 adj_1 = 0;
119
+ vec3 adj_2 = 0;
120
+ float32 adj_3 = 0;
121
+ float32 adj_4 = 0;
122
+ float32 adj_5 = 0;
123
+ float32 adj_6 = 0;
124
+ float32 adj_7 = 0;
125
+ float32 adj_8 = 0;
126
+ vec3 adj_9 = 0;
127
+ float32 adj_10 = 0;
128
+ //bool adj_11 = 0;
129
+ //bool adj_12 = 0;
130
+ //bool adj_13 = 0;
131
+ vec3 adj_14 = 0;
132
+ bool adj_15 = 0;
133
+ float32 adj_16 = 0;
134
+ float32 adj_17 = 0;
135
+ float32 adj_18 = 0;
136
+ float32 adj_19 = 0;
137
+ float32 adj_20 = 0;
138
+ float32 adj_21 = 0;
139
+ bool adj_22 = 0;
140
+ float32 adj_23 = 0;
141
+ float32 adj_24 = 0;
142
+ float32 adj_25 = 0;
143
+ float32 adj_26 = 0;
144
+ float32 adj_27 = 0;
145
+ float32 adj_28 = 0;
146
+ float32 adj_29 = 0;
147
+ float32 adj_30 = 0;
148
+ float32 adj_31 = 0;
149
+ float32 adj_32 = 0;
150
+ float32 adj_33 = 0;
151
+ bool adj_34 = 0;
152
+ float32 adj_35 = 0;
153
+ float32 adj_36 = 0;
154
+ float32 adj_37 = 0;
155
+ float32 adj_38 = 0;
156
+ float32 adj_39 = 0;
157
+ float32 adj_40 = 0;
158
+ float32 adj_41 = 0;
159
+ float32 adj_42 = 0;
160
+ float32 adj_43 = 0;
161
+ float32 adj_44 = 0;
162
+ bool adj_45 = 0;
163
+ float32 adj_46 = 0;
164
+ float32 adj_47 = 0;
165
+ float32 adj_48 = 0;
166
+ float32 adj_49 = 0;
167
+ float32 adj_50 = 0;
168
+ bool adj_51 = 0;
169
+ float32 adj_52 = 0;
170
+ float32 adj_53 = 0;
171
+ float32 adj_54 = 0;
172
+ float32 adj_55 = 0;
173
+ float32 adj_56 = 0;
174
+ float32 adj_57 = 0;
175
+ float32 adj_58 = 0;
176
+ float32 adj_59 = 0;
177
+ float32 adj_60 = 0;
178
+ float32 adj_61 = 0;
179
+ float32 adj_62 = 0;
180
+ vec3 adj_63 = 0;
181
+ vec3 adj_64 = 0;
182
+ vec3 adj_65 = 0;
183
+ vec3 adj_66 = 0;
184
+ vec3 adj_67 = 0;
185
+ vec3 adj_68 = 0;
186
+ vec3 adj_69 = 0;
187
+ float32 adj_70 = 0;
188
+ vec3 adj_71 = 0;
189
+ //---------
190
+ // forward
191
+ var_0 = wp::sub(var_q1, var_p1);
192
+ var_1 = wp::sub(var_q2, var_p2);
193
+ var_2 = wp::sub(var_p1, var_p2);
194
+ var_3 = wp::dot(var_0, var_0);
195
+ var_4 = wp::dot(var_1, var_1);
196
+ var_5 = wp::dot(var_1, var_2);
197
+ var_7 = wp::cast_float(var_6);
198
+ var_8 = wp::cast_float(var_6);
199
+ var_9 = wp::sub(var_p2, var_p1);
200
+ var_10 = wp::length(var_9);
201
+ var_11 = (var_3 <= var_epsilon);
202
+ var_12 = (var_4 <= var_epsilon);
203
+ var_13 = var_11 && var_12;
204
+ if (var_13) {
205
+ // var_14 = wp::vec3(var_7, var_8, var_10);
206
+ goto label0;
207
+ }
208
+ var_15 = (var_3 <= var_epsilon);
209
+ if (var_15) {
210
+ var_16 = wp::cast_float(var_6);
211
+ var_17 = wp::div(var_5, var_4);
212
+ var_18 = wp::cast_float(var_17);
213
+ }
214
+ var_19 = wp::where(var_15, var_16, var_7);
215
+ var_20 = wp::where(var_15, var_18, var_8);
216
+ if (!var_15) {
217
+ var_21 = wp::dot(var_0, var_2);
218
+ var_22 = (var_4 <= var_epsilon);
219
+ if (var_22) {
220
+ var_23 = wp::neg(var_21);
221
+ var_24 = wp::div(var_23, var_3);
222
+ var_26 = wp::clamp(var_24, var_6, var_25);
223
+ var_27 = wp::cast_float(var_6);
224
+ }
225
+ var_28 = wp::where(var_22, var_26, var_19);
226
+ var_29 = wp::where(var_22, var_27, var_20);
227
+ if (!var_22) {
228
+ var_30 = wp::dot(var_0, var_1);
229
+ var_31 = wp::mul(var_3, var_4);
230
+ var_32 = wp::mul(var_30, var_30);
231
+ var_33 = wp::sub(var_31, var_32);
232
+ var_34 = (var_33 != var_6);
233
+ if (var_34) {
234
+ var_35 = wp::mul(var_30, var_5);
235
+ var_36 = wp::mul(var_21, var_4);
236
+ var_37 = wp::sub(var_35, var_36);
237
+ var_38 = wp::div(var_37, var_33);
238
+ var_39 = wp::clamp(var_38, var_6, var_25);
239
+ }
240
+ var_40 = wp::where(var_34, var_39, var_28);
241
+ if (!var_34) {
242
+ }
243
+ var_41 = wp::where(var_34, var_40, var_6);
244
+ var_42 = wp::mul(var_30, var_41);
245
+ var_43 = wp::add(var_42, var_5);
246
+ var_44 = wp::div(var_43, var_4);
247
+ var_45 = (var_44 < var_6);
248
+ if (var_45) {
249
+ var_46 = wp::neg(var_21);
250
+ var_47 = wp::div(var_46, var_3);
251
+ var_48 = wp::clamp(var_47, var_6, var_25);
252
+ }
253
+ var_49 = wp::where(var_45, var_48, var_41);
254
+ var_50 = wp::where(var_45, var_6, var_44);
255
+ if (!var_45) {
256
+ var_51 = (var_50 > var_25);
257
+ if (var_51) {
258
+ var_52 = wp::sub(var_30, var_21);
259
+ var_53 = wp::div(var_52, var_3);
260
+ var_54 = wp::clamp(var_53, var_6, var_25);
261
+ }
262
+ var_55 = wp::where(var_51, var_54, var_49);
263
+ var_56 = wp::where(var_51, var_25, var_50);
264
+ }
265
+ var_57 = wp::where(var_45, var_49, var_55);
266
+ var_58 = wp::where(var_45, var_50, var_56);
267
+ }
268
+ var_59 = wp::where(var_22, var_28, var_57);
269
+ var_60 = wp::where(var_22, var_29, var_58);
270
+ }
271
+ var_61 = wp::where(var_15, var_19, var_59);
272
+ var_62 = wp::where(var_15, var_20, var_60);
273
+ var_63 = wp::sub(var_q1, var_p1);
274
+ var_64 = wp::mul(var_63, var_61);
275
+ var_65 = wp::add(var_p1, var_64);
276
+ var_66 = wp::sub(var_q2, var_p2);
277
+ var_67 = wp::mul(var_66, var_62);
278
+ var_68 = wp::add(var_p2, var_67);
279
+ var_69 = wp::sub(var_68, var_65);
280
+ var_70 = wp::length(var_69);
281
+ // var_71 = wp::vec3(var_61, var_62, var_70);
282
+ goto label1;
283
+ //---------
284
+ // reverse
285
+ label1:;
286
+ adj_71 += adj_ret;
287
+ wp::adj_vec3(var_61, var_62, var_70, adj_61, adj_62, adj_70, adj_71);
288
+ wp::adj_length(var_69, var_70, adj_69, adj_70);
289
+ wp::adj_sub(var_68, var_65, adj_68, adj_65, adj_69);
290
+ wp::adj_add(var_p2, var_67, adj_p2, adj_67, adj_68);
291
+ wp::adj_mul(var_66, var_62, adj_66, adj_62, adj_67);
292
+ wp::adj_sub(var_q2, var_p2, adj_q2, adj_p2, adj_66);
293
+ wp::adj_add(var_p1, var_64, adj_p1, adj_64, adj_65);
294
+ wp::adj_mul(var_63, var_61, adj_63, adj_61, adj_64);
295
+ wp::adj_sub(var_q1, var_p1, adj_q1, adj_p1, adj_63);
296
+ wp::adj_where(var_15, var_20, var_60, adj_15, adj_20, adj_60, adj_62);
297
+ wp::adj_where(var_15, var_19, var_59, adj_15, adj_19, adj_59, adj_61);
298
+ if (!var_15) {
299
+ wp::adj_where(var_22, var_29, var_58, adj_22, adj_29, adj_58, adj_60);
300
+ wp::adj_where(var_22, var_28, var_57, adj_22, adj_28, adj_57, adj_59);
301
+ if (!var_22) {
302
+ wp::adj_where(var_45, var_50, var_56, adj_45, adj_50, adj_56, adj_58);
303
+ wp::adj_where(var_45, var_49, var_55, adj_45, adj_49, adj_55, adj_57);
304
+ if (!var_45) {
305
+ wp::adj_where(var_51, var_25, var_50, adj_51, adj_25, adj_50, adj_56);
306
+ wp::adj_where(var_51, var_54, var_49, adj_51, adj_54, adj_49, adj_55);
307
+ if (var_51) {
308
+ wp::adj_clamp(var_53, var_6, var_25, adj_53, adj_6, adj_25, adj_54);
309
+ wp::adj_div(var_52, var_3, var_53, adj_52, adj_3, adj_53);
310
+ wp::adj_sub(var_30, var_21, adj_30, adj_21, adj_52);
311
+ }
312
+ }
313
+ wp::adj_where(var_45, var_6, var_44, adj_45, adj_6, adj_44, adj_50);
314
+ wp::adj_where(var_45, var_48, var_41, adj_45, adj_48, adj_41, adj_49);
315
+ if (var_45) {
316
+ wp::adj_clamp(var_47, var_6, var_25, adj_47, adj_6, adj_25, adj_48);
317
+ wp::adj_div(var_46, var_3, var_47, adj_46, adj_3, adj_47);
318
+ wp::adj_neg(var_21, adj_21, adj_46);
319
+ }
320
+ wp::adj_div(var_43, var_4, var_44, adj_43, adj_4, adj_44);
321
+ wp::adj_add(var_42, var_5, adj_42, adj_5, adj_43);
322
+ wp::adj_mul(var_30, var_41, adj_30, adj_41, adj_42);
323
+ wp::adj_where(var_34, var_40, var_6, adj_34, adj_40, adj_6, adj_41);
324
+ if (!var_34) {
325
+ }
326
+ wp::adj_where(var_34, var_39, var_28, adj_34, adj_39, adj_28, adj_40);
327
+ if (var_34) {
328
+ wp::adj_clamp(var_38, var_6, var_25, adj_38, adj_6, adj_25, adj_39);
329
+ wp::adj_div(var_37, var_33, var_38, adj_37, adj_33, adj_38);
330
+ wp::adj_sub(var_35, var_36, adj_35, adj_36, adj_37);
331
+ wp::adj_mul(var_21, var_4, adj_21, adj_4, adj_36);
332
+ wp::adj_mul(var_30, var_5, adj_30, adj_5, adj_35);
333
+ }
334
+ wp::adj_sub(var_31, var_32, adj_31, adj_32, adj_33);
335
+ wp::adj_mul(var_30, var_30, adj_30, adj_30, adj_32);
336
+ wp::adj_mul(var_3, var_4, adj_3, adj_4, adj_31);
337
+ wp::adj_dot(var_0, var_1, adj_0, adj_1, adj_30);
338
+ }
339
+ wp::adj_where(var_22, var_27, var_20, adj_22, adj_27, adj_20, adj_29);
340
+ wp::adj_where(var_22, var_26, var_19, adj_22, adj_26, adj_19, adj_28);
341
+ if (var_22) {
342
+ wp::adj_cast_float(var_6, adj_6, adj_27);
343
+ wp::adj_clamp(var_24, var_6, var_25, adj_24, adj_6, adj_25, adj_26);
344
+ wp::adj_div(var_23, var_3, var_24, adj_23, adj_3, adj_24);
345
+ wp::adj_neg(var_21, adj_21, adj_23);
346
+ }
347
+ wp::adj_dot(var_0, var_2, adj_0, adj_2, adj_21);
348
+ }
349
+ wp::adj_where(var_15, var_18, var_8, adj_15, adj_18, adj_8, adj_20);
350
+ wp::adj_where(var_15, var_16, var_7, adj_15, adj_16, adj_7, adj_19);
351
+ if (var_15) {
352
+ wp::adj_cast_float(var_17, adj_17, adj_18);
353
+ wp::adj_div(var_5, var_4, var_17, adj_5, adj_4, adj_17);
354
+ wp::adj_cast_float(var_6, adj_6, adj_16);
355
+ }
356
+ if (var_13) {
357
+ label0:;
358
+ adj_14 += adj_ret;
359
+ wp::adj_vec3(var_7, var_8, var_10, adj_7, adj_8, adj_10, adj_14);
360
+ }
361
+ wp::adj_length(var_9, var_10, adj_9, adj_10);
362
+ wp::adj_sub(var_p2, var_p1, adj_p2, adj_p1, adj_9);
363
+ wp::adj_cast_float(var_6, adj_6, adj_8);
364
+ wp::adj_cast_float(var_6, adj_6, adj_7);
365
+ wp::adj_dot(var_1, var_2, adj_1, adj_2, adj_5);
366
+ wp::adj_dot(var_1, var_1, adj_1, adj_1, adj_4);
367
+ wp::adj_dot(var_0, var_0, adj_0, adj_0, adj_3);
368
+ wp::adj_sub(var_p1, var_p2, adj_p1, adj_p2, adj_2);
369
+ wp::adj_sub(var_q2, var_p2, adj_q2, adj_p2, adj_1);
370
+ wp::adj_sub(var_q1, var_p1, adj_q1, adj_p1, adj_0);
371
+ return;
372
+
373
+ }
374
+
375
+ } // namespace wp
@@ -0,0 +1,339 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ /* Triangle/triangle intersection test routine,
19
+ * by Tomas Moller, 1997.
20
+ * See article "A Fast Triangle-Triangle Intersection Test",
21
+ * Journal of Graphics Tools, 2(2), 1997
22
+ *
23
+ * Updated June 1999: removed the divisions -- a little faster now!
24
+ * Updated October 1999: added {} to CROSS and SUB macros
25
+ *
26
+ * int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
27
+ * float U0[3],float U1[3],float U2[3])
28
+ *
29
+ * parameters: vertices of triangle 1: V0,V1,V2
30
+ * vertices of triangle 2: U0,U1,U2
31
+ * result : returns 1 if the triangles intersect, otherwise 0
32
+ *
33
+ */
34
+
35
+ /*
36
+ Copyright 2020 Tomas Akenine-Möller
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
39
+ documentation files (the "Software"), to deal in the Software without restriction, including without limitation
40
+ the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
41
+ to permit persons to whom the Software is furnished to do so, subject to the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be included in all copies or substantial
44
+ portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
47
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
48
+ OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
49
+ OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50
+ */
51
+
52
+ /* if USE_EPSILON_TEST is true then we do a check:
53
+ if |dv|<EPSILON then dv=0.0;
54
+ else no check is done (which is less robust)
55
+ */
56
+ #define USE_EPSILON_TEST TRUE
57
+ #define EPSILON 0.000001
58
+
59
+
60
+ /* some macros */
61
+ #define CROSS(dest,v1,v2){ \
62
+ dest[0]=v1[1]*v2[2]-v1[2]*v2[1]; \
63
+ dest[1]=v1[2]*v2[0]-v1[0]*v2[2]; \
64
+ dest[2]=v1[0]*v2[1]-v1[1]*v2[0];}
65
+
66
+ #define DOT(v1,v2) (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2])
67
+
68
+ #define SUB(dest,v1,v2){ \
69
+ dest[0]=v1[0]-v2[0]; \
70
+ dest[1]=v1[1]-v2[1]; \
71
+ dest[2]=v1[2]-v2[2];}
72
+
73
+ /* sort so that a<=b */
74
+ #define SORT(a,b) \
75
+ if(a>b) \
76
+ { \
77
+ float c; \
78
+ c=a; \
79
+ a=b; \
80
+ b=c; \
81
+ }
82
+
83
+
84
+ /* this edge to edge test is based on Franlin Antonio's gem:
85
+ "Faster Line Segment Intersection", in Graphics Gems III,
86
+ pp. 199-202 */
87
+ #define EDGE_EDGE_TEST(V0,U0,U1) \
88
+ Bx=U0[i0]-U1[i0]; \
89
+ By=U0[i1]-U1[i1]; \
90
+ Cx=V0[i0]-U0[i0]; \
91
+ Cy=V0[i1]-U0[i1]; \
92
+ f=Ay*Bx-Ax*By; \
93
+ d=By*Cx-Bx*Cy; \
94
+ if((f>0 && d>=0 && d<=f) || (f<0 && d<=0 && d>=f)) \
95
+ { \
96
+ e=Ax*Cy-Ay*Cx; \
97
+ if(f>0) \
98
+ { \
99
+ if(e>=0 && e<=f) return 1; \
100
+ } \
101
+ else \
102
+ { \
103
+ if(e<=0 && e>=f) return 1; \
104
+ } \
105
+ }
106
+
107
+ #define EDGE_AGAINST_TRI_EDGES(V0,V1,U0,U1,U2) \
108
+ { \
109
+ float Ax,Ay,Bx,By,Cx,Cy,e,d,f; \
110
+ Ax=V1[i0]-V0[i0]; \
111
+ Ay=V1[i1]-V0[i1]; \
112
+ /* test edge U0,U1 against V0,V1 */ \
113
+ EDGE_EDGE_TEST(V0,U0,U1); \
114
+ /* test edge U1,U2 against V0,V1 */ \
115
+ EDGE_EDGE_TEST(V0,U1,U2); \
116
+ /* test edge U2,U1 against V0,V1 */ \
117
+ EDGE_EDGE_TEST(V0,U2,U0); \
118
+ }
119
+
120
+ #define POINT_IN_TRI(V0,U0,U1,U2) \
121
+ { \
122
+ float a,b,c,d0,d1,d2; \
123
+ /* is T1 completely inside T2? */ \
124
+ /* check if V0 is inside tri(U0,U1,U2) */ \
125
+ a=U1[i1]-U0[i1]; \
126
+ b=-(U1[i0]-U0[i0]); \
127
+ c=-a*U0[i0]-b*U0[i1]; \
128
+ d0=a*V0[i0]+b*V0[i1]+c; \
129
+ \
130
+ a=U2[i1]-U1[i1]; \
131
+ b=-(U2[i0]-U1[i0]); \
132
+ c=-a*U1[i0]-b*U1[i1]; \
133
+ d1=a*V0[i0]+b*V0[i1]+c; \
134
+ \
135
+ a=U0[i1]-U2[i1]; \
136
+ b=-(U0[i0]-U2[i0]); \
137
+ c=-a*U2[i0]-b*U2[i1]; \
138
+ d2=a*V0[i0]+b*V0[i1]+c; \
139
+ if(d0*d1>0.0) \
140
+ { \
141
+ if(d0*d2>0.0) return 1; \
142
+ } \
143
+ }
144
+
145
+ CUDA_CALLABLE inline int coplanar_tri_tri(float N[3],float V0[3],float V1[3],float V2[3],
146
+ float U0[3],float U1[3],float U2[3])
147
+ {
148
+ float A[3];
149
+ short i0,i1;
150
+ /* first project onto an axis-aligned plane, that maximizes the area */
151
+ /* of the triangles, compute indices: i0,i1. */
152
+ A[0]=fabsf(N[0]);
153
+ A[1]=fabsf(N[1]);
154
+ A[2]=fabsf(N[2]);
155
+ if(A[0]>A[1])
156
+ {
157
+ if(A[0]>A[2])
158
+ {
159
+ i0=1; /* A[0] is greatest */
160
+ i1=2;
161
+ }
162
+ else
163
+ {
164
+ i0=0; /* A[2] is greatest */
165
+ i1=1;
166
+ }
167
+ }
168
+ else /* A[0]<=A[1] */
169
+ {
170
+ if(A[2]>A[1])
171
+ {
172
+ i0=0; /* A[2] is greatest */
173
+ i1=1;
174
+ }
175
+ else
176
+ {
177
+ i0=0; /* A[1] is greatest */
178
+ i1=2;
179
+ }
180
+ }
181
+
182
+ /* test all edges of triangle 1 against the edges of triangle 2 */
183
+ EDGE_AGAINST_TRI_EDGES(V0,V1,U0,U1,U2);
184
+ EDGE_AGAINST_TRI_EDGES(V1,V2,U0,U1,U2);
185
+ EDGE_AGAINST_TRI_EDGES(V2,V0,U0,U1,U2);
186
+
187
+ /* finally, test if tri1 is totally contained in tri2 or vice versa */
188
+ POINT_IN_TRI(V0,U0,U1,U2);
189
+ POINT_IN_TRI(U0,V0,V1,V2);
190
+
191
+ return 0;
192
+ }
193
+
194
+
195
+
196
+ #define NEWCOMPUTE_INTERVALS(VV0,VV1,VV2,D0,D1,D2,D0D1,D0D2,A,B,C,X0,X1) \
197
+ { \
198
+ if(D0D1>0.0f) \
199
+ { \
200
+ /* here we know that D0D2<=0.0 */ \
201
+ /* that is D0, D1 are on the same side, D2 on the other or on the plane */ \
202
+ A=VV2; B=(VV0-VV2)*D2; C=(VV1-VV2)*D2; X0=D2-D0; X1=D2-D1; \
203
+ } \
204
+ else if(D0D2>0.0f)\
205
+ { \
206
+ /* here we know that d0d1<=0.0 */ \
207
+ A=VV1; B=(VV0-VV1)*D1; C=(VV2-VV1)*D1; X0=D1-D0; X1=D1-D2; \
208
+ } \
209
+ else if(D1*D2>0.0f || D0!=0.0f) \
210
+ { \
211
+ /* here we know that d0d1<=0.0 or that D0!=0.0 */ \
212
+ A=VV0; B=(VV1-VV0)*D0; C=(VV2-VV0)*D0; X0=D0-D1; X1=D0-D2; \
213
+ } \
214
+ else if(D1!=0.0f) \
215
+ { \
216
+ A=VV1; B=(VV0-VV1)*D1; C=(VV2-VV1)*D1; X0=D1-D0; X1=D1-D2; \
217
+ } \
218
+ else if(D2!=0.0f) \
219
+ { \
220
+ A=VV2; B=(VV0-VV2)*D2; C=(VV1-VV2)*D2; X0=D2-D0; X1=D2-D1; \
221
+ } \
222
+ else \
223
+ { \
224
+ /* triangles are coplanar */ \
225
+ return coplanar_tri_tri(N1,V0,V1,V2,U0,U1,U2); \
226
+ } \
227
+ }
228
+
229
+
230
+
231
+ CUDA_CALLABLE inline int NoDivTriTriIsect(float V0[3],float V1[3],float V2[3],
232
+ float U0[3],float U1[3],float U2[3])
233
+ {
234
+ float E1[3],E2[3];
235
+ float N1[3],N2[3],d1,d2;
236
+ float du0,du1,du2,dv0,dv1,dv2;
237
+ float D[3];
238
+ float isect1[2], isect2[2];
239
+ float du0du1,du0du2,dv0dv1,dv0dv2;
240
+ short index;
241
+ float vp0,vp1,vp2;
242
+ float up0,up1,up2;
243
+ float bb,cc,max;
244
+
245
+ /* compute plane equation of triangle(V0,V1,V2) */
246
+ SUB(E1,V1,V0);
247
+ SUB(E2,V2,V0);
248
+ CROSS(N1,E1,E2);
249
+ d1=-DOT(N1,V0);
250
+ /* plane equation 1: N1.X+d1=0 */
251
+
252
+ /* put U0,U1,U2 into plane equation 1 to compute signed distances to the plane*/
253
+ du0=DOT(N1,U0)+d1;
254
+ du1=DOT(N1,U1)+d1;
255
+ du2=DOT(N1,U2)+d1;
256
+
257
+ /* coplanarity robustness check */
258
+ #if USE_EPSILON_TEST==TRUE
259
+ if(fabsf(du0)<EPSILON) du0=0.0;
260
+ if(fabsf(du1)<EPSILON) du1=0.0;
261
+ if(fabsf(du2)<EPSILON) du2=0.0;
262
+ #endif
263
+ du0du1=du0*du1;
264
+ du0du2=du0*du2;
265
+
266
+ if(du0du1>0.0f && du0du2>0.0f) /* same sign on all of them + not equal 0 ? */
267
+ return 0; /* no intersection occurs */
268
+
269
+ /* compute plane of triangle (U0,U1,U2) */
270
+ SUB(E1,U1,U0);
271
+ SUB(E2,U2,U0);
272
+ CROSS(N2,E1,E2);
273
+ d2=-DOT(N2,U0);
274
+ /* plane equation 2: N2.X+d2=0 */
275
+
276
+ /* put V0,V1,V2 into plane equation 2 */
277
+ dv0=DOT(N2,V0)+d2;
278
+ dv1=DOT(N2,V1)+d2;
279
+ dv2=DOT(N2,V2)+d2;
280
+
281
+ #if USE_EPSILON_TEST==TRUE
282
+ if(fabsf(dv0)<EPSILON) dv0=0.0;
283
+ if(fabsf(dv1)<EPSILON) dv1=0.0;
284
+ if(fabsf(dv2)<EPSILON) dv2=0.0;
285
+ #endif
286
+
287
+ dv0dv1=dv0*dv1;
288
+ dv0dv2=dv0*dv2;
289
+
290
+ if(dv0dv1>0.0f && dv0dv2>0.0f) /* same sign on all of them + not equal 0 ? */
291
+ return 0; /* no intersection occurs */
292
+
293
+ /* compute direction of intersection line */
294
+ CROSS(D,N1,N2);
295
+
296
+ /* compute and index to the largest component of D */
297
+ max=fabsf(D[0]);
298
+ index=0;
299
+ bb=fabsf(D[1]);
300
+ cc=fabsf(D[2]);
301
+ if(bb>max) max=bb,index=1;
302
+ if(cc>max) max=cc,index=2;
303
+
304
+ /* this is the simplified projection onto L*/
305
+ vp0=V0[index];
306
+ vp1=V1[index];
307
+ vp2=V2[index];
308
+
309
+ up0=U0[index];
310
+ up1=U1[index];
311
+ up2=U2[index];
312
+
313
+ /* compute interval for triangle 1 */
314
+ float a,b,c,x0,x1;
315
+ NEWCOMPUTE_INTERVALS(vp0,vp1,vp2,dv0,dv1,dv2,dv0dv1,dv0dv2,a,b,c,x0,x1);
316
+
317
+ /* compute interval for triangle 2 */
318
+ float d,e,f,y0,y1;
319
+ NEWCOMPUTE_INTERVALS(up0,up1,up2,du0,du1,du2,du0du1,du0du2,d,e,f,y0,y1);
320
+
321
+ float xx,yy,xxyy,tmp;
322
+ xx=x0*x1;
323
+ yy=y0*y1;
324
+ xxyy=xx*yy;
325
+
326
+ tmp=a*xxyy;
327
+ isect1[0]=tmp+b*x1*yy;
328
+ isect1[1]=tmp+c*x0*yy;
329
+
330
+ tmp=d*xxyy;
331
+ isect2[0]=tmp+e*xx*y1;
332
+ isect2[1]=tmp+f*xx*y0;
333
+
334
+ SORT(isect1[0],isect1[1]);
335
+ SORT(isect2[0],isect2[1]);
336
+
337
+ if(isect1[1]<isect2[0] || isect2[1]<isect1[0]) return 0;
338
+ return 1;
339
+ }