warp-lang 0.9.0__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.
- warp/__init__.py +15 -7
- warp/__init__.pyi +1 -0
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +22 -443
- warp/build_dll.py +384 -0
- warp/builtins.py +998 -488
- warp/codegen.py +1307 -739
- warp/config.py +5 -3
- warp/constants.py +6 -0
- warp/context.py +1291 -548
- warp/dlpack.py +31 -31
- warp/fabric.py +326 -0
- warp/fem/__init__.py +27 -0
- warp/fem/cache.py +389 -0
- warp/fem/dirichlet.py +181 -0
- warp/fem/domain.py +263 -0
- warp/fem/field/__init__.py +101 -0
- warp/fem/field/field.py +149 -0
- warp/fem/field/nodal_field.py +299 -0
- warp/fem/field/restriction.py +21 -0
- warp/fem/field/test.py +181 -0
- warp/fem/field/trial.py +183 -0
- warp/fem/geometry/__init__.py +19 -0
- warp/fem/geometry/closest_point.py +70 -0
- warp/fem/geometry/deformed_geometry.py +271 -0
- warp/fem/geometry/element.py +744 -0
- warp/fem/geometry/geometry.py +186 -0
- warp/fem/geometry/grid_2d.py +373 -0
- warp/fem/geometry/grid_3d.py +435 -0
- warp/fem/geometry/hexmesh.py +953 -0
- warp/fem/geometry/partition.py +376 -0
- warp/fem/geometry/quadmesh_2d.py +532 -0
- warp/fem/geometry/tetmesh.py +840 -0
- warp/fem/geometry/trimesh_2d.py +577 -0
- warp/fem/integrate.py +1616 -0
- warp/fem/operator.py +191 -0
- warp/fem/polynomial.py +213 -0
- warp/fem/quadrature/__init__.py +2 -0
- warp/fem/quadrature/pic_quadrature.py +245 -0
- warp/fem/quadrature/quadrature.py +294 -0
- warp/fem/space/__init__.py +292 -0
- warp/fem/space/basis_space.py +489 -0
- warp/fem/space/collocated_function_space.py +105 -0
- warp/fem/space/dof_mapper.py +236 -0
- warp/fem/space/function_space.py +145 -0
- warp/fem/space/grid_2d_function_space.py +267 -0
- warp/fem/space/grid_3d_function_space.py +306 -0
- warp/fem/space/hexmesh_function_space.py +352 -0
- warp/fem/space/partition.py +350 -0
- warp/fem/space/quadmesh_2d_function_space.py +369 -0
- warp/fem/space/restriction.py +160 -0
- warp/fem/space/shape/__init__.py +15 -0
- warp/fem/space/shape/cube_shape_function.py +738 -0
- warp/fem/space/shape/shape_function.py +103 -0
- warp/fem/space/shape/square_shape_function.py +611 -0
- warp/fem/space/shape/tet_shape_function.py +567 -0
- warp/fem/space/shape/triangle_shape_function.py +429 -0
- warp/fem/space/tetmesh_function_space.py +292 -0
- warp/fem/space/topology.py +295 -0
- warp/fem/space/trimesh_2d_function_space.py +221 -0
- warp/fem/types.py +77 -0
- warp/fem/utils.py +495 -0
- warp/native/array.h +164 -55
- warp/native/builtin.h +150 -174
- warp/native/bvh.cpp +75 -328
- warp/native/bvh.cu +406 -23
- warp/native/bvh.h +37 -45
- warp/native/clang/clang.cpp +136 -24
- warp/native/crt.cpp +1 -76
- warp/native/crt.h +111 -104
- warp/native/cuda_crt.h +1049 -0
- warp/native/cuda_util.cpp +15 -3
- warp/native/cuda_util.h +3 -1
- warp/native/cutlass/tools/library/scripts/conv2d_operation.py +463 -0
- warp/native/cutlass/tools/library/scripts/conv3d_operation.py +321 -0
- warp/native/cutlass/tools/library/scripts/gemm_operation.py +988 -0
- warp/native/cutlass/tools/library/scripts/generator.py +4625 -0
- warp/native/cutlass/tools/library/scripts/library.py +799 -0
- warp/native/cutlass/tools/library/scripts/manifest.py +402 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/docs/source/conf.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/profile/conv/conv2d_f16_sm80.py +106 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/profile/gemm/gemm_f32_sm80.py +91 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/setup.py +80 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/__init__.py +48 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/arguments.py +118 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/c_types.py +241 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/compiler.py +432 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/conv2d_operation.py +631 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/epilogue.py +1026 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/frontend.py +104 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/gemm_operation.py +1276 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/library.py +744 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/memory_manager.py +74 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/operation.py +110 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/parser.py +619 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/reduction_operation.py +398 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/tensor_ref.py +70 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/__init__.py +4 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/conv2d_testbed.py +646 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_grouped_testbed.py +235 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/gemm_testbed.py +557 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/test/profiler.py +70 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/type_hint.py +39 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/__init__.py +1 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/device.py +76 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/src/pycutlass/utils/reference_model.py +255 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/__init__.py +0 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +201 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +177 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +98 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_dgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +95 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_few_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +163 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_fixed_channels_f16nhwc_f16nhwc_f16nhwc_tensor_op_f32_sm80.py +187 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +309 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +54 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_fprop_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_strided_dgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +253 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f16nhwc_tensor_op_f16_sm80.py +97 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f16nhwc_f16nhwc_f32nhwc_tensor_op_f32_sm80.py +242 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_f32nhwc_f32nhwc_f32nhwc_simt_f32_sm80.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/conv2d_wgrad_implicit_gemm_tf32nhwc_tf32nhwc_f32nhwc_tensor_op_f32_sm80.py +107 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/conv/run_all_tests.py +10 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/frontend/test_frontend.py +146 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/__init__.py +0 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_bf16_sm80.py +96 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f16_sm80.py +447 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f32_sm80.py +146 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_f64_sm80.py +102 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_grouped_sm80.py +203 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/gemm_s8_sm80.py +229 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/gemm/run_all_tests.py +9 -0
- warp/native/cutlass/tools/library/scripts/pycutlass/test/unit/test_sm80.py +453 -0
- warp/native/cutlass/tools/library/scripts/rank_2k_operation.py +398 -0
- warp/native/cutlass/tools/library/scripts/rank_k_operation.py +387 -0
- warp/native/cutlass/tools/library/scripts/rt.py +796 -0
- warp/native/cutlass/tools/library/scripts/symm_operation.py +400 -0
- warp/native/cutlass/tools/library/scripts/trmm_operation.py +407 -0
- warp/native/cutlass_gemm.cu +5 -3
- warp/native/exports.h +1240 -949
- warp/native/fabric.h +228 -0
- warp/native/hashgrid.cpp +4 -4
- warp/native/hashgrid.h +22 -2
- warp/native/initializer_array.h +2 -2
- warp/native/intersect.h +22 -7
- warp/native/intersect_adj.h +8 -8
- warp/native/intersect_tri.h +13 -16
- warp/native/marching.cu +157 -161
- warp/native/mat.h +119 -19
- warp/native/matnn.h +2 -2
- warp/native/mesh.cpp +108 -83
- warp/native/mesh.cu +243 -6
- warp/native/mesh.h +1547 -458
- warp/native/nanovdb/NanoVDB.h +1 -1
- warp/native/noise.h +272 -329
- warp/native/quat.h +51 -8
- warp/native/rand.h +45 -35
- warp/native/range.h +6 -2
- warp/native/reduce.cpp +157 -0
- warp/native/reduce.cu +348 -0
- warp/native/runlength_encode.cpp +62 -0
- warp/native/runlength_encode.cu +46 -0
- warp/native/scan.cu +11 -13
- warp/native/scan.h +1 -0
- warp/native/solid_angle.h +442 -0
- warp/native/sort.cpp +13 -0
- warp/native/sort.cu +9 -1
- warp/native/sparse.cpp +338 -0
- warp/native/sparse.cu +545 -0
- warp/native/spatial.h +2 -2
- warp/native/temp_buffer.h +30 -0
- warp/native/vec.h +126 -24
- warp/native/volume.h +120 -0
- warp/native/warp.cpp +658 -53
- warp/native/warp.cu +660 -68
- warp/native/warp.h +112 -12
- warp/optim/__init__.py +1 -0
- warp/optim/linear.py +922 -0
- warp/optim/sgd.py +92 -0
- warp/render/render_opengl.py +392 -152
- warp/render/render_usd.py +11 -11
- warp/sim/__init__.py +2 -2
- warp/sim/articulation.py +385 -185
- warp/sim/collide.py +21 -8
- warp/sim/import_mjcf.py +297 -106
- warp/sim/import_urdf.py +389 -210
- warp/sim/import_usd.py +198 -97
- warp/sim/inertia.py +17 -18
- warp/sim/integrator_euler.py +14 -8
- warp/sim/integrator_xpbd.py +161 -19
- warp/sim/model.py +795 -291
- warp/sim/optimizer.py +2 -6
- warp/sim/render.py +65 -3
- warp/sim/utils.py +3 -0
- warp/sparse.py +1227 -0
- warp/stubs.py +665 -223
- warp/tape.py +66 -15
- warp/tests/__main__.py +3 -6
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/assets/torus.usda +105 -105
- warp/tests/{test_class_kernel.py → aux_test_class_kernel.py} +9 -1
- warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -0
- warp/tests/{test_dependent.py → aux_test_dependent.py} +2 -2
- warp/tests/{test_reference.py → aux_test_reference.py} +1 -1
- warp/tests/aux_test_unresolved_func.py +14 -0
- warp/tests/aux_test_unresolved_symbol.py +14 -0
- warp/tests/disabled_kinematics.py +239 -0
- warp/tests/run_coverage_serial.py +31 -0
- warp/tests/test_adam.py +103 -106
- warp/tests/test_arithmetic.py +128 -74
- warp/tests/test_array.py +1497 -211
- warp/tests/test_array_reduce.py +150 -0
- warp/tests/test_atomic.py +64 -28
- warp/tests/test_bool.py +99 -0
- warp/tests/test_builtins_resolution.py +1292 -0
- warp/tests/test_bvh.py +75 -43
- warp/tests/test_closest_point_edge_edge.py +54 -57
- warp/tests/test_codegen.py +233 -128
- warp/tests/test_compile_consts.py +28 -20
- warp/tests/test_conditional.py +108 -24
- warp/tests/test_copy.py +10 -12
- warp/tests/test_ctypes.py +112 -88
- warp/tests/test_dense.py +21 -14
- warp/tests/test_devices.py +98 -0
- warp/tests/test_dlpack.py +136 -108
- warp/tests/test_examples.py +277 -0
- warp/tests/test_fabricarray.py +955 -0
- warp/tests/test_fast_math.py +15 -11
- warp/tests/test_fem.py +1271 -0
- warp/tests/test_fp16.py +53 -19
- warp/tests/test_func.py +187 -74
- warp/tests/test_generics.py +194 -49
- warp/tests/test_grad.py +180 -116
- warp/tests/test_grad_customs.py +176 -0
- warp/tests/test_hash_grid.py +52 -37
- warp/tests/test_import.py +10 -23
- warp/tests/test_indexedarray.py +577 -24
- warp/tests/test_intersect.py +18 -9
- warp/tests/test_large.py +141 -0
- warp/tests/test_launch.py +251 -15
- warp/tests/test_lerp.py +64 -65
- warp/tests/test_linear_solvers.py +154 -0
- warp/tests/test_lvalue.py +493 -0
- warp/tests/test_marching_cubes.py +12 -13
- warp/tests/test_mat.py +508 -2778
- warp/tests/test_mat_lite.py +115 -0
- warp/tests/test_mat_scalar_ops.py +2889 -0
- warp/tests/test_math.py +103 -9
- warp/tests/test_matmul.py +305 -69
- warp/tests/test_matmul_lite.py +410 -0
- warp/tests/test_mesh.py +71 -14
- warp/tests/test_mesh_query_aabb.py +41 -25
- warp/tests/test_mesh_query_point.py +325 -34
- warp/tests/test_mesh_query_ray.py +39 -22
- warp/tests/test_mlp.py +30 -22
- warp/tests/test_model.py +92 -89
- warp/tests/test_modules_lite.py +39 -0
- warp/tests/test_multigpu.py +88 -114
- warp/tests/test_noise.py +12 -11
- warp/tests/test_operators.py +16 -20
- warp/tests/test_options.py +11 -11
- warp/tests/test_pinned.py +17 -18
- warp/tests/test_print.py +32 -11
- warp/tests/test_quat.py +275 -129
- warp/tests/test_rand.py +18 -16
- warp/tests/test_reload.py +38 -34
- warp/tests/test_rounding.py +50 -43
- warp/tests/test_runlength_encode.py +190 -0
- warp/tests/test_smoothstep.py +9 -11
- warp/tests/test_snippet.py +143 -0
- warp/tests/test_sparse.py +460 -0
- warp/tests/test_spatial.py +276 -243
- warp/tests/test_streams.py +110 -85
- warp/tests/test_struct.py +331 -85
- warp/tests/test_tape.py +39 -21
- warp/tests/test_torch.py +118 -89
- warp/tests/test_transient_module.py +12 -13
- warp/tests/test_types.py +614 -0
- warp/tests/test_utils.py +494 -0
- warp/tests/test_vec.py +354 -1987
- warp/tests/test_vec_lite.py +73 -0
- warp/tests/test_vec_scalar_ops.py +2099 -0
- warp/tests/test_volume.py +457 -293
- warp/tests/test_volume_write.py +124 -134
- warp/tests/unittest_serial.py +35 -0
- warp/tests/unittest_suites.py +341 -0
- warp/tests/unittest_utils.py +568 -0
- warp/tests/unused_test_misc.py +71 -0
- warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
- warp/thirdparty/appdirs.py +36 -45
- warp/thirdparty/unittest_parallel.py +549 -0
- warp/torch.py +72 -30
- warp/types.py +1744 -713
- warp/utils.py +360 -350
- warp_lang-0.11.0.dist-info/LICENSE.md +36 -0
- warp_lang-0.11.0.dist-info/METADATA +238 -0
- warp_lang-0.11.0.dist-info/RECORD +332 -0
- {warp_lang-0.9.0.dist-info → warp_lang-0.11.0.dist-info}/WHEEL +1 -1
- warp/bin/warp-clang.exp +0 -0
- warp/bin/warp-clang.lib +0 -0
- warp/bin/warp.exp +0 -0
- warp/bin/warp.lib +0 -0
- warp/tests/test_all.py +0 -215
- warp/tests/test_array_scan.py +0 -60
- warp/tests/test_base.py +0 -208
- warp/tests/test_unresolved_func.py +0 -7
- warp/tests/test_unresolved_symbol.py +0 -7
- warp_lang-0.9.0.dist-info/METADATA +0 -20
- warp_lang-0.9.0.dist-info/RECORD +0 -177
- /warp/tests/{test_compile_consts_dummy.py → aux_test_compile_consts_dummy.py} +0 -0
- /warp/tests/{test_reference_reference.py → aux_test_reference_reference.py} +0 -0
- /warp/tests/{test_square.py → aux_test_square.py} +0 -0
- {warp_lang-0.9.0.dist-info → warp_lang-0.11.0.dist-info}/top_level.txt +0 -0
warp/bin/warp.exp
DELETED
|
Binary file
|
warp/bin/warp.lib
DELETED
|
Binary file
|
warp/tests/test_all.py
DELETED
|
@@ -1,215 +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_conditional
|
|
24
|
-
import warp.tests.test_operators
|
|
25
|
-
import warp.tests.test_rounding
|
|
26
|
-
import warp.tests.test_hash_grid
|
|
27
|
-
import warp.tests.test_ctypes
|
|
28
|
-
import warp.tests.test_rand
|
|
29
|
-
import warp.tests.test_noise
|
|
30
|
-
import warp.tests.test_tape
|
|
31
|
-
import warp.tests.test_compile_consts
|
|
32
|
-
import warp.tests.test_volume
|
|
33
|
-
import warp.tests.test_mlp
|
|
34
|
-
import warp.tests.test_grad
|
|
35
|
-
import warp.tests.test_intersect
|
|
36
|
-
import warp.tests.test_array
|
|
37
|
-
import warp.tests.test_launch
|
|
38
|
-
import warp.tests.test_import
|
|
39
|
-
import warp.tests.test_func
|
|
40
|
-
import warp.tests.test_fp16
|
|
41
|
-
import warp.tests.test_reload
|
|
42
|
-
import warp.tests.test_struct
|
|
43
|
-
import warp.tests.test_closest_point_edge_edge
|
|
44
|
-
import warp.tests.test_multigpu
|
|
45
|
-
import warp.tests.test_quat
|
|
46
|
-
import warp.tests.test_atomic
|
|
47
|
-
import warp.tests.test_adam
|
|
48
|
-
import warp.tests.test_transient_module
|
|
49
|
-
import warp.tests.test_lerp
|
|
50
|
-
import warp.tests.test_smoothstep
|
|
51
|
-
import warp.tests.test_model
|
|
52
|
-
import warp.tests.test_fast_math
|
|
53
|
-
import warp.tests.test_streams
|
|
54
|
-
import warp.tests.test_torch
|
|
55
|
-
import warp.tests.test_pinned
|
|
56
|
-
import warp.tests.test_matmul
|
|
57
|
-
import warp.tests.test_options
|
|
58
|
-
import warp.tests.test_dlpack
|
|
59
|
-
import warp.tests.test_vec
|
|
60
|
-
import warp.tests.test_mat
|
|
61
|
-
import warp.tests.test_arithmetic
|
|
62
|
-
import warp.tests.test_spatial
|
|
63
|
-
import warp.tests.test_math
|
|
64
|
-
import warp.tests.test_generics
|
|
65
|
-
import warp.tests.test_indexedarray
|
|
66
|
-
import warp.tests.test_copy
|
|
67
|
-
import warp.tests.test_mesh
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def register_tests(parent):
|
|
71
|
-
tests = []
|
|
72
|
-
|
|
73
|
-
tests.append(warp.tests.test_codegen.register(parent))
|
|
74
|
-
tests.append(warp.tests.test_mesh_query_aabb.register(parent))
|
|
75
|
-
tests.append(warp.tests.test_mesh_query_point.register(parent))
|
|
76
|
-
tests.append(warp.tests.test_mesh_query_ray.register(parent))
|
|
77
|
-
tests.append(warp.tests.test_conditional.register(parent))
|
|
78
|
-
tests.append(warp.tests.test_operators.register(parent))
|
|
79
|
-
tests.append(warp.tests.test_rounding.register(parent))
|
|
80
|
-
tests.append(warp.tests.test_hash_grid.register(parent))
|
|
81
|
-
tests.append(warp.tests.test_ctypes.register(parent))
|
|
82
|
-
tests.append(warp.tests.test_rand.register(parent))
|
|
83
|
-
tests.append(warp.tests.test_noise.register(parent))
|
|
84
|
-
tests.append(warp.tests.test_tape.register(parent))
|
|
85
|
-
tests.append(warp.tests.test_compile_consts.register(parent))
|
|
86
|
-
tests.append(warp.tests.test_volume.register(parent))
|
|
87
|
-
tests.append(warp.tests.test_mlp.register(parent))
|
|
88
|
-
tests.append(warp.tests.test_grad.register(parent))
|
|
89
|
-
tests.append(warp.tests.test_intersect.register(parent))
|
|
90
|
-
tests.append(warp.tests.test_array.register(parent))
|
|
91
|
-
tests.append(warp.tests.test_launch.register(parent))
|
|
92
|
-
tests.append(warp.tests.test_import.register(parent))
|
|
93
|
-
tests.append(warp.tests.test_func.register(parent))
|
|
94
|
-
tests.append(warp.tests.test_fp16.register(parent))
|
|
95
|
-
tests.append(warp.tests.test_reload.register(parent))
|
|
96
|
-
tests.append(warp.tests.test_struct.register(parent))
|
|
97
|
-
tests.append(warp.tests.test_closest_point_edge_edge.register(parent))
|
|
98
|
-
tests.append(warp.tests.test_multigpu.register(parent))
|
|
99
|
-
tests.append(warp.tests.test_quat.register(parent))
|
|
100
|
-
tests.append(warp.tests.test_atomic.register(parent))
|
|
101
|
-
tests.append(warp.tests.test_adam.register(parent))
|
|
102
|
-
tests.append(warp.tests.test_transient_module.register(parent))
|
|
103
|
-
tests.append(warp.tests.test_lerp.register(parent))
|
|
104
|
-
tests.append(warp.tests.test_smoothstep.register(parent))
|
|
105
|
-
tests.append(warp.tests.test_model.register(parent))
|
|
106
|
-
tests.append(warp.tests.test_fast_math.register(parent))
|
|
107
|
-
tests.append(warp.tests.test_streams.register(parent))
|
|
108
|
-
tests.append(warp.tests.test_torch.register(parent))
|
|
109
|
-
tests.append(warp.tests.test_pinned.register(parent))
|
|
110
|
-
tests.append(warp.tests.test_matmul.register(parent))
|
|
111
|
-
tests.append(warp.tests.test_options.register(parent))
|
|
112
|
-
tests.append(warp.tests.test_dlpack.register(parent))
|
|
113
|
-
tests.append(warp.tests.test_vec.register(parent))
|
|
114
|
-
tests.append(warp.tests.test_mat.register(parent))
|
|
115
|
-
tests.append(warp.tests.test_arithmetic.register(parent))
|
|
116
|
-
tests.append(warp.tests.test_spatial.register(parent))
|
|
117
|
-
tests.append(warp.tests.test_math.register(parent))
|
|
118
|
-
tests.append(warp.tests.test_generics.register(parent))
|
|
119
|
-
tests.append(warp.tests.test_indexedarray.register(parent))
|
|
120
|
-
tests.append(warp.tests.test_copy.register(parent))
|
|
121
|
-
tests.append(warp.tests.test_mesh.register(parent))
|
|
122
|
-
|
|
123
|
-
return tests
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
class TeamCityTestResult(unittest.TextTestResult):
|
|
127
|
-
"""This class will report each test result to TeamCity"""
|
|
128
|
-
|
|
129
|
-
def __init__(self, stream, descriptions, verbosity):
|
|
130
|
-
super(TeamCityTestResult, self).__init__(stream, descriptions, verbosity)
|
|
131
|
-
|
|
132
|
-
def addSuccess(self, test):
|
|
133
|
-
super(TeamCityTestResult, self).addSuccess(test)
|
|
134
|
-
self.reportSuccess(test)
|
|
135
|
-
|
|
136
|
-
def addError(self, test, err):
|
|
137
|
-
super(TeamCityTestResult, self).addError(test, err)
|
|
138
|
-
self.reportFailure(test)
|
|
139
|
-
|
|
140
|
-
def addFailure(self, test, err):
|
|
141
|
-
super(TeamCityTestResult, self).addFailure(test, err)
|
|
142
|
-
self.reportFailure(test)
|
|
143
|
-
|
|
144
|
-
def addSkip(self, test, reason):
|
|
145
|
-
super(TeamCityTestResult, self).addSkip(test, reason)
|
|
146
|
-
|
|
147
|
-
def addExpectedFailure(self, test, err):
|
|
148
|
-
super(TeamCityTestResult, self).addExpectedFailure(test, err)
|
|
149
|
-
self.reportSuccess(test)
|
|
150
|
-
|
|
151
|
-
def addUnexpectedSuccess(self, test):
|
|
152
|
-
super(TeamCityTestResult, self).addUnexpectedSuccess(test)
|
|
153
|
-
self.reportFailure(test)
|
|
154
|
-
|
|
155
|
-
def reportSuccess(self, test):
|
|
156
|
-
test_id = test.id()
|
|
157
|
-
print(f"##teamcity[testStarted name='{test_id}']")
|
|
158
|
-
print(f"##teamcity[testFinished name='{test_id}']")
|
|
159
|
-
|
|
160
|
-
def reportFailure(self, test):
|
|
161
|
-
test_id = test.id()
|
|
162
|
-
print(f"##teamcity[testStarted name='{test_id}']")
|
|
163
|
-
print(f"##teamcity[testFailed name='{test_id}']")
|
|
164
|
-
print(f"##teamcity[testFinished name='{test_id}']")
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
class TeamCityTestRunner(unittest.TextTestRunner):
|
|
168
|
-
"""Test runner that will report test results to TeamCity if running in TeamCity"""
|
|
169
|
-
|
|
170
|
-
def __init__(self, **kwargs):
|
|
171
|
-
self.running_in_teamcity = os.environ.get("TEAMCITY_VERSION") is not None
|
|
172
|
-
if self.running_in_teamcity:
|
|
173
|
-
kwargs["resultclass"] = TeamCityTestResult
|
|
174
|
-
super(TeamCityTestRunner, self).__init__(**kwargs)
|
|
175
|
-
|
|
176
|
-
def run(self, test, name):
|
|
177
|
-
if self.running_in_teamcity:
|
|
178
|
-
print(f"##teamcity[testSuiteStarted name='{name}']")
|
|
179
|
-
|
|
180
|
-
result = super(TeamCityTestRunner, self).run(test)
|
|
181
|
-
|
|
182
|
-
if self.running_in_teamcity:
|
|
183
|
-
print(f"##teamcity[testSuiteFinished name='{name}']")
|
|
184
|
-
if not result.wasSuccessful():
|
|
185
|
-
print(f"##teamcity[buildStatus status='FAILURE']")
|
|
186
|
-
|
|
187
|
-
return result
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
def run():
|
|
191
|
-
test_suite = unittest.TestSuite()
|
|
192
|
-
|
|
193
|
-
tests = register_tests(unittest.TestCase)
|
|
194
|
-
|
|
195
|
-
for test in tests:
|
|
196
|
-
test_suite.addTest(unittest.defaultTestLoader.loadTestsFromTestCase(test))
|
|
197
|
-
|
|
198
|
-
# force rebuild of all kernels
|
|
199
|
-
wp.build.clear_kernel_cache()
|
|
200
|
-
|
|
201
|
-
# load all modules
|
|
202
|
-
for device in get_test_devices():
|
|
203
|
-
wp.force_load(device)
|
|
204
|
-
|
|
205
|
-
runner = TeamCityTestRunner(verbosity=2, failfast=False)
|
|
206
|
-
ret = not runner.run(test_suite, "WarpTests").wasSuccessful()
|
|
207
|
-
return ret
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if __name__ == "__main__":
|
|
211
|
-
ret = run()
|
|
212
|
-
|
|
213
|
-
import sys
|
|
214
|
-
|
|
215
|
-
sys.exit(ret)
|
warp/tests/test_array_scan.py
DELETED
|
@@ -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,20 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: warp-lang
|
|
3
|
-
Version: 0.9.0
|
|
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
|
-
Requires-Dist: numpy
|
|
20
|
-
|