warp-lang 1.0.2__py3-none-manylinux2014_x86_64.whl → 1.1.0__py3-none-manylinux2014_x86_64.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 -277
- 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 -29
- warp/examples/core/example_dem.py +234 -219
- warp/examples/core/example_fluid.py +293 -267
- warp/examples/core/example_graph_capture.py +144 -126
- warp/examples/core/example_marching_cubes.py +188 -174
- warp/examples/core/example_mesh.py +174 -155
- warp/examples/core/example_mesh_intersect.py +205 -193
- warp/examples/core/example_nvdb.py +176 -170
- warp/examples/core/example_raycast.py +105 -90
- warp/examples/core/example_raymarch.py +199 -178
- warp/examples/core/example_render_opengl.py +185 -141
- warp/examples/core/example_sph.py +405 -387
- warp/examples/core/example_torch.py +222 -181
- warp/examples/core/example_wave.py +263 -248
- warp/examples/fem/bsr_utils.py +378 -380
- warp/examples/fem/example_apic_fluid.py +407 -389
- 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 -246
- warp/examples/optim/example_cloth_throw.py +222 -209
- warp/examples/optim/example_diffray.py +566 -536
- warp/examples/optim/example_drone.py +864 -835
- warp/examples/optim/example_inverse_kinematics.py +176 -168
- warp/examples/optim/example_inverse_kinematics_torch.py +185 -169
- warp/examples/optim/example_spring_cage.py +239 -231
- warp/examples/optim/example_trajectory.py +223 -199
- warp/examples/optim/example_walker.py +306 -293
- warp/examples/sim/example_cartpole.py +139 -129
- warp/examples/sim/example_cloth.py +196 -186
- warp/examples/sim/example_granular.py +124 -111
- warp/examples/sim/example_granular_collision_sdf.py +197 -186
- warp/examples/sim/example_jacobian_ik.py +236 -214
- warp/examples/sim/example_particle_chain.py +118 -105
- warp/examples/sim/example_quadruped.py +193 -180
- warp/examples/sim/example_rigid_chain.py +197 -187
- warp/examples/sim/example_rigid_contact.py +189 -177
- warp/examples/sim/example_rigid_force.py +127 -125
- warp/examples/sim/example_rigid_gyroscopic.py +109 -95
- warp/examples/sim/example_rigid_soft_contact.py +134 -122
- warp/examples/sim/example_soft_body.py +190 -177
- 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.2.dist-info → warp_lang-1.1.0.dist-info}/LICENSE.md +126 -126
- {warp_lang-1.0.2.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.2.dist-info/RECORD +0 -352
- {warp_lang-1.0.2.dist-info → warp_lang-1.1.0.dist-info}/WHEEL +0 -0
- {warp_lang-1.0.2.dist-info → warp_lang-1.1.0.dist-info}/top_level.txt +0 -0
warp/tests/test_reload.py
CHANGED
|
@@ -1,217 +1,217 @@
|
|
|
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 importlib
|
|
9
|
-
import os
|
|
10
|
-
import unittest
|
|
11
|
-
|
|
12
|
-
import numpy as np
|
|
13
|
-
|
|
14
|
-
import warp as wp
|
|
15
|
-
|
|
16
|
-
# dummy modules used for testing reload with dependencies
|
|
17
|
-
import warp.tests.aux_test_dependent as test_dependent
|
|
18
|
-
import warp.tests.aux_test_reference as test_reference
|
|
19
|
-
import warp.tests.aux_test_reference_reference as test_reference_reference
|
|
20
|
-
|
|
21
|
-
# dummy module used for testing reload
|
|
22
|
-
import warp.tests.aux_test_square as test_square
|
|
23
|
-
from warp.tests.unittest_utils import *
|
|
24
|
-
|
|
25
|
-
wp.init()
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def reload_module(module):
|
|
29
|
-
# Clearing the .pyc file associated with a module is a necessary workaround
|
|
30
|
-
# for `importlib.reload` to work as expected when run from within Kit.
|
|
31
|
-
cache_file = importlib.util.cache_from_source(module.__file__)
|
|
32
|
-
os.remove(cache_file)
|
|
33
|
-
importlib.reload(module)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def test_redefine(test, device):
|
|
37
|
-
# --------------------------------------------
|
|
38
|
-
# first pass
|
|
39
|
-
|
|
40
|
-
@wp.kernel
|
|
41
|
-
def basic(x: wp.array(dtype=float)):
|
|
42
|
-
tid = wp.tid()
|
|
43
|
-
|
|
44
|
-
x[tid] = float(tid) * 1.0
|
|
45
|
-
|
|
46
|
-
n = 32
|
|
47
|
-
|
|
48
|
-
x = wp.zeros(n, dtype=float, device=device)
|
|
49
|
-
|
|
50
|
-
wp.launch(kernel=basic, dim=n, inputs=[x], device=device)
|
|
51
|
-
|
|
52
|
-
# --------------------------------------------
|
|
53
|
-
# redefine kernel, should trigger a recompile
|
|
54
|
-
|
|
55
|
-
@wp.kernel
|
|
56
|
-
def basic(x: wp.array(dtype=float)):
|
|
57
|
-
tid = wp.tid()
|
|
58
|
-
|
|
59
|
-
x[tid] = float(tid) * 2.0
|
|
60
|
-
|
|
61
|
-
y = wp.zeros(n, dtype=float, device=device)
|
|
62
|
-
|
|
63
|
-
wp.launch(kernel=basic, dim=n, inputs=[y], device=device)
|
|
64
|
-
|
|
65
|
-
assert_np_equal(np.arange(0, n, 1), x.numpy())
|
|
66
|
-
assert_np_equal(np.arange(0, n, 1) * 2.0, y.numpy())
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
square_two = """import warp as wp
|
|
70
|
-
|
|
71
|
-
wp.init()
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
@wp.func
|
|
75
|
-
def sqr(x: float):
|
|
76
|
-
return x * x
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@wp.kernel
|
|
80
|
-
def kern(expect: float):
|
|
81
|
-
wp.expect_eq(sqr(2.0), expect)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def run(expect, device):
|
|
85
|
-
wp.launch(kern, dim=1, inputs=[expect], device=device)
|
|
86
|
-
"""
|
|
87
|
-
|
|
88
|
-
square_four = """import warp as wp
|
|
89
|
-
|
|
90
|
-
wp.init()
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
@wp.func
|
|
94
|
-
def multiply(x: float):
|
|
95
|
-
return x * x
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
@wp.kernel
|
|
99
|
-
def kern(expect: float):
|
|
100
|
-
wp.expect_eq(multiply(4.0), expect)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def run(expect, device):
|
|
104
|
-
wp.launch(kern, dim=1, inputs=[expect], device=device)
|
|
105
|
-
"""
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
def test_reload(test, device):
|
|
109
|
-
# write out the module python and import it
|
|
110
|
-
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_square.py")), "w")
|
|
111
|
-
f.writelines(square_two)
|
|
112
|
-
f.flush()
|
|
113
|
-
f.close()
|
|
114
|
-
|
|
115
|
-
reload_module(test_square)
|
|
116
|
-
test_square.run(expect=4.0, device=device) # 2*2=4
|
|
117
|
-
|
|
118
|
-
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_square.py")), "w")
|
|
119
|
-
f.writelines(square_four)
|
|
120
|
-
f.flush()
|
|
121
|
-
f.close()
|
|
122
|
-
|
|
123
|
-
# reload module, this should trigger all of the funcs / kernels to be updated
|
|
124
|
-
reload_module(test_square)
|
|
125
|
-
test_square.run(expect=16.0, device=device) # 4*4 = 16
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def test_reload_class(test, device):
|
|
129
|
-
def test_func():
|
|
130
|
-
import importlib as imp
|
|
131
|
-
|
|
132
|
-
import warp.tests.aux_test_class_kernel
|
|
133
|
-
from warp.tests.aux_test_class_kernel import ClassKernelTest
|
|
134
|
-
|
|
135
|
-
imp.reload(warp.tests.aux_test_class_kernel)
|
|
136
|
-
|
|
137
|
-
ctest = ClassKernelTest(device)
|
|
138
|
-
expected = np.zeros((10, 3, 3), dtype=np.float32)
|
|
139
|
-
expected[:] = np.eye(3)
|
|
140
|
-
assert_np_equal(expected, ctest.identities.numpy())
|
|
141
|
-
|
|
142
|
-
test_func()
|
|
143
|
-
test_func()
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
template_ref = """# This file is used to test reloading module references.
|
|
147
|
-
|
|
148
|
-
import warp as wp
|
|
149
|
-
import warp.tests.aux_test_reference_reference as refref
|
|
150
|
-
|
|
151
|
-
wp.init()
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
@wp.func
|
|
155
|
-
def magic():
|
|
156
|
-
return {} * refref.more_magic()
|
|
157
|
-
"""
|
|
158
|
-
|
|
159
|
-
template_refref = """# This file is used to test reloading module references.
|
|
160
|
-
|
|
161
|
-
import warp as wp
|
|
162
|
-
|
|
163
|
-
wp.init()
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
@wp.func
|
|
167
|
-
def more_magic():
|
|
168
|
-
return {}
|
|
169
|
-
"""
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
def test_reload_references(test, device):
|
|
173
|
-
path_ref = os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_reference.py"))
|
|
174
|
-
path_refref = os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_reference_reference.py"))
|
|
175
|
-
|
|
176
|
-
# rewrite both dependency modules and reload them
|
|
177
|
-
with open(path_ref, "w") as f:
|
|
178
|
-
f.writelines(template_ref.format(1.0))
|
|
179
|
-
importlib.reload(test_reference)
|
|
180
|
-
|
|
181
|
-
with open(path_refref, "w") as f:
|
|
182
|
-
f.writelines(template_refref.format(1.0))
|
|
183
|
-
importlib.reload(test_reference_reference)
|
|
184
|
-
|
|
185
|
-
test_dependent.run(expect=1.0, device=device) # 1 * 1 = 1
|
|
186
|
-
|
|
187
|
-
# rewrite and reload the first dependency module
|
|
188
|
-
with open(path_ref, "w") as f:
|
|
189
|
-
f.writelines(template_ref.format(2.0))
|
|
190
|
-
importlib.reload(test_reference)
|
|
191
|
-
|
|
192
|
-
test_dependent.run(expect=2.0, device=device) # 2 * 1 = 1
|
|
193
|
-
|
|
194
|
-
# rewrite and reload the second dependency module
|
|
195
|
-
with open(path_refref, "w") as f:
|
|
196
|
-
f.writelines(template_refref.format(2.0))
|
|
197
|
-
importlib.reload(test_reference_reference)
|
|
198
|
-
|
|
199
|
-
test_dependent.run(expect=4.0, device=device) # 2 * 2 = 4
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
devices = get_test_devices()
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
class TestReload(unittest.TestCase):
|
|
206
|
-
pass
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
add_function_test(TestReload, "test_redefine", test_redefine, devices=devices)
|
|
210
|
-
add_function_test(TestReload, "test_reload", test_reload, devices=devices)
|
|
211
|
-
add_function_test(TestReload, "test_reload_class", test_reload_class, devices=devices)
|
|
212
|
-
add_function_test(TestReload, "test_reload_references", test_reload_references, devices=devices)
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
if __name__ == "__main__":
|
|
216
|
-
wp.build.clear_kernel_cache()
|
|
217
|
-
unittest.main(verbosity=2, failfast=False)
|
|
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 importlib
|
|
9
|
+
import os
|
|
10
|
+
import unittest
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
import warp as wp
|
|
15
|
+
|
|
16
|
+
# dummy modules used for testing reload with dependencies
|
|
17
|
+
import warp.tests.aux_test_dependent as test_dependent
|
|
18
|
+
import warp.tests.aux_test_reference as test_reference
|
|
19
|
+
import warp.tests.aux_test_reference_reference as test_reference_reference
|
|
20
|
+
|
|
21
|
+
# dummy module used for testing reload
|
|
22
|
+
import warp.tests.aux_test_square as test_square
|
|
23
|
+
from warp.tests.unittest_utils import *
|
|
24
|
+
|
|
25
|
+
wp.init()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def reload_module(module):
|
|
29
|
+
# Clearing the .pyc file associated with a module is a necessary workaround
|
|
30
|
+
# for `importlib.reload` to work as expected when run from within Kit.
|
|
31
|
+
cache_file = importlib.util.cache_from_source(module.__file__)
|
|
32
|
+
os.remove(cache_file)
|
|
33
|
+
importlib.reload(module)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_redefine(test, device):
|
|
37
|
+
# --------------------------------------------
|
|
38
|
+
# first pass
|
|
39
|
+
|
|
40
|
+
@wp.kernel
|
|
41
|
+
def basic(x: wp.array(dtype=float)):
|
|
42
|
+
tid = wp.tid()
|
|
43
|
+
|
|
44
|
+
x[tid] = float(tid) * 1.0
|
|
45
|
+
|
|
46
|
+
n = 32
|
|
47
|
+
|
|
48
|
+
x = wp.zeros(n, dtype=float, device=device)
|
|
49
|
+
|
|
50
|
+
wp.launch(kernel=basic, dim=n, inputs=[x], device=device)
|
|
51
|
+
|
|
52
|
+
# --------------------------------------------
|
|
53
|
+
# redefine kernel, should trigger a recompile
|
|
54
|
+
|
|
55
|
+
@wp.kernel
|
|
56
|
+
def basic(x: wp.array(dtype=float)):
|
|
57
|
+
tid = wp.tid()
|
|
58
|
+
|
|
59
|
+
x[tid] = float(tid) * 2.0
|
|
60
|
+
|
|
61
|
+
y = wp.zeros(n, dtype=float, device=device)
|
|
62
|
+
|
|
63
|
+
wp.launch(kernel=basic, dim=n, inputs=[y], device=device)
|
|
64
|
+
|
|
65
|
+
assert_np_equal(np.arange(0, n, 1), x.numpy())
|
|
66
|
+
assert_np_equal(np.arange(0, n, 1) * 2.0, y.numpy())
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
square_two = """import warp as wp
|
|
70
|
+
|
|
71
|
+
wp.init()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@wp.func
|
|
75
|
+
def sqr(x: float):
|
|
76
|
+
return x * x
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@wp.kernel
|
|
80
|
+
def kern(expect: float):
|
|
81
|
+
wp.expect_eq(sqr(2.0), expect)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def run(expect, device):
|
|
85
|
+
wp.launch(kern, dim=1, inputs=[expect], device=device)
|
|
86
|
+
"""
|
|
87
|
+
|
|
88
|
+
square_four = """import warp as wp
|
|
89
|
+
|
|
90
|
+
wp.init()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@wp.func
|
|
94
|
+
def multiply(x: float):
|
|
95
|
+
return x * x
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
@wp.kernel
|
|
99
|
+
def kern(expect: float):
|
|
100
|
+
wp.expect_eq(multiply(4.0), expect)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def run(expect, device):
|
|
104
|
+
wp.launch(kern, dim=1, inputs=[expect], device=device)
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def test_reload(test, device):
|
|
109
|
+
# write out the module python and import it
|
|
110
|
+
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_square.py")), "w")
|
|
111
|
+
f.writelines(square_two)
|
|
112
|
+
f.flush()
|
|
113
|
+
f.close()
|
|
114
|
+
|
|
115
|
+
reload_module(test_square)
|
|
116
|
+
test_square.run(expect=4.0, device=device) # 2*2=4
|
|
117
|
+
|
|
118
|
+
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_square.py")), "w")
|
|
119
|
+
f.writelines(square_four)
|
|
120
|
+
f.flush()
|
|
121
|
+
f.close()
|
|
122
|
+
|
|
123
|
+
# reload module, this should trigger all of the funcs / kernels to be updated
|
|
124
|
+
reload_module(test_square)
|
|
125
|
+
test_square.run(expect=16.0, device=device) # 4*4 = 16
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_reload_class(test, device):
|
|
129
|
+
def test_func():
|
|
130
|
+
import importlib as imp
|
|
131
|
+
|
|
132
|
+
import warp.tests.aux_test_class_kernel
|
|
133
|
+
from warp.tests.aux_test_class_kernel import ClassKernelTest
|
|
134
|
+
|
|
135
|
+
imp.reload(warp.tests.aux_test_class_kernel)
|
|
136
|
+
|
|
137
|
+
ctest = ClassKernelTest(device)
|
|
138
|
+
expected = np.zeros((10, 3, 3), dtype=np.float32)
|
|
139
|
+
expected[:] = np.eye(3)
|
|
140
|
+
assert_np_equal(expected, ctest.identities.numpy())
|
|
141
|
+
|
|
142
|
+
test_func()
|
|
143
|
+
test_func()
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
template_ref = """# This file is used to test reloading module references.
|
|
147
|
+
|
|
148
|
+
import warp as wp
|
|
149
|
+
import warp.tests.aux_test_reference_reference as refref
|
|
150
|
+
|
|
151
|
+
wp.init()
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@wp.func
|
|
155
|
+
def magic():
|
|
156
|
+
return {} * refref.more_magic()
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
template_refref = """# This file is used to test reloading module references.
|
|
160
|
+
|
|
161
|
+
import warp as wp
|
|
162
|
+
|
|
163
|
+
wp.init()
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
@wp.func
|
|
167
|
+
def more_magic():
|
|
168
|
+
return {}
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def test_reload_references(test, device):
|
|
173
|
+
path_ref = os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_reference.py"))
|
|
174
|
+
path_refref = os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_reference_reference.py"))
|
|
175
|
+
|
|
176
|
+
# rewrite both dependency modules and reload them
|
|
177
|
+
with open(path_ref, "w") as f:
|
|
178
|
+
f.writelines(template_ref.format(1.0))
|
|
179
|
+
importlib.reload(test_reference)
|
|
180
|
+
|
|
181
|
+
with open(path_refref, "w") as f:
|
|
182
|
+
f.writelines(template_refref.format(1.0))
|
|
183
|
+
importlib.reload(test_reference_reference)
|
|
184
|
+
|
|
185
|
+
test_dependent.run(expect=1.0, device=device) # 1 * 1 = 1
|
|
186
|
+
|
|
187
|
+
# rewrite and reload the first dependency module
|
|
188
|
+
with open(path_ref, "w") as f:
|
|
189
|
+
f.writelines(template_ref.format(2.0))
|
|
190
|
+
importlib.reload(test_reference)
|
|
191
|
+
|
|
192
|
+
test_dependent.run(expect=2.0, device=device) # 2 * 1 = 1
|
|
193
|
+
|
|
194
|
+
# rewrite and reload the second dependency module
|
|
195
|
+
with open(path_refref, "w") as f:
|
|
196
|
+
f.writelines(template_refref.format(2.0))
|
|
197
|
+
importlib.reload(test_reference_reference)
|
|
198
|
+
|
|
199
|
+
test_dependent.run(expect=4.0, device=device) # 2 * 2 = 4
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
devices = get_test_devices()
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class TestReload(unittest.TestCase):
|
|
206
|
+
pass
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
add_function_test(TestReload, "test_redefine", test_redefine, devices=devices)
|
|
210
|
+
add_function_test(TestReload, "test_reload", test_reload, devices=devices)
|
|
211
|
+
add_function_test(TestReload, "test_reload_class", test_reload_class, devices=devices)
|
|
212
|
+
add_function_test(TestReload, "test_reload_references", test_reload_references, devices=devices)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
if __name__ == "__main__":
|
|
216
|
+
wp.build.clear_kernel_cache()
|
|
217
|
+
unittest.main(verbosity=2, failfast=False)
|