warp-lang 0.10.1__py3-none-win_amd64.whl → 0.11.0__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 (300) hide show
  1. warp/__init__.py +10 -4
  2. warp/__init__.pyi +1 -0
  3. warp/bin/warp-clang.dll +0 -0
  4. warp/bin/warp.dll +0 -0
  5. warp/build.py +5 -3
  6. warp/build_dll.py +29 -9
  7. warp/builtins.py +868 -507
  8. warp/codegen.py +1074 -638
  9. warp/config.py +3 -3
  10. warp/constants.py +6 -0
  11. warp/context.py +715 -222
  12. warp/fabric.py +326 -0
  13. warp/fem/__init__.py +27 -0
  14. warp/fem/cache.py +389 -0
  15. warp/fem/dirichlet.py +181 -0
  16. warp/fem/domain.py +263 -0
  17. warp/fem/field/__init__.py +101 -0
  18. warp/fem/field/field.py +149 -0
  19. warp/fem/field/nodal_field.py +299 -0
  20. warp/fem/field/restriction.py +21 -0
  21. warp/fem/field/test.py +181 -0
  22. warp/fem/field/trial.py +183 -0
  23. warp/fem/geometry/__init__.py +19 -0
  24. warp/fem/geometry/closest_point.py +70 -0
  25. warp/fem/geometry/deformed_geometry.py +271 -0
  26. warp/fem/geometry/element.py +744 -0
  27. warp/fem/geometry/geometry.py +186 -0
  28. warp/fem/geometry/grid_2d.py +373 -0
  29. warp/fem/geometry/grid_3d.py +435 -0
  30. warp/fem/geometry/hexmesh.py +953 -0
  31. warp/fem/geometry/partition.py +376 -0
  32. warp/fem/geometry/quadmesh_2d.py +532 -0
  33. warp/fem/geometry/tetmesh.py +840 -0
  34. warp/fem/geometry/trimesh_2d.py +577 -0
  35. warp/fem/integrate.py +1616 -0
  36. warp/fem/operator.py +191 -0
  37. warp/fem/polynomial.py +213 -0
  38. warp/fem/quadrature/__init__.py +2 -0
  39. warp/fem/quadrature/pic_quadrature.py +245 -0
  40. warp/fem/quadrature/quadrature.py +294 -0
  41. warp/fem/space/__init__.py +292 -0
  42. warp/fem/space/basis_space.py +489 -0
  43. warp/fem/space/collocated_function_space.py +105 -0
  44. warp/fem/space/dof_mapper.py +236 -0
  45. warp/fem/space/function_space.py +145 -0
  46. warp/fem/space/grid_2d_function_space.py +267 -0
  47. warp/fem/space/grid_3d_function_space.py +306 -0
  48. warp/fem/space/hexmesh_function_space.py +352 -0
  49. warp/fem/space/partition.py +350 -0
  50. warp/fem/space/quadmesh_2d_function_space.py +369 -0
  51. warp/fem/space/restriction.py +160 -0
  52. warp/fem/space/shape/__init__.py +15 -0
  53. warp/fem/space/shape/cube_shape_function.py +738 -0
  54. warp/fem/space/shape/shape_function.py +103 -0
  55. warp/fem/space/shape/square_shape_function.py +611 -0
  56. warp/fem/space/shape/tet_shape_function.py +567 -0
  57. warp/fem/space/shape/triangle_shape_function.py +429 -0
  58. warp/fem/space/tetmesh_function_space.py +292 -0
  59. warp/fem/space/topology.py +295 -0
  60. warp/fem/space/trimesh_2d_function_space.py +221 -0
  61. warp/fem/types.py +77 -0
  62. warp/fem/utils.py +495 -0
  63. warp/native/array.h +147 -44
  64. warp/native/builtin.h +122 -149
  65. warp/native/bvh.cpp +73 -325
  66. warp/native/bvh.cu +406 -23
  67. warp/native/bvh.h +34 -43
  68. warp/native/clang/clang.cpp +13 -8
  69. warp/native/crt.h +2 -0
  70. warp/native/cuda_crt.h +5 -0
  71. warp/native/cuda_util.cpp +15 -3
  72. warp/native/cuda_util.h +3 -1
  73. warp/native/cutlass/tools/library/scripts/conv2d_operation.py +463 -0
  74. warp/native/cutlass/tools/library/scripts/conv3d_operation.py +321 -0
  75. warp/native/cutlass/tools/library/scripts/gemm_operation.py +988 -0
  76. warp/native/cutlass/tools/library/scripts/generator.py +4625 -0
  77. warp/native/cutlass/tools/library/scripts/library.py +799 -0
  78. warp/native/cutlass/tools/library/scripts/manifest.py +402 -0
  79. warp/native/cutlass/tools/library/scripts/pycutlass/docs/source/conf.py +96 -0
  80. warp/native/cutlass/tools/library/scripts/pycutlass/profile/conv/conv2d_f16_sm80.py +106 -0
  81. warp/native/cutlass/tools/library/scripts/pycutlass/profile/gemm/gemm_f32_sm80.py +91 -0
  82. warp/native/cutlass/tools/library/scripts/pycutlass/setup.py +80 -0
  83. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/__init__.py +48 -0
  84. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/arguments.py +118 -0
  85. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/c_types.py +241 -0
  86. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/compiler.py +432 -0
  87. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/conv2d_operation.py +631 -0
  88. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/epilogue.py +1026 -0
  89. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/frontend.py +104 -0
  90. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/gemm_operation.py +1276 -0
  91. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/library.py +744 -0
  92. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/memory_manager.py +74 -0
  93. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/operation.py +110 -0
  94. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/parser.py +619 -0
  95. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/reduction_operation.py +398 -0
  96. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/tensor_ref.py +70 -0
  97. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/__init__.py +4 -0
  98. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/conv2d_testbed.py +646 -0
  99. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_grouped_testbed.py +235 -0
  100. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_testbed.py +557 -0
  101. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/profiler.py +70 -0
  102. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/type_hint.py +39 -0
  103. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/__init__.py +1 -0
  104. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/device.py +76 -0
  105. warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/reference_model.py +255 -0
  106. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/__init__.py +0 -0
  107. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +201 -0
  108. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +177 -0
  109. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +98 -0
  110. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +95 -0
  111. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_few_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +163 -0
  112. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_fixed_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +187 -0
  113. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +309 -0
  114. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +54 -0
  115. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
  116. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
  117. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_strided_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +253 -0
  118. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +97 -0
  119. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +242 -0
  120. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
  121. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
  122. warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/run_all_tests.py +10 -0
  123. warp/native/cutlass/tools/library/scripts/pycutlass/test/frontend/test_frontend.py +146 -0
  124. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/__init__.py +0 -0
  125. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_bf16_sm80.py +96 -0
  126. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f16_sm80.py +447 -0
  127. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f32_sm80.py +146 -0
  128. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f64_sm80.py +102 -0
  129. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_grouped_sm80.py +203 -0
  130. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_s8_sm80.py +229 -0
  131. warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/run_all_tests.py +9 -0
  132. warp/native/cutlass/tools/library/scripts/pycutlass/test/unit/test_sm80.py +453 -0
  133. warp/native/cutlass/tools/library/scripts/rank_2k_operation.py +398 -0
  134. warp/native/cutlass/tools/library/scripts/rank_k_operation.py +387 -0
  135. warp/native/cutlass/tools/library/scripts/rt.py +796 -0
  136. warp/native/cutlass/tools/library/scripts/symm_operation.py +400 -0
  137. warp/native/cutlass/tools/library/scripts/trmm_operation.py +407 -0
  138. warp/native/cutlass_gemm.cu +5 -3
  139. warp/native/exports.h +1240 -952
  140. warp/native/fabric.h +228 -0
  141. warp/native/hashgrid.cpp +4 -4
  142. warp/native/hashgrid.h +22 -2
  143. warp/native/intersect.h +22 -7
  144. warp/native/intersect_adj.h +8 -8
  145. warp/native/intersect_tri.h +1 -1
  146. warp/native/marching.cu +157 -161
  147. warp/native/mat.h +80 -19
  148. warp/native/matnn.h +2 -2
  149. warp/native/mesh.cpp +33 -108
  150. warp/native/mesh.cu +114 -23
  151. warp/native/mesh.h +446 -46
  152. warp/native/noise.h +272 -329
  153. warp/native/quat.h +51 -8
  154. warp/native/rand.h +45 -35
  155. warp/native/range.h +6 -2
  156. warp/native/reduce.cpp +1 -1
  157. warp/native/reduce.cu +10 -12
  158. warp/native/runlength_encode.cu +6 -10
  159. warp/native/scan.cu +8 -11
  160. warp/native/sparse.cpp +4 -4
  161. warp/native/sparse.cu +164 -154
  162. warp/native/spatial.h +2 -2
  163. warp/native/temp_buffer.h +14 -30
  164. warp/native/vec.h +107 -23
  165. warp/native/volume.h +120 -0
  166. warp/native/warp.cpp +560 -30
  167. warp/native/warp.cu +431 -44
  168. warp/native/warp.h +13 -4
  169. warp/optim/__init__.py +1 -0
  170. warp/optim/linear.py +922 -0
  171. warp/optim/sgd.py +92 -0
  172. warp/render/render_opengl.py +335 -119
  173. warp/render/render_usd.py +11 -11
  174. warp/sim/__init__.py +2 -2
  175. warp/sim/articulation.py +385 -185
  176. warp/sim/collide.py +8 -0
  177. warp/sim/import_mjcf.py +297 -106
  178. warp/sim/import_urdf.py +389 -210
  179. warp/sim/import_usd.py +198 -97
  180. warp/sim/inertia.py +17 -18
  181. warp/sim/integrator_euler.py +14 -8
  182. warp/sim/integrator_xpbd.py +158 -16
  183. warp/sim/model.py +795 -291
  184. warp/sim/render.py +3 -3
  185. warp/sim/utils.py +3 -0
  186. warp/sparse.py +640 -150
  187. warp/stubs.py +606 -267
  188. warp/tape.py +61 -10
  189. warp/tests/__main__.py +3 -6
  190. warp/tests/assets/curlnoise_golden.npy +0 -0
  191. warp/tests/assets/pnoise_golden.npy +0 -0
  192. warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
  193. warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
  194. warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
  195. warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
  196. warp/tests/aux_test_unresolved_func.py +14 -0
  197. warp/tests/aux_test_unresolved_symbol.py +14 -0
  198. warp/tests/disabled_kinematics.py +239 -0
  199. warp/tests/run_coverage_serial.py +31 -0
  200. warp/tests/test_adam.py +103 -106
  201. warp/tests/test_arithmetic.py +128 -74
  202. warp/tests/test_array.py +212 -97
  203. warp/tests/test_array_reduce.py +57 -23
  204. warp/tests/test_atomic.py +64 -28
  205. warp/tests/test_bool.py +99 -0
  206. warp/tests/test_builtins_resolution.py +1292 -0
  207. warp/tests/test_bvh.py +42 -18
  208. warp/tests/test_closest_point_edge_edge.py +54 -57
  209. warp/tests/test_codegen.py +208 -130
  210. warp/tests/test_compile_consts.py +28 -20
  211. warp/tests/test_conditional.py +108 -24
  212. warp/tests/test_copy.py +10 -12
  213. warp/tests/test_ctypes.py +112 -88
  214. warp/tests/test_dense.py +21 -14
  215. warp/tests/test_devices.py +98 -0
  216. warp/tests/test_dlpack.py +75 -75
  217. warp/tests/test_examples.py +277 -0
  218. warp/tests/test_fabricarray.py +955 -0
  219. warp/tests/test_fast_math.py +15 -11
  220. warp/tests/test_fem.py +1271 -0
  221. warp/tests/test_fp16.py +53 -19
  222. warp/tests/test_func.py +187 -86
  223. warp/tests/test_generics.py +194 -49
  224. warp/tests/test_grad.py +178 -109
  225. warp/tests/test_grad_customs.py +176 -0
  226. warp/tests/test_hash_grid.py +52 -37
  227. warp/tests/test_import.py +10 -23
  228. warp/tests/test_indexedarray.py +32 -31
  229. warp/tests/test_intersect.py +18 -9
  230. warp/tests/test_large.py +141 -0
  231. warp/tests/test_launch.py +14 -41
  232. warp/tests/test_lerp.py +64 -65
  233. warp/tests/test_linear_solvers.py +154 -0
  234. warp/tests/test_lvalue.py +493 -0
  235. warp/tests/test_marching_cubes.py +12 -13
  236. warp/tests/test_mat.py +517 -2898
  237. warp/tests/test_mat_lite.py +115 -0
  238. warp/tests/test_mat_scalar_ops.py +2889 -0
  239. warp/tests/test_math.py +103 -9
  240. warp/tests/test_matmul.py +305 -69
  241. warp/tests/test_matmul_lite.py +410 -0
  242. warp/tests/test_mesh.py +71 -14
  243. warp/tests/test_mesh_query_aabb.py +41 -25
  244. warp/tests/test_mesh_query_point.py +140 -22
  245. warp/tests/test_mesh_query_ray.py +39 -22
  246. warp/tests/test_mlp.py +30 -22
  247. warp/tests/test_model.py +92 -89
  248. warp/tests/test_modules_lite.py +39 -0
  249. warp/tests/test_multigpu.py +88 -114
  250. warp/tests/test_noise.py +12 -11
  251. warp/tests/test_operators.py +16 -20
  252. warp/tests/test_options.py +11 -11
  253. warp/tests/test_pinned.py +17 -18
  254. warp/tests/test_print.py +32 -11
  255. warp/tests/test_quat.py +275 -129
  256. warp/tests/test_rand.py +18 -16
  257. warp/tests/test_reload.py +38 -34
  258. warp/tests/test_rounding.py +50 -43
  259. warp/tests/test_runlength_encode.py +168 -20
  260. warp/tests/test_smoothstep.py +9 -11
  261. warp/tests/test_snippet.py +143 -0
  262. warp/tests/test_sparse.py +261 -63
  263. warp/tests/test_spatial.py +276 -243
  264. warp/tests/test_streams.py +110 -85
  265. warp/tests/test_struct.py +268 -63
  266. warp/tests/test_tape.py +39 -21
  267. warp/tests/test_torch.py +118 -89
  268. warp/tests/test_transient_module.py +12 -13
  269. warp/tests/test_types.py +614 -0
  270. warp/tests/test_utils.py +494 -0
  271. warp/tests/test_vec.py +354 -2050
  272. warp/tests/test_vec_lite.py +73 -0
  273. warp/tests/test_vec_scalar_ops.py +2099 -0
  274. warp/tests/test_volume.py +457 -293
  275. warp/tests/test_volume_write.py +124 -134
  276. warp/tests/unittest_serial.py +35 -0
  277. warp/tests/unittest_suites.py +341 -0
  278. warp/tests/unittest_utils.py +568 -0
  279. warp/tests/unused_test_misc.py +71 -0
  280. warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
  281. warp/thirdparty/appdirs.py +36 -45
  282. warp/thirdparty/unittest_parallel.py +549 -0
  283. warp/torch.py +9 -6
  284. warp/types.py +1089 -366
  285. warp/utils.py +93 -387
  286. warp_lang-0.11.0.dist-info/METADATA +238 -0
  287. warp_lang-0.11.0.dist-info/RECORD +332 -0
  288. {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/WHEEL +1 -1
  289. warp/tests/test_all.py +0 -219
  290. warp/tests/test_array_scan.py +0 -60
  291. warp/tests/test_base.py +0 -208
  292. warp/tests/test_unresolved_func.py +0 -7
  293. warp/tests/test_unresolved_symbol.py +0 -7
  294. warp_lang-0.10.1.dist-info/METADATA +0 -21
  295. warp_lang-0.10.1.dist-info/RECORD +0 -188
  296. /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
  297. /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
  298. /warp/tests/{test_square.py → aux_test_square.py} +0 -0
  299. {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/LICENSE.md +0 -0
  300. {warp_lang-0.10.1.dist-info → warp_lang-0.11.0.dist-info}/top_level.txt +0 -0
warp/tests/test_all.py DELETED
@@ -1,219 +0,0 @@
1
- # Copyright (c) 2022 NVIDIA CORPORATION. All rights reserved.
2
- # NVIDIA CORPORATION and its licensors retain all intellectual property
3
- # and proprietary rights in and to this software, related documentation
4
- # and any modifications thereto. Any use, reproduction, disclosure or
5
- # distribution of this software and related documentation without an express
6
- # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
-
8
- import unittest
9
- import os
10
-
11
- import warp as wp
12
-
13
- # Uncomment to run the tests on all devices
14
- # import warp.tests.test_base
15
- # warp.tests.test_base.test_mode = "all"
16
-
17
- from warp.tests.test_base import get_test_devices
18
-
19
- import warp.tests.test_codegen
20
- import warp.tests.test_mesh_query_aabb
21
- import warp.tests.test_mesh_query_point
22
- import warp.tests.test_mesh_query_ray
23
- import warp.tests.test_bvh
24
- import warp.tests.test_conditional
25
- import warp.tests.test_operators
26
- import warp.tests.test_rounding
27
- import warp.tests.test_hash_grid
28
- import warp.tests.test_ctypes
29
- import warp.tests.test_rand
30
- import warp.tests.test_noise
31
- import warp.tests.test_tape
32
- import warp.tests.test_compile_consts
33
- import warp.tests.test_volume
34
- import warp.tests.test_mlp
35
- import warp.tests.test_grad
36
- import warp.tests.test_intersect
37
- import warp.tests.test_array
38
- import warp.tests.test_launch
39
- import warp.tests.test_import
40
- import warp.tests.test_func
41
- import warp.tests.test_fp16
42
- import warp.tests.test_reload
43
- import warp.tests.test_struct
44
- import warp.tests.test_closest_point_edge_edge
45
- import warp.tests.test_multigpu
46
- import warp.tests.test_quat
47
- import warp.tests.test_atomic
48
- import warp.tests.test_adam
49
- import warp.tests.test_transient_module
50
- import warp.tests.test_lerp
51
- import warp.tests.test_smoothstep
52
- import warp.tests.test_model
53
- import warp.tests.test_fast_math
54
- import warp.tests.test_streams
55
- import warp.tests.test_torch
56
- import warp.tests.test_pinned
57
- import warp.tests.test_matmul
58
- import warp.tests.test_options
59
- import warp.tests.test_dlpack
60
- import warp.tests.test_vec
61
- import warp.tests.test_mat
62
- import warp.tests.test_arithmetic
63
- import warp.tests.test_spatial
64
- import warp.tests.test_sparse
65
- import warp.tests.test_math
66
- import warp.tests.test_generics
67
- import warp.tests.test_indexedarray
68
- import warp.tests.test_copy
69
- import warp.tests.test_mesh
70
-
71
-
72
- def register_tests(parent):
73
- tests = []
74
-
75
- tests.append(warp.tests.test_codegen.register(parent))
76
- tests.append(warp.tests.test_mesh_query_aabb.register(parent))
77
- tests.append(warp.tests.test_mesh_query_point.register(parent))
78
- tests.append(warp.tests.test_mesh_query_ray.register(parent))
79
- tests.append(warp.tests.test_bvh.register(parent))
80
- tests.append(warp.tests.test_conditional.register(parent))
81
- tests.append(warp.tests.test_operators.register(parent))
82
- tests.append(warp.tests.test_rounding.register(parent))
83
- tests.append(warp.tests.test_hash_grid.register(parent))
84
- tests.append(warp.tests.test_ctypes.register(parent))
85
- tests.append(warp.tests.test_rand.register(parent))
86
- tests.append(warp.tests.test_noise.register(parent))
87
- tests.append(warp.tests.test_tape.register(parent))
88
- tests.append(warp.tests.test_compile_consts.register(parent))
89
- tests.append(warp.tests.test_volume.register(parent))
90
- tests.append(warp.tests.test_mlp.register(parent))
91
- tests.append(warp.tests.test_grad.register(parent))
92
- tests.append(warp.tests.test_intersect.register(parent))
93
- tests.append(warp.tests.test_array.register(parent))
94
- tests.append(warp.tests.test_launch.register(parent))
95
- tests.append(warp.tests.test_import.register(parent))
96
- tests.append(warp.tests.test_func.register(parent))
97
- tests.append(warp.tests.test_fp16.register(parent))
98
- tests.append(warp.tests.test_reload.register(parent))
99
- tests.append(warp.tests.test_struct.register(parent))
100
- tests.append(warp.tests.test_closest_point_edge_edge.register(parent))
101
- tests.append(warp.tests.test_multigpu.register(parent))
102
- tests.append(warp.tests.test_quat.register(parent))
103
- tests.append(warp.tests.test_atomic.register(parent))
104
- tests.append(warp.tests.test_adam.register(parent))
105
- tests.append(warp.tests.test_transient_module.register(parent))
106
- tests.append(warp.tests.test_lerp.register(parent))
107
- tests.append(warp.tests.test_smoothstep.register(parent))
108
- tests.append(warp.tests.test_model.register(parent))
109
- tests.append(warp.tests.test_fast_math.register(parent))
110
- tests.append(warp.tests.test_streams.register(parent))
111
- tests.append(warp.tests.test_torch.register(parent))
112
- tests.append(warp.tests.test_pinned.register(parent))
113
- tests.append(warp.tests.test_matmul.register(parent))
114
- tests.append(warp.tests.test_options.register(parent))
115
- tests.append(warp.tests.test_dlpack.register(parent))
116
- tests.append(warp.tests.test_vec.register(parent))
117
- tests.append(warp.tests.test_mat.register(parent))
118
- tests.append(warp.tests.test_arithmetic.register(parent))
119
- tests.append(warp.tests.test_spatial.register(parent))
120
- tests.append(warp.tests.test_sparse.register(parent))
121
- tests.append(warp.tests.test_math.register(parent))
122
- tests.append(warp.tests.test_generics.register(parent))
123
- tests.append(warp.tests.test_indexedarray.register(parent))
124
- tests.append(warp.tests.test_copy.register(parent))
125
- tests.append(warp.tests.test_mesh.register(parent))
126
-
127
- return tests
128
-
129
-
130
- class TeamCityTestResult(unittest.TextTestResult):
131
- """This class will report each test result to TeamCity"""
132
-
133
- def __init__(self, stream, descriptions, verbosity):
134
- super(TeamCityTestResult, self).__init__(stream, descriptions, verbosity)
135
-
136
- def addSuccess(self, test):
137
- super(TeamCityTestResult, self).addSuccess(test)
138
- self.reportSuccess(test)
139
-
140
- def addError(self, test, err):
141
- super(TeamCityTestResult, self).addError(test, err)
142
- self.reportFailure(test)
143
-
144
- def addFailure(self, test, err):
145
- super(TeamCityTestResult, self).addFailure(test, err)
146
- self.reportFailure(test)
147
-
148
- def addSkip(self, test, reason):
149
- super(TeamCityTestResult, self).addSkip(test, reason)
150
-
151
- def addExpectedFailure(self, test, err):
152
- super(TeamCityTestResult, self).addExpectedFailure(test, err)
153
- self.reportSuccess(test)
154
-
155
- def addUnexpectedSuccess(self, test):
156
- super(TeamCityTestResult, self).addUnexpectedSuccess(test)
157
- self.reportFailure(test)
158
-
159
- def reportSuccess(self, test):
160
- test_id = test.id()
161
- print(f"##teamcity[testStarted name='{test_id}']")
162
- print(f"##teamcity[testFinished name='{test_id}']")
163
-
164
- def reportFailure(self, test):
165
- test_id = test.id()
166
- print(f"##teamcity[testStarted name='{test_id}']")
167
- print(f"##teamcity[testFailed name='{test_id}']")
168
- print(f"##teamcity[testFinished name='{test_id}']")
169
-
170
-
171
- class TeamCityTestRunner(unittest.TextTestRunner):
172
- """Test runner that will report test results to TeamCity if running in TeamCity"""
173
-
174
- def __init__(self, **kwargs):
175
- self.running_in_teamcity = os.environ.get("TEAMCITY_VERSION") is not None
176
- if self.running_in_teamcity:
177
- kwargs["resultclass"] = TeamCityTestResult
178
- super(TeamCityTestRunner, self).__init__(**kwargs)
179
-
180
- def run(self, test, name):
181
- if self.running_in_teamcity:
182
- print(f"##teamcity[testSuiteStarted name='{name}']")
183
-
184
- result = super(TeamCityTestRunner, self).run(test)
185
-
186
- if self.running_in_teamcity:
187
- print(f"##teamcity[testSuiteFinished name='{name}']")
188
- if not result.wasSuccessful():
189
- print(f"##teamcity[buildStatus status='FAILURE']")
190
-
191
- return result
192
-
193
-
194
- def run():
195
- test_suite = unittest.TestSuite()
196
-
197
- tests = register_tests(unittest.TestCase)
198
-
199
- for test in tests:
200
- test_suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(test))
201
-
202
- # force rebuild of all kernels
203
- wp.build.clear_kernel_cache()
204
-
205
- # load all modules
206
- for device in get_test_devices():
207
- wp.force_load(device)
208
-
209
- runner = TeamCityTestRunner(verbosity=2, failfast=False)
210
- ret = not runner.run(test_suite, "WarpTests").wasSuccessful()
211
- return ret
212
-
213
-
214
- if __name__ == "__main__":
215
- ret = run()
216
-
217
- import sys
218
-
219
- sys.exit(ret)
@@ -1,60 +0,0 @@
1
- import sys
2
- import os
3
-
4
- sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
5
-
6
- import warp as wp
7
- import numpy as np
8
-
9
- wp.config.mode = "release"
10
- wp.config.verbose = True
11
- wp.config.verify_cuda = True
12
-
13
- wp.init()
14
-
15
- n = 100000
16
- num_runs = 16
17
-
18
-
19
- def test_for_type(dtype, device):
20
- dtype_str = dtype.__name__
21
- if dtype == int:
22
- values = np.random.randint(-1e6, 1e6, n, dtype=dtype)
23
- else:
24
- values = np.random.uniform(-1, 1, n)
25
-
26
- results_ref = np.cumsum(values)
27
-
28
- in_values = wp.array(values, dtype=dtype, device=device)
29
- out_values_inc = wp.zeros(len(values), dtype=dtype, device=device)
30
- out_values_exc = wp.zeros(len(values), dtype=dtype, device=device)
31
-
32
- wp.utils.array_scan(in_values, out_values_inc, True)
33
- wp.utils.array_scan(in_values, out_values_exc, False)
34
-
35
- tolerance = 0 if dtype == int else 1e-3
36
-
37
- results_inc = out_values_inc.numpy().squeeze()
38
- results_exc = out_values_exc.numpy().squeeze()
39
- error_inc = np.max(np.abs(results_inc - results_ref)) / abs(results_ref[-1])
40
- error_exc = max(np.max(np.abs(results_exc[1:] - results_ref[:-1])), abs(results_exc[0])) / abs(results_ref[-2])
41
- if error_inc > tolerance:
42
- print(f"FAIL! Max error in inclusive scan for {dtype_str}: {error_inc}")
43
- else:
44
- print(f"PASS! Max error in inclusive scan for {dtype_str}: {error_inc}")
45
-
46
- if error_exc > tolerance:
47
- print(f"FAIL! Max error in exclusive scan for {dtype_str}: {error_exc}")
48
- # else:
49
- # print(f"PASS! Max error in exclusive scan for {dtype_str}: {error_exc}")
50
-
51
-
52
- np.random.seed(1008)
53
- for device in ("cuda", "cpu"):
54
- print(f"\n\nTesting {device}")
55
- for i in range(num_runs):
56
- print(f"Run: {i+1}")
57
- print("---------")
58
-
59
- test_for_type(int, device)
60
- test_for_type(float, device)
warp/tests/test_base.py DELETED
@@ -1,208 +0,0 @@
1
- # Copyright (c) 2022 NVIDIA CORPORATION. All rights reserved.
2
- # NVIDIA CORPORATION and its licensors retain all intellectual property
3
- # and proprietary rights in and to this software, related documentation
4
- # and any modifications thereto. Any use, reproduction, disclosure or
5
- # distribution of this software and related documentation without an express
6
- # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
-
8
- import unittest
9
- import os
10
- import sys
11
-
12
- import numpy as np
13
- import warp as wp
14
-
15
- # default test mode (see get_test_devices())
16
- # "basic" - only run on CPU and first GPU device
17
- # "unique" - run on CPU and all unique GPU arches
18
- # "all" - run on all devices
19
- test_mode = "basic"
20
-
21
-
22
- def get_test_devices(mode=None):
23
- if mode is None:
24
- global test_mode
25
- mode = test_mode
26
-
27
- devices = []
28
-
29
- # only run on CPU and first GPU device
30
- if mode == "basic":
31
- if wp.is_cpu_available():
32
- devices.append(wp.get_device("cpu"))
33
- if wp.is_cuda_available():
34
- devices.append(wp.get_device("cuda:0"))
35
-
36
- # run on CPU and all unique GPU arches
37
- elif mode == "unique":
38
- if wp.is_cpu_available():
39
- devices.append(wp.get_device("cpu"))
40
-
41
- cuda_devices = wp.get_cuda_devices()
42
-
43
- unique_cuda_devices = {}
44
- for d in cuda_devices:
45
- if d.arch not in unique_cuda_devices:
46
- unique_cuda_devices[d.arch] = d
47
-
48
- devices.extend(list(unique_cuda_devices.values()))
49
-
50
- # run on all devices
51
- elif mode == "all":
52
- devices = wp.get_devices()
53
-
54
- return devices
55
-
56
-
57
- # redirects and captures all stdout output (including from C-libs)
58
- class StdOutCapture:
59
- def begin(self):
60
- # save original
61
- self.saved = sys.stdout
62
- self.target = os.dup(self.saved.fileno())
63
-
64
- # create temporary capture stream
65
- import io, tempfile
66
-
67
- self.tempfile = io.TextIOWrapper(
68
- tempfile.TemporaryFile(buffering=0), encoding="utf-8", errors="replace", newline="", write_through=True
69
- )
70
-
71
- os.dup2(self.tempfile.fileno(), self.saved.fileno())
72
-
73
- sys.stdout = self.tempfile
74
-
75
- def end(self):
76
- os.dup2(self.target, self.saved.fileno())
77
- os.close(self.target)
78
-
79
- self.tempfile.seek(0)
80
- res = self.tempfile.buffer.read()
81
- self.tempfile.close()
82
-
83
- sys.stdout = self.saved
84
-
85
- return str(res.decode("utf-8"))
86
-
87
-
88
- class CheckOutput:
89
- def __init__(self, test):
90
- self.test = test
91
-
92
- def __enter__(self):
93
- # wp.force_load()
94
-
95
- self.capture = StdOutCapture()
96
- self.capture.begin()
97
-
98
- def __exit__(self, exc_type, exc_value, traceback):
99
- # ensure any stdout output is flushed
100
- wp.synchronize()
101
-
102
- s = self.capture.end()
103
- if s != "":
104
- print(s.rstrip())
105
-
106
- # fail if test produces unexpected output (e.g.: from wp.expect_eq() builtins)
107
- # we allow strings starting of the form "Module xxx load on device xxx"
108
- # for lazy loaded modules
109
- if s != "" and not s.startswith("Module"):
110
- self.test.fail(f"Unexpected output:\n'{s.rstrip()}'")
111
-
112
-
113
- def assert_array_equal(result, expect):
114
- a = result.numpy()
115
- b = expect.numpy()
116
-
117
- if (a == b).all() == False:
118
- raise AssertionError(f"Unexpected result, got: {a} expected: {b}")
119
-
120
-
121
- def assert_np_equal(result, expect, tol=0.0):
122
- a = result.flatten()
123
- b = expect.flatten()
124
-
125
- if tol == 0.0:
126
- if (a == b).all() == False:
127
- raise AssertionError(f"Unexpected result, got: {a} expected: {b}")
128
-
129
- else:
130
- delta = a - b
131
- err = np.max(np.abs(delta))
132
- if err > tol:
133
- raise AssertionError(
134
- f"Maximum expected error exceeds tolerance got: {a}, expected: {b}, with err: {err} > {tol}"
135
- )
136
-
137
-
138
- def create_test_func(func, device, **kwargs):
139
- # pass args to func
140
- def test_func(self):
141
- with CheckOutput(self):
142
- func(self, device, **kwargs)
143
-
144
- return test_func
145
-
146
-
147
- def sanitize_identifier(s):
148
- """replace all non-identifier characters with '_'"""
149
-
150
- s = str(s)
151
- if s.isidentifier():
152
- return s
153
- else:
154
- import re
155
-
156
- return re.sub("\W|^(?=\d)", "_", s)
157
-
158
-
159
- def add_function_test(cls, name, func, devices=None, **kwargs):
160
- if devices is None:
161
- setattr(cls, name, create_test_func(func, None, **kwargs))
162
- else:
163
- for device in devices:
164
- setattr(cls, name + "_" + sanitize_identifier(device), create_test_func(func, device, **kwargs))
165
-
166
-
167
- def add_kernel_test(cls, kernel, dim, name=None, expect=None, inputs=None, devices=None):
168
- def test_func(self, device):
169
- args = []
170
- if inputs:
171
- args.extend(inputs)
172
-
173
- if expect:
174
- # allocate outputs to match results
175
- result = wp.array(expect, dtype=int, device=device)
176
- output = wp.zeros_like(result)
177
-
178
- args.append(output)
179
-
180
- # force load so that we don't generate any log output during launch
181
- kernel.module.load(device)
182
-
183
- with CheckOutput(self):
184
- wp.launch(kernel, dim=dim, inputs=args, device=device)
185
-
186
- # check output values
187
- if expect:
188
- assert_array_equal(output, result)
189
-
190
- if name is None:
191
- name = kernel.key
192
-
193
- # device is required for kernel tests, so use all devices if none were given
194
- if devices is None:
195
- devices = get_test_devices()
196
-
197
- # register test func with class for the given devices
198
- for d in devices:
199
- # use a lambda to forward the device to the inner test function
200
- test_lambda = lambda test, device=d: test_func(test, device)
201
- setattr(cls, name + "_" + sanitize_identifier(d), test_lambda)
202
-
203
-
204
- # helper that first calls the test function to generate all kernel permuations
205
- # so that compilation is done in one-shot instead of per-test
206
- def add_function_test_register_kernel(cls, name, func, devices=None, **kwargs):
207
- func(None, None, **kwargs, register_kernels=True)
208
- add_function_test(cls, name, func, devices=devices, **kwargs)
@@ -1,7 +0,0 @@
1
- import warp as wp
2
-
3
-
4
- @wp.kernel
5
- def unresolved_func_kernel():
6
- # this should trigger an exception due to unresolved function
7
- x = wp.missing_func(42)
@@ -1,7 +0,0 @@
1
- import warp as wp
2
-
3
-
4
- @wp.kernel
5
- def unresolved_symbol_kernel():
6
- # this should trigger an exception due to unresolved symbol
7
- x = missing_symbol
@@ -1,21 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: warp-lang
3
- Version: 0.10.1
4
- Summary: A Python framework for high-performance simulation and graphics programming
5
- Home-page: https://github.com/NVIDIA/warp
6
- Author: NVIDIA
7
- Author-email: mmacklin@nvidia.com
8
- License: NVSCL
9
- Project-URL: Documentation, https://nvidia.github.io/warp
10
- Classifier: Programming Language :: Python :: 3.7
11
- Classifier: Programming Language :: Python :: 3.8
12
- Classifier: Programming Language :: Python :: 3.9
13
- Classifier: Programming Language :: Python :: 3.10
14
- Classifier: Programming Language :: Python :: 3.11
15
- Classifier: License :: Other/Proprietary License
16
- Classifier: Operating System :: OS Independent
17
- Requires-Python: >=3.7
18
- Description-Content-Type: text/markdown
19
- License-File: LICENSE.md
20
- Requires-Dist: numpy
21
-