warp-lang 1.0.1__py3-none-manylinux2014_aarch64.whl → 1.1.0__py3-none-manylinux2014_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.
- warp/__init__.py +108 -97
- warp/__init__.pyi +1 -1
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +115 -113
- warp/build_dll.py +383 -375
- warp/builtins.py +3425 -3354
- warp/codegen.py +2878 -2792
- warp/config.py +40 -36
- warp/constants.py +45 -45
- warp/context.py +5194 -5102
- warp/dlpack.py +442 -442
- warp/examples/__init__.py +16 -16
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cartpole.urdf +110 -110
- warp/examples/assets/crazyflie.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nv_ant.xml +92 -92
- warp/examples/assets/nv_humanoid.xml +183 -183
- warp/examples/assets/quadruped.urdf +267 -267
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +383 -383
- warp/examples/benchmarks/benchmark_cloth.py +278 -279
- warp/examples/benchmarks/benchmark_cloth_cupy.py +88 -88
- warp/examples/benchmarks/benchmark_cloth_jax.py +97 -100
- warp/examples/benchmarks/benchmark_cloth_numba.py +146 -142
- warp/examples/benchmarks/benchmark_cloth_numpy.py +77 -77
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +86 -86
- warp/examples/benchmarks/benchmark_cloth_taichi.py +112 -112
- warp/examples/benchmarks/benchmark_cloth_warp.py +146 -146
- warp/examples/benchmarks/benchmark_launches.py +295 -295
- warp/examples/browse.py +29 -28
- warp/examples/core/example_dem.py +234 -221
- warp/examples/core/example_fluid.py +293 -267
- warp/examples/core/example_graph_capture.py +144 -129
- warp/examples/core/example_marching_cubes.py +188 -176
- warp/examples/core/example_mesh.py +174 -154
- warp/examples/core/example_mesh_intersect.py +205 -193
- warp/examples/core/example_nvdb.py +176 -169
- warp/examples/core/example_raycast.py +105 -89
- warp/examples/core/example_raymarch.py +199 -178
- warp/examples/core/example_render_opengl.py +185 -141
- warp/examples/core/example_sph.py +405 -389
- warp/examples/core/example_torch.py +222 -181
- warp/examples/core/example_wave.py +263 -249
- warp/examples/fem/bsr_utils.py +378 -380
- warp/examples/fem/example_apic_fluid.py +407 -391
- warp/examples/fem/example_convection_diffusion.py +182 -168
- warp/examples/fem/example_convection_diffusion_dg.py +219 -209
- warp/examples/fem/example_convection_diffusion_dg0.py +204 -194
- warp/examples/fem/example_deformed_geometry.py +177 -159
- warp/examples/fem/example_diffusion.py +201 -173
- warp/examples/fem/example_diffusion_3d.py +177 -152
- warp/examples/fem/example_diffusion_mgpu.py +221 -214
- warp/examples/fem/example_mixed_elasticity.py +244 -222
- warp/examples/fem/example_navier_stokes.py +259 -243
- warp/examples/fem/example_stokes.py +220 -192
- warp/examples/fem/example_stokes_transfer.py +265 -249
- warp/examples/fem/mesh_utils.py +133 -109
- warp/examples/fem/plot_utils.py +292 -287
- warp/examples/optim/example_bounce.py +260 -248
- warp/examples/optim/example_cloth_throw.py +222 -210
- warp/examples/optim/example_diffray.py +566 -535
- warp/examples/optim/example_drone.py +864 -835
- warp/examples/optim/example_inverse_kinematics.py +176 -169
- warp/examples/optim/example_inverse_kinematics_torch.py +185 -170
- warp/examples/optim/example_spring_cage.py +239 -234
- warp/examples/optim/example_trajectory.py +223 -201
- warp/examples/optim/example_walker.py +306 -292
- warp/examples/sim/example_cartpole.py +139 -128
- warp/examples/sim/example_cloth.py +196 -184
- warp/examples/sim/example_granular.py +124 -113
- warp/examples/sim/example_granular_collision_sdf.py +197 -185
- warp/examples/sim/example_jacobian_ik.py +236 -213
- warp/examples/sim/example_particle_chain.py +118 -106
- warp/examples/sim/example_quadruped.py +193 -179
- warp/examples/sim/example_rigid_chain.py +197 -189
- warp/examples/sim/example_rigid_contact.py +189 -176
- warp/examples/sim/example_rigid_force.py +127 -126
- warp/examples/sim/example_rigid_gyroscopic.py +109 -97
- warp/examples/sim/example_rigid_soft_contact.py +134 -124
- warp/examples/sim/example_soft_body.py +190 -178
- warp/fabric.py +337 -335
- warp/fem/__init__.py +60 -27
- warp/fem/cache.py +401 -388
- warp/fem/dirichlet.py +178 -179
- warp/fem/domain.py +262 -263
- warp/fem/field/__init__.py +100 -101
- warp/fem/field/field.py +148 -149
- warp/fem/field/nodal_field.py +298 -299
- warp/fem/field/restriction.py +22 -21
- warp/fem/field/test.py +180 -181
- warp/fem/field/trial.py +183 -183
- warp/fem/geometry/__init__.py +15 -19
- warp/fem/geometry/closest_point.py +69 -70
- warp/fem/geometry/deformed_geometry.py +270 -271
- warp/fem/geometry/element.py +744 -744
- warp/fem/geometry/geometry.py +184 -186
- warp/fem/geometry/grid_2d.py +380 -373
- warp/fem/geometry/grid_3d.py +441 -435
- warp/fem/geometry/hexmesh.py +953 -953
- warp/fem/geometry/partition.py +374 -376
- warp/fem/geometry/quadmesh_2d.py +532 -532
- warp/fem/geometry/tetmesh.py +840 -840
- warp/fem/geometry/trimesh_2d.py +577 -577
- warp/fem/integrate.py +1630 -1615
- warp/fem/operator.py +190 -191
- warp/fem/polynomial.py +214 -213
- warp/fem/quadrature/__init__.py +2 -2
- warp/fem/quadrature/pic_quadrature.py +243 -245
- warp/fem/quadrature/quadrature.py +295 -294
- warp/fem/space/__init__.py +294 -292
- warp/fem/space/basis_space.py +488 -489
- warp/fem/space/collocated_function_space.py +100 -105
- warp/fem/space/dof_mapper.py +236 -236
- warp/fem/space/function_space.py +148 -145
- warp/fem/space/grid_2d_function_space.py +267 -267
- warp/fem/space/grid_3d_function_space.py +305 -306
- warp/fem/space/hexmesh_function_space.py +350 -352
- warp/fem/space/partition.py +350 -350
- warp/fem/space/quadmesh_2d_function_space.py +368 -369
- warp/fem/space/restriction.py +158 -160
- warp/fem/space/shape/__init__.py +13 -15
- warp/fem/space/shape/cube_shape_function.py +738 -738
- warp/fem/space/shape/shape_function.py +102 -103
- warp/fem/space/shape/square_shape_function.py +611 -611
- warp/fem/space/shape/tet_shape_function.py +565 -567
- warp/fem/space/shape/triangle_shape_function.py +429 -429
- warp/fem/space/tetmesh_function_space.py +294 -292
- warp/fem/space/topology.py +297 -295
- warp/fem/space/trimesh_2d_function_space.py +223 -221
- warp/fem/types.py +77 -77
- warp/fem/utils.py +495 -495
- warp/jax.py +166 -141
- warp/jax_experimental.py +341 -339
- warp/native/array.h +1072 -1025
- warp/native/builtin.h +1560 -1560
- warp/native/bvh.cpp +398 -398
- warp/native/bvh.cu +525 -525
- warp/native/bvh.h +429 -429
- warp/native/clang/clang.cpp +495 -464
- warp/native/crt.cpp +31 -31
- warp/native/crt.h +334 -334
- warp/native/cuda_crt.h +1049 -1049
- warp/native/cuda_util.cpp +549 -540
- warp/native/cuda_util.h +288 -203
- warp/native/cutlass_gemm.cpp +34 -34
- warp/native/cutlass_gemm.cu +372 -372
- warp/native/error.cpp +66 -66
- warp/native/error.h +27 -27
- warp/native/fabric.h +228 -228
- warp/native/hashgrid.cpp +301 -278
- warp/native/hashgrid.cu +78 -77
- warp/native/hashgrid.h +227 -227
- warp/native/initializer_array.h +32 -32
- warp/native/intersect.h +1204 -1204
- warp/native/intersect_adj.h +365 -365
- warp/native/intersect_tri.h +322 -322
- warp/native/marching.cpp +2 -2
- warp/native/marching.cu +497 -497
- warp/native/marching.h +2 -2
- warp/native/mat.h +1498 -1498
- warp/native/matnn.h +333 -333
- warp/native/mesh.cpp +203 -203
- warp/native/mesh.cu +293 -293
- warp/native/mesh.h +1887 -1887
- warp/native/nanovdb/NanoVDB.h +4782 -4782
- warp/native/nanovdb/PNanoVDB.h +2553 -2553
- warp/native/nanovdb/PNanoVDBWrite.h +294 -294
- warp/native/noise.h +850 -850
- warp/native/quat.h +1084 -1084
- warp/native/rand.h +299 -299
- warp/native/range.h +108 -108
- warp/native/reduce.cpp +156 -156
- warp/native/reduce.cu +348 -348
- warp/native/runlength_encode.cpp +61 -61
- warp/native/runlength_encode.cu +46 -46
- warp/native/scan.cpp +30 -30
- warp/native/scan.cu +36 -36
- warp/native/scan.h +7 -7
- warp/native/solid_angle.h +442 -442
- warp/native/sort.cpp +94 -94
- warp/native/sort.cu +97 -97
- warp/native/sort.h +14 -14
- warp/native/sparse.cpp +337 -337
- warp/native/sparse.cu +544 -544
- warp/native/spatial.h +630 -630
- warp/native/svd.h +562 -562
- warp/native/temp_buffer.h +30 -30
- warp/native/vec.h +1132 -1132
- warp/native/volume.cpp +297 -297
- warp/native/volume.cu +32 -32
- warp/native/volume.h +538 -538
- warp/native/volume_builder.cu +425 -425
- warp/native/volume_builder.h +19 -19
- warp/native/warp.cpp +1057 -1052
- warp/native/warp.cu +2943 -2828
- warp/native/warp.h +313 -305
- warp/optim/__init__.py +9 -9
- warp/optim/adam.py +120 -120
- warp/optim/linear.py +1104 -939
- warp/optim/sgd.py +104 -92
- warp/render/__init__.py +10 -10
- warp/render/render_opengl.py +3217 -3204
- warp/render/render_usd.py +768 -749
- warp/render/utils.py +152 -150
- warp/sim/__init__.py +52 -59
- warp/sim/articulation.py +685 -685
- warp/sim/collide.py +1594 -1590
- warp/sim/import_mjcf.py +489 -481
- warp/sim/import_snu.py +220 -221
- warp/sim/import_urdf.py +536 -516
- warp/sim/import_usd.py +887 -881
- warp/sim/inertia.py +316 -317
- warp/sim/integrator.py +234 -233
- warp/sim/integrator_euler.py +1956 -1956
- warp/sim/integrator_featherstone.py +1910 -1991
- warp/sim/integrator_xpbd.py +3294 -3312
- warp/sim/model.py +4473 -4314
- warp/sim/particles.py +113 -112
- warp/sim/render.py +417 -403
- warp/sim/utils.py +413 -410
- warp/sparse.py +1227 -1227
- warp/stubs.py +2109 -2469
- warp/tape.py +1162 -225
- warp/tests/__init__.py +1 -1
- warp/tests/__main__.py +4 -4
- warp/tests/assets/torus.usda +105 -105
- warp/tests/aux_test_class_kernel.py +26 -26
- warp/tests/aux_test_compile_consts_dummy.py +10 -10
- warp/tests/aux_test_conditional_unequal_types_kernels.py +21 -21
- warp/tests/aux_test_dependent.py +22 -22
- warp/tests/aux_test_grad_customs.py +23 -23
- warp/tests/aux_test_reference.py +11 -11
- warp/tests/aux_test_reference_reference.py +10 -10
- warp/tests/aux_test_square.py +17 -17
- warp/tests/aux_test_unresolved_func.py +14 -14
- warp/tests/aux_test_unresolved_symbol.py +14 -14
- warp/tests/disabled_kinematics.py +239 -239
- warp/tests/run_coverage_serial.py +31 -31
- warp/tests/test_adam.py +157 -157
- warp/tests/test_arithmetic.py +1124 -1124
- warp/tests/test_array.py +2417 -2326
- warp/tests/test_array_reduce.py +150 -150
- warp/tests/test_async.py +668 -656
- warp/tests/test_atomic.py +141 -141
- warp/tests/test_bool.py +204 -149
- warp/tests/test_builtins_resolution.py +1292 -1292
- warp/tests/test_bvh.py +164 -171
- warp/tests/test_closest_point_edge_edge.py +228 -228
- warp/tests/test_codegen.py +566 -553
- warp/tests/test_compile_consts.py +97 -101
- warp/tests/test_conditional.py +246 -246
- warp/tests/test_copy.py +232 -215
- warp/tests/test_ctypes.py +632 -632
- warp/tests/test_dense.py +67 -67
- warp/tests/test_devices.py +91 -98
- warp/tests/test_dlpack.py +530 -529
- warp/tests/test_examples.py +400 -378
- warp/tests/test_fabricarray.py +955 -955
- warp/tests/test_fast_math.py +62 -54
- warp/tests/test_fem.py +1277 -1278
- warp/tests/test_fp16.py +130 -130
- warp/tests/test_func.py +338 -337
- warp/tests/test_generics.py +571 -571
- warp/tests/test_grad.py +746 -640
- warp/tests/test_grad_customs.py +333 -336
- warp/tests/test_hash_grid.py +210 -164
- warp/tests/test_import.py +39 -39
- warp/tests/test_indexedarray.py +1134 -1134
- warp/tests/test_intersect.py +67 -67
- warp/tests/test_jax.py +307 -307
- warp/tests/test_large.py +167 -164
- warp/tests/test_launch.py +354 -354
- warp/tests/test_lerp.py +261 -261
- warp/tests/test_linear_solvers.py +191 -171
- warp/tests/test_lvalue.py +421 -493
- warp/tests/test_marching_cubes.py +65 -65
- warp/tests/test_mat.py +1801 -1827
- warp/tests/test_mat_lite.py +115 -115
- warp/tests/test_mat_scalar_ops.py +2907 -2889
- warp/tests/test_math.py +126 -193
- warp/tests/test_matmul.py +500 -499
- warp/tests/test_matmul_lite.py +410 -410
- warp/tests/test_mempool.py +188 -190
- warp/tests/test_mesh.py +284 -324
- warp/tests/test_mesh_query_aabb.py +228 -241
- warp/tests/test_mesh_query_point.py +692 -702
- warp/tests/test_mesh_query_ray.py +292 -303
- warp/tests/test_mlp.py +276 -276
- warp/tests/test_model.py +110 -110
- warp/tests/test_modules_lite.py +39 -39
- warp/tests/test_multigpu.py +163 -163
- warp/tests/test_noise.py +248 -248
- warp/tests/test_operators.py +250 -250
- warp/tests/test_options.py +123 -125
- warp/tests/test_peer.py +133 -137
- warp/tests/test_pinned.py +78 -78
- warp/tests/test_print.py +54 -54
- warp/tests/test_quat.py +2086 -2086
- warp/tests/test_rand.py +288 -288
- warp/tests/test_reload.py +217 -217
- warp/tests/test_rounding.py +179 -179
- warp/tests/test_runlength_encode.py +190 -190
- warp/tests/test_sim_grad.py +243 -0
- warp/tests/test_sim_kinematics.py +91 -97
- warp/tests/test_smoothstep.py +168 -168
- warp/tests/test_snippet.py +305 -266
- warp/tests/test_sparse.py +468 -460
- warp/tests/test_spatial.py +2148 -2148
- warp/tests/test_streams.py +486 -473
- warp/tests/test_struct.py +710 -675
- warp/tests/test_tape.py +173 -148
- warp/tests/test_torch.py +743 -743
- warp/tests/test_transient_module.py +87 -87
- warp/tests/test_types.py +556 -659
- warp/tests/test_utils.py +490 -499
- warp/tests/test_vec.py +1264 -1268
- warp/tests/test_vec_lite.py +73 -73
- warp/tests/test_vec_scalar_ops.py +2099 -2099
- warp/tests/test_verify_fp.py +94 -94
- warp/tests/test_volume.py +737 -736
- warp/tests/test_volume_write.py +255 -265
- warp/tests/unittest_serial.py +37 -37
- warp/tests/unittest_suites.py +363 -359
- warp/tests/unittest_utils.py +603 -578
- warp/tests/unused_test_misc.py +71 -71
- warp/tests/walkthrough_debug.py +85 -85
- warp/thirdparty/appdirs.py +598 -598
- warp/thirdparty/dlpack.py +143 -143
- warp/thirdparty/unittest_parallel.py +566 -561
- warp/torch.py +321 -295
- warp/types.py +4504 -4450
- warp/utils.py +1008 -821
- {warp_lang-1.0.1.dist-info → warp_lang-1.1.0.dist-info}/LICENSE.md +126 -126
- {warp_lang-1.0.1.dist-info → warp_lang-1.1.0.dist-info}/METADATA +338 -400
- warp_lang-1.1.0.dist-info/RECORD +352 -0
- warp/examples/assets/cube.usda +0 -42
- warp/examples/assets/sphere.usda +0 -56
- warp/examples/assets/torus.usda +0 -105
- warp_lang-1.0.1.dist-info/RECORD +0 -352
- {warp_lang-1.0.1.dist-info → warp_lang-1.1.0.dist-info}/WHEEL +0 -0
- {warp_lang-1.0.1.dist-info → warp_lang-1.1.0.dist-info}/top_level.txt +0 -0
warp/tests/test_options.py
CHANGED
|
@@ -1,125 +1,123 @@
|
|
|
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
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
import warp as wp
|
|
13
|
-
from warp.tests.unittest_utils import *
|
|
14
|
-
|
|
15
|
-
wp.init()
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
y
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
y
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
y
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
wp.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
wp.
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
wp.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
wp.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
add_function_test(TestOptions, "
|
|
118
|
-
add_function_test(TestOptions, "
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
wp.build.clear_kernel_cache()
|
|
125
|
-
unittest.main(verbosity=2)
|
|
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 contextlib
|
|
9
|
+
import io
|
|
10
|
+
import unittest
|
|
11
|
+
|
|
12
|
+
import warp as wp
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
14
|
+
|
|
15
|
+
wp.init()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@wp.kernel
|
|
19
|
+
def scale(
|
|
20
|
+
x: wp.array(dtype=float),
|
|
21
|
+
y: wp.array(dtype=float),
|
|
22
|
+
):
|
|
23
|
+
y[0] = x[0] ** 2.0
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@wp.kernel(enable_backward=True)
|
|
27
|
+
def scale_1(
|
|
28
|
+
x: wp.array(dtype=float),
|
|
29
|
+
y: wp.array(dtype=float),
|
|
30
|
+
):
|
|
31
|
+
y[0] = x[0] ** 2.0
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@wp.kernel(enable_backward=False)
|
|
35
|
+
def scale_2(
|
|
36
|
+
x: wp.array(dtype=float),
|
|
37
|
+
y: wp.array(dtype=float),
|
|
38
|
+
):
|
|
39
|
+
y[0] = x[0] ** 2.0
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_options_1(test, device):
|
|
43
|
+
x = wp.array([3.0], dtype=float, requires_grad=True, device=device)
|
|
44
|
+
y = wp.zeros_like(x)
|
|
45
|
+
|
|
46
|
+
wp.set_module_options({"enable_backward": False})
|
|
47
|
+
|
|
48
|
+
tape = wp.Tape()
|
|
49
|
+
with tape:
|
|
50
|
+
wp.launch(scale, dim=1, inputs=[x, y], device=device)
|
|
51
|
+
|
|
52
|
+
with contextlib.redirect_stdout(io.StringIO()) as f:
|
|
53
|
+
tape.backward(y)
|
|
54
|
+
|
|
55
|
+
expected = f"Warp UserWarning: Running the tape backwards may produce incorrect gradients because recorded kernel {scale.key} is defined in a module with the option 'enable_backward=False' set.\n"
|
|
56
|
+
|
|
57
|
+
assert f.getvalue() == expected
|
|
58
|
+
assert_np_equal(tape.gradients[x].numpy(), np.array(0.0))
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_options_2(test, device):
|
|
62
|
+
x = wp.array([3.0], dtype=float, requires_grad=True, device=device)
|
|
63
|
+
y = wp.zeros_like(x)
|
|
64
|
+
|
|
65
|
+
wp.set_module_options({"enable_backward": True})
|
|
66
|
+
|
|
67
|
+
tape = wp.Tape()
|
|
68
|
+
with tape:
|
|
69
|
+
wp.launch(scale, dim=1, inputs=[x, y], device=device)
|
|
70
|
+
|
|
71
|
+
tape.backward(y)
|
|
72
|
+
assert_np_equal(tape.gradients[x].numpy(), np.array(6.0))
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_options_3(test, device):
|
|
76
|
+
x = wp.array([3.0], dtype=float, requires_grad=True, device=device)
|
|
77
|
+
y = wp.zeros_like(x)
|
|
78
|
+
|
|
79
|
+
wp.set_module_options({"enable_backward": False})
|
|
80
|
+
|
|
81
|
+
tape = wp.Tape()
|
|
82
|
+
with tape:
|
|
83
|
+
wp.launch(scale_1, dim=1, inputs=[x, y], device=device)
|
|
84
|
+
|
|
85
|
+
tape.backward(y)
|
|
86
|
+
assert_np_equal(tape.gradients[x].numpy(), np.array(6.0))
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_options_4(test, device):
|
|
90
|
+
x = wp.array([3.0], dtype=float, requires_grad=True, device=device)
|
|
91
|
+
y = wp.zeros_like(x)
|
|
92
|
+
|
|
93
|
+
wp.set_module_options({"enable_backward": True})
|
|
94
|
+
|
|
95
|
+
tape = wp.Tape()
|
|
96
|
+
with tape:
|
|
97
|
+
wp.launch(scale_2, dim=1, inputs=[x, y], device=device)
|
|
98
|
+
|
|
99
|
+
with contextlib.redirect_stdout(io.StringIO()) as f:
|
|
100
|
+
tape.backward(y)
|
|
101
|
+
|
|
102
|
+
expected = f"Warp UserWarning: Running the tape backwards may produce incorrect gradients because recorded kernel {scale_2.key} is configured with the option 'enable_backward=False'.\n"
|
|
103
|
+
|
|
104
|
+
assert f.getvalue() == expected
|
|
105
|
+
assert_np_equal(tape.gradients[x].numpy(), np.array(0.0))
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
devices = get_test_devices()
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class TestOptions(unittest.TestCase):
|
|
112
|
+
pass
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
add_function_test(TestOptions, "test_options_1", test_options_1, devices=devices)
|
|
116
|
+
add_function_test(TestOptions, "test_options_2", test_options_2, devices=devices)
|
|
117
|
+
add_function_test(TestOptions, "test_options_3", test_options_3, devices=devices)
|
|
118
|
+
add_function_test(TestOptions, "test_options_4", test_options_4, devices=devices)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
if __name__ == "__main__":
|
|
122
|
+
wp.build.clear_kernel_cache()
|
|
123
|
+
unittest.main(verbosity=2)
|
warp/tests/test_peer.py
CHANGED
|
@@ -1,137 +1,133 @@
|
|
|
1
|
-
# Copyright (c) 2023 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
|
-
|
|
10
|
-
import warp as wp
|
|
11
|
-
from warp.tests.unittest_utils import *
|
|
12
|
-
|
|
13
|
-
wp.init()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def get_device_pair_with_peer_access_support():
|
|
17
|
-
devices = wp.get_cuda_devices()
|
|
18
|
-
for target_device in devices:
|
|
19
|
-
for peer_device in devices:
|
|
20
|
-
if target_device != peer_device:
|
|
21
|
-
if wp.is_peer_access_supported(target_device, peer_device):
|
|
22
|
-
return (target_device, peer_device)
|
|
23
|
-
return None
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def get_device_pair_without_peer_access_support():
|
|
27
|
-
devices = wp.get_cuda_devices()
|
|
28
|
-
for target_device in devices:
|
|
29
|
-
for peer_device in devices:
|
|
30
|
-
if target_device != peer_device:
|
|
31
|
-
if not wp.is_peer_access_supported(target_device, peer_device):
|
|
32
|
-
return (target_device, peer_device)
|
|
33
|
-
return None
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def test_peer_access_self(test, device):
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
wp.set_peer_access_enabled(device, device,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
target_device, peer_device
|
|
59
|
-
|
|
60
|
-
was_enabled
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
#
|
|
88
|
-
target_device, peer_device
|
|
89
|
-
|
|
90
|
-
#
|
|
91
|
-
test.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
#
|
|
105
|
-
test.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
add_function_test(TestPeer, "
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if __name__ == "__main__":
|
|
136
|
-
wp.build.clear_kernel_cache()
|
|
137
|
-
unittest.main(verbosity=2)
|
|
1
|
+
# Copyright (c) 2023 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
|
+
|
|
10
|
+
import warp as wp
|
|
11
|
+
from warp.tests.unittest_utils import *
|
|
12
|
+
|
|
13
|
+
wp.init()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_device_pair_with_peer_access_support():
|
|
17
|
+
devices = wp.get_cuda_devices()
|
|
18
|
+
for target_device in devices:
|
|
19
|
+
for peer_device in devices:
|
|
20
|
+
if target_device != peer_device:
|
|
21
|
+
if wp.is_peer_access_supported(target_device, peer_device):
|
|
22
|
+
return (target_device, peer_device)
|
|
23
|
+
return None
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def get_device_pair_without_peer_access_support():
|
|
27
|
+
devices = wp.get_cuda_devices()
|
|
28
|
+
for target_device in devices:
|
|
29
|
+
for peer_device in devices:
|
|
30
|
+
if target_device != peer_device:
|
|
31
|
+
if not wp.is_peer_access_supported(target_device, peer_device):
|
|
32
|
+
return (target_device, peer_device)
|
|
33
|
+
return None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_peer_access_self(test, device):
|
|
37
|
+
device = wp.get_device(device)
|
|
38
|
+
|
|
39
|
+
assert device.is_cuda
|
|
40
|
+
|
|
41
|
+
# device can access self
|
|
42
|
+
can_access = wp.is_peer_access_supported(device, device)
|
|
43
|
+
test.assertTrue(can_access)
|
|
44
|
+
|
|
45
|
+
# setting peer access to self is a no-op
|
|
46
|
+
wp.set_peer_access_enabled(device, device, True)
|
|
47
|
+
wp.set_peer_access_enabled(device, device, False)
|
|
48
|
+
|
|
49
|
+
# should always be enabled
|
|
50
|
+
enabled = wp.is_peer_access_enabled(device, device)
|
|
51
|
+
test.assertTrue(enabled)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@unittest.skipUnless(get_device_pair_with_peer_access_support(), "Requires devices with peer access support")
|
|
55
|
+
def test_peer_access(test, _):
|
|
56
|
+
target_device, peer_device = get_device_pair_with_peer_access_support()
|
|
57
|
+
|
|
58
|
+
was_enabled = wp.is_peer_access_enabled(target_device, peer_device)
|
|
59
|
+
|
|
60
|
+
if was_enabled:
|
|
61
|
+
# try disabling
|
|
62
|
+
wp.set_peer_access_enabled(target_device, peer_device, False)
|
|
63
|
+
is_enabled = wp.is_peer_access_enabled(target_device, peer_device)
|
|
64
|
+
test.assertFalse(is_enabled)
|
|
65
|
+
|
|
66
|
+
# try re-enabling
|
|
67
|
+
wp.set_peer_access_enabled(target_device, peer_device, True)
|
|
68
|
+
is_enabled = wp.is_peer_access_enabled(target_device, peer_device)
|
|
69
|
+
test.assertTrue(is_enabled)
|
|
70
|
+
else:
|
|
71
|
+
# try enabling
|
|
72
|
+
wp.set_peer_access_enabled(target_device, peer_device, True)
|
|
73
|
+
is_enabled = wp.is_peer_access_enabled(target_device, peer_device)
|
|
74
|
+
test.assertTrue(is_enabled)
|
|
75
|
+
|
|
76
|
+
# try re-disabling
|
|
77
|
+
wp.set_peer_access_enabled(target_device, peer_device, False)
|
|
78
|
+
is_enabled = wp.is_peer_access_enabled(target_device, peer_device)
|
|
79
|
+
test.assertFalse(is_enabled)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@unittest.skipUnless(get_device_pair_without_peer_access_support(), "Requires devices without peer access support")
|
|
83
|
+
def test_peer_access_exceptions_unsupported(test, _):
|
|
84
|
+
# get a CUDA device pair without peer access support
|
|
85
|
+
target_device, peer_device = get_device_pair_without_peer_access_support()
|
|
86
|
+
|
|
87
|
+
# querying is ok, but must return False
|
|
88
|
+
test.assertFalse(wp.is_peer_access_enabled(target_device, peer_device))
|
|
89
|
+
|
|
90
|
+
# enabling should raise RuntimeError
|
|
91
|
+
with test.assertRaises(RuntimeError):
|
|
92
|
+
wp.set_peer_access_enabled(target_device, peer_device, True)
|
|
93
|
+
|
|
94
|
+
# disabling should not raise an error
|
|
95
|
+
wp.set_peer_access_enabled(target_device, peer_device, False)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@unittest.skipUnless(wp.is_cpu_available() and wp.is_cuda_available(), "Requires both CUDA and CPU devices")
|
|
99
|
+
def test_peer_access_exceptions_cpu(test, _):
|
|
100
|
+
# querying is ok, but must return False
|
|
101
|
+
test.assertFalse(wp.is_peer_access_enabled("cuda:0", "cpu"))
|
|
102
|
+
test.assertFalse(wp.is_peer_access_enabled("cpu", "cuda:0"))
|
|
103
|
+
|
|
104
|
+
# enabling should raise ValueError
|
|
105
|
+
with test.assertRaises(ValueError):
|
|
106
|
+
wp.set_peer_access_enabled("cpu", "cuda:0", True)
|
|
107
|
+
with test.assertRaises(ValueError):
|
|
108
|
+
wp.set_peer_access_enabled("cuda:0", "cpu", True)
|
|
109
|
+
|
|
110
|
+
# disabling should not raise an error
|
|
111
|
+
wp.set_peer_access_enabled("cpu", "cuda:0", False)
|
|
112
|
+
wp.set_peer_access_enabled("cuda:0", "cpu", False)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class TestPeer(unittest.TestCase):
|
|
116
|
+
pass
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
cuda_test_devices = get_cuda_test_devices()
|
|
120
|
+
|
|
121
|
+
add_function_test(TestPeer, "test_peer_access_self", test_peer_access_self, devices=cuda_test_devices)
|
|
122
|
+
|
|
123
|
+
# peer access tests
|
|
124
|
+
add_function_test(TestPeer, "test_peer_access", test_peer_access)
|
|
125
|
+
|
|
126
|
+
# peer access exceptions
|
|
127
|
+
add_function_test(TestPeer, "test_peer_access_exceptions_unsupported", test_peer_access_exceptions_unsupported)
|
|
128
|
+
add_function_test(TestPeer, "test_peer_access_exceptions_cpu", test_peer_access_exceptions_cpu)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
if __name__ == "__main__":
|
|
132
|
+
wp.build.clear_kernel_cache()
|
|
133
|
+
unittest.main(verbosity=2)
|