warp-lang 1.0.0b2__py3-none-manylinux2014_x86_64.whl → 1.0.0b6__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.
- docs/conf.py +17 -5
- examples/env/env_ant.py +1 -1
- examples/env/env_cartpole.py +1 -1
- examples/env/env_humanoid.py +1 -1
- examples/env/env_usd.py +4 -1
- examples/env/environment.py +8 -9
- examples/example_dem.py +34 -33
- examples/example_diffray.py +364 -337
- examples/example_fluid.py +32 -23
- examples/example_jacobian_ik.py +97 -93
- examples/example_marching_cubes.py +6 -16
- examples/example_mesh.py +6 -16
- examples/example_mesh_intersect.py +16 -14
- examples/example_nvdb.py +14 -16
- examples/example_raycast.py +14 -13
- examples/example_raymarch.py +16 -23
- examples/example_render_opengl.py +19 -10
- examples/example_sim_cartpole.py +82 -78
- examples/example_sim_cloth.py +45 -48
- examples/example_sim_fk_grad.py +51 -44
- examples/example_sim_fk_grad_torch.py +47 -40
- examples/example_sim_grad_bounce.py +108 -133
- examples/example_sim_grad_cloth.py +99 -113
- examples/example_sim_granular.py +5 -6
- examples/{example_sim_sdf_shape.py → example_sim_granular_collision_sdf.py} +37 -26
- examples/example_sim_neo_hookean.py +51 -55
- examples/example_sim_particle_chain.py +4 -4
- examples/example_sim_quadruped.py +126 -81
- examples/example_sim_rigid_chain.py +54 -61
- examples/example_sim_rigid_contact.py +66 -70
- examples/example_sim_rigid_fem.py +3 -3
- examples/example_sim_rigid_force.py +1 -1
- examples/example_sim_rigid_gyroscopic.py +3 -4
- examples/example_sim_rigid_kinematics.py +28 -39
- examples/example_sim_trajopt.py +112 -110
- examples/example_sph.py +9 -8
- examples/example_wave.py +7 -7
- examples/fem/bsr_utils.py +30 -17
- examples/fem/example_apic_fluid.py +85 -69
- examples/fem/example_convection_diffusion.py +97 -93
- examples/fem/example_convection_diffusion_dg.py +142 -149
- examples/fem/example_convection_diffusion_dg0.py +141 -136
- examples/fem/example_deformed_geometry.py +146 -0
- examples/fem/example_diffusion.py +115 -84
- examples/fem/example_diffusion_3d.py +116 -86
- examples/fem/example_diffusion_mgpu.py +102 -79
- examples/fem/example_mixed_elasticity.py +139 -100
- examples/fem/example_navier_stokes.py +175 -162
- examples/fem/example_stokes.py +143 -111
- examples/fem/example_stokes_transfer.py +186 -157
- examples/fem/mesh_utils.py +59 -97
- examples/fem/plot_utils.py +138 -17
- tools/ci/publishing/build_nodes_info.py +54 -0
- warp/__init__.py +4 -3
- warp/__init__.pyi +1 -0
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +5 -3
- warp/build_dll.py +29 -9
- warp/builtins.py +836 -492
- warp/codegen.py +864 -553
- warp/config.py +3 -1
- warp/context.py +389 -172
- warp/fem/__init__.py +24 -6
- warp/fem/cache.py +318 -25
- warp/fem/dirichlet.py +7 -3
- warp/fem/domain.py +14 -0
- warp/fem/field/__init__.py +30 -38
- warp/fem/field/field.py +149 -0
- warp/fem/field/nodal_field.py +244 -138
- warp/fem/field/restriction.py +8 -6
- warp/fem/field/test.py +127 -59
- warp/fem/field/trial.py +117 -60
- warp/fem/geometry/__init__.py +5 -1
- warp/fem/geometry/deformed_geometry.py +271 -0
- warp/fem/geometry/element.py +24 -1
- warp/fem/geometry/geometry.py +86 -14
- warp/fem/geometry/grid_2d.py +112 -54
- warp/fem/geometry/grid_3d.py +134 -65
- warp/fem/geometry/hexmesh.py +953 -0
- warp/fem/geometry/partition.py +85 -33
- warp/fem/geometry/quadmesh_2d.py +532 -0
- warp/fem/geometry/tetmesh.py +451 -115
- warp/fem/geometry/trimesh_2d.py +197 -92
- warp/fem/integrate.py +534 -268
- warp/fem/operator.py +58 -31
- warp/fem/polynomial.py +11 -0
- warp/fem/quadrature/__init__.py +1 -1
- warp/fem/quadrature/pic_quadrature.py +150 -58
- warp/fem/quadrature/quadrature.py +209 -57
- warp/fem/space/__init__.py +230 -53
- warp/fem/space/basis_space.py +489 -0
- warp/fem/space/collocated_function_space.py +105 -0
- warp/fem/space/dof_mapper.py +49 -2
- warp/fem/space/function_space.py +90 -39
- warp/fem/space/grid_2d_function_space.py +149 -496
- warp/fem/space/grid_3d_function_space.py +173 -538
- warp/fem/space/hexmesh_function_space.py +352 -0
- warp/fem/space/partition.py +129 -76
- warp/fem/space/quadmesh_2d_function_space.py +369 -0
- warp/fem/space/restriction.py +46 -34
- 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 +132 -1039
- warp/fem/space/topology.py +295 -0
- warp/fem/space/trimesh_2d_function_space.py +104 -742
- warp/fem/types.py +13 -11
- warp/fem/utils.py +335 -60
- warp/native/array.h +120 -34
- warp/native/builtin.h +101 -72
- warp/native/bvh.cpp +73 -325
- warp/native/bvh.cu +406 -23
- warp/native/bvh.h +22 -40
- warp/native/clang/clang.cpp +1 -0
- warp/native/crt.h +2 -0
- warp/native/cuda_util.cpp +8 -3
- warp/native/cuda_util.h +1 -0
- warp/native/exports.h +1522 -1243
- warp/native/intersect.h +19 -4
- warp/native/intersect_adj.h +8 -8
- warp/native/mat.h +76 -17
- warp/native/mesh.cpp +33 -108
- warp/native/mesh.cu +114 -18
- warp/native/mesh.h +395 -40
- warp/native/noise.h +272 -329
- warp/native/quat.h +51 -8
- warp/native/rand.h +44 -34
- warp/native/reduce.cpp +1 -1
- warp/native/sparse.cpp +4 -4
- warp/native/sparse.cu +163 -155
- warp/native/spatial.h +2 -2
- warp/native/temp_buffer.h +18 -14
- warp/native/vec.h +103 -21
- warp/native/warp.cpp +2 -1
- warp/native/warp.cu +28 -3
- warp/native/warp.h +4 -3
- warp/render/render_opengl.py +261 -109
- warp/sim/__init__.py +1 -2
- warp/sim/articulation.py +385 -185
- warp/sim/import_mjcf.py +59 -48
- warp/sim/import_urdf.py +15 -15
- warp/sim/import_usd.py +174 -102
- warp/sim/inertia.py +17 -18
- warp/sim/integrator_xpbd.py +4 -3
- warp/sim/model.py +330 -250
- warp/sim/render.py +1 -1
- warp/sparse.py +625 -152
- warp/stubs.py +341 -309
- warp/tape.py +9 -6
- warp/tests/__main__.py +3 -6
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- 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 +94 -74
- warp/tests/test_array.py +82 -101
- warp/tests/test_array_reduce.py +57 -23
- warp/tests/test_atomic.py +64 -28
- warp/tests/test_bool.py +22 -12
- warp/tests/test_builtins_resolution.py +1292 -0
- warp/tests/test_bvh.py +18 -18
- warp/tests/test_closest_point_edge_edge.py +54 -57
- warp/tests/test_codegen.py +165 -134
- 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 +75 -75
- warp/tests/test_examples.py +237 -0
- warp/tests/test_fabricarray.py +22 -24
- warp/tests/test_fast_math.py +15 -11
- warp/tests/test_fem.py +1034 -124
- warp/tests/test_fp16.py +23 -16
- warp/tests/test_func.py +187 -86
- warp/tests/test_generics.py +194 -49
- warp/tests/test_grad.py +123 -181
- warp/tests/test_grad_customs.py +176 -0
- warp/tests/test_hash_grid.py +35 -34
- warp/tests/test_import.py +10 -23
- warp/tests/test_indexedarray.py +24 -25
- warp/tests/test_intersect.py +18 -9
- warp/tests/test_large.py +141 -0
- warp/tests/test_launch.py +14 -41
- warp/tests/test_lerp.py +64 -65
- warp/tests/test_lvalue.py +493 -0
- warp/tests/test_marching_cubes.py +12 -13
- warp/tests/test_mat.py +517 -2898
- 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 +304 -69
- warp/tests/test_matmul_lite.py +410 -0
- warp/tests/test_mesh.py +60 -22
- warp/tests/test_mesh_query_aabb.py +21 -25
- warp/tests/test_mesh_query_point.py +111 -22
- warp/tests/test_mesh_query_ray.py +12 -24
- 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 +168 -20
- warp/tests/test_smoothstep.py +9 -11
- warp/tests/test_snippet.py +143 -0
- warp/tests/test_sparse.py +261 -63
- warp/tests/test_spatial.py +276 -243
- warp/tests/test_streams.py +110 -85
- warp/tests/test_struct.py +268 -63
- warp/tests/test_tape.py +39 -21
- warp/tests/test_torch.py +90 -86
- warp/tests/test_transient_module.py +10 -12
- warp/tests/test_types.py +363 -0
- warp/tests/test_utils.py +451 -0
- warp/tests/test_vec.py +354 -2050
- warp/tests/test_vec_lite.py +73 -0
- warp/tests/test_vec_scalar_ops.py +2099 -0
- warp/tests/test_volume.py +418 -376
- warp/tests/test_volume_write.py +124 -134
- warp/tests/unittest_serial.py +35 -0
- warp/tests/unittest_suites.py +291 -0
- warp/tests/unittest_utils.py +342 -0
- warp/tests/{test_misc.py → unused_test_misc.py} +13 -5
- warp/tests/{test_debug.py → walkthough_debug.py} +3 -17
- warp/thirdparty/appdirs.py +36 -45
- warp/thirdparty/unittest_parallel.py +589 -0
- warp/types.py +622 -211
- warp/utils.py +54 -393
- warp_lang-1.0.0b6.dist-info/METADATA +238 -0
- warp_lang-1.0.0b6.dist-info/RECORD +409 -0
- {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/WHEEL +1 -1
- examples/example_cache_management.py +0 -40
- examples/example_multigpu.py +0 -54
- examples/example_struct.py +0 -65
- examples/fem/example_stokes_transfer_3d.py +0 -210
- warp/fem/field/discrete_field.py +0 -80
- warp/fem/space/nodal_function_space.py +0 -233
- warp/tests/test_all.py +0 -223
- 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-1.0.0b2.dist-info/METADATA +0 -26
- warp_lang-1.0.0b2.dist-info/RECORD +0 -378
- /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-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/LICENSE.md +0 -0
- {warp_lang-1.0.0b2.dist-info → warp_lang-1.0.0b6.dist-info}/top_level.txt +0 -0
warp/tests/test_rand.py
CHANGED
|
@@ -5,12 +5,15 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
+
import unittest
|
|
9
|
+
|
|
8
10
|
import numpy as np
|
|
9
11
|
|
|
12
|
+
import warp as wp
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
14
|
+
|
|
10
15
|
# import matplotlib.pyplot as plt
|
|
11
16
|
|
|
12
|
-
import warp as wp
|
|
13
|
-
from warp.tests.test_base import *
|
|
14
17
|
|
|
15
18
|
wp.init()
|
|
16
19
|
|
|
@@ -60,7 +63,7 @@ def test_rand(test, device):
|
|
|
60
63
|
wp.copy(int_ab_host, int_ab_device)
|
|
61
64
|
wp.copy(float_01_host, float_01_device)
|
|
62
65
|
wp.copy(float_ab_host, float_ab_device)
|
|
63
|
-
wp.
|
|
66
|
+
wp.synchronize_device(device)
|
|
64
67
|
|
|
65
68
|
int_a = int_a_host.numpy()
|
|
66
69
|
int_ab = int_ab_host.numpy()
|
|
@@ -243,10 +246,10 @@ def test_poisson(test, device):
|
|
|
243
246
|
# _ = plt.hist(poisson_high.numpy(), bins)
|
|
244
247
|
# plt.show()
|
|
245
248
|
|
|
246
|
-
np.random.default_rng(seed)
|
|
249
|
+
rng = np.random.default_rng(seed)
|
|
247
250
|
|
|
248
|
-
np_poisson_low =
|
|
249
|
-
np_poisson_high =
|
|
251
|
+
np_poisson_low = rng.poisson(lam=3.0, size=N)
|
|
252
|
+
np_poisson_high = rng.poisson(lam=42.0, size=N)
|
|
250
253
|
|
|
251
254
|
poisson_low_mean = np.mean(poisson_low.numpy())
|
|
252
255
|
np_poisson_low_mean = np.mean(np_poisson_low)
|
|
@@ -267,20 +270,19 @@ def test_poisson(test, device):
|
|
|
267
270
|
test.assertTrue(np.abs(poisson_high_std - np_poisson_high_std) <= 2e-1)
|
|
268
271
|
|
|
269
272
|
|
|
270
|
-
|
|
271
|
-
|
|
273
|
+
devices = get_test_devices()
|
|
274
|
+
|
|
272
275
|
|
|
273
|
-
|
|
274
|
-
|
|
276
|
+
class TestRand(unittest.TestCase):
|
|
277
|
+
pass
|
|
275
278
|
|
|
276
|
-
add_function_test(TestNoise, "test_rand", test_rand, devices=devices)
|
|
277
|
-
add_function_test(TestNoise, "test_sample_cdf", test_sample_cdf, devices=devices)
|
|
278
|
-
add_function_test(TestNoise, "test_sampling_methods", test_sampling_methods, devices=devices)
|
|
279
|
-
add_function_test(TestNoise, "test_poisson", test_poisson, devices=devices)
|
|
280
279
|
|
|
281
|
-
|
|
280
|
+
add_function_test(TestRand, "test_rand", test_rand, devices=devices)
|
|
281
|
+
add_function_test(TestRand, "test_sample_cdf", test_sample_cdf, devices=devices)
|
|
282
|
+
add_function_test(TestRand, "test_sampling_methods", test_sampling_methods, devices=devices)
|
|
283
|
+
add_function_test(TestRand, "test_poisson", test_poisson, devices=devices)
|
|
282
284
|
|
|
283
285
|
|
|
284
286
|
if __name__ == "__main__":
|
|
285
|
-
|
|
287
|
+
wp.build.clear_kernel_cache()
|
|
286
288
|
unittest.main(verbosity=2)
|
warp/tests/test_reload.py
CHANGED
|
@@ -5,29 +5,34 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
import
|
|
8
|
+
import importlib
|
|
9
|
+
import os
|
|
10
|
+
import unittest
|
|
10
11
|
|
|
11
|
-
import
|
|
12
|
+
import numpy as np
|
|
12
13
|
|
|
13
14
|
import warp as wp
|
|
14
|
-
from warp.tests.test_base import *
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
import
|
|
18
|
-
import
|
|
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
|
|
19
20
|
|
|
20
21
|
# dummy module used for testing reload
|
|
21
|
-
import warp.tests.
|
|
22
|
-
|
|
23
|
-
# dummy modules used for testing reload with dependencies
|
|
24
|
-
import warp.tests.test_dependent as test_dependent
|
|
25
|
-
import warp.tests.test_reference as test_reference
|
|
26
|
-
import warp.tests.test_reference_reference as test_reference_reference
|
|
22
|
+
import warp.tests.aux_test_square as test_square
|
|
23
|
+
from warp.tests.unittest_utils import *
|
|
27
24
|
|
|
28
25
|
wp.init()
|
|
29
26
|
|
|
30
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
|
+
|
|
31
36
|
def test_redefine(test, device):
|
|
32
37
|
# --------------------------------------------
|
|
33
38
|
# first pass
|
|
@@ -102,32 +107,32 @@ def run(expect, device):
|
|
|
102
107
|
|
|
103
108
|
def test_reload(test, device):
|
|
104
109
|
# write out the module python and import it
|
|
105
|
-
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "
|
|
110
|
+
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_square.py")), "w")
|
|
106
111
|
f.writelines(square_two)
|
|
107
112
|
f.flush()
|
|
108
113
|
f.close()
|
|
109
114
|
|
|
110
|
-
|
|
115
|
+
reload_module(test_square)
|
|
111
116
|
test_square.run(expect=4.0, device=device) # 2*2=4
|
|
112
117
|
|
|
113
|
-
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "
|
|
118
|
+
f = open(os.path.abspath(os.path.join(os.path.dirname(__file__), "aux_test_square.py")), "w")
|
|
114
119
|
f.writelines(square_four)
|
|
115
120
|
f.flush()
|
|
116
121
|
f.close()
|
|
117
122
|
|
|
118
123
|
# reload module, this should trigger all of the funcs / kernels to be updated
|
|
119
|
-
|
|
124
|
+
reload_module(test_square)
|
|
120
125
|
test_square.run(expect=16.0, device=device) # 4*4 = 16
|
|
121
126
|
|
|
122
127
|
|
|
123
128
|
def test_reload_class(test, device):
|
|
124
129
|
def test_func():
|
|
125
|
-
import warp.tests.test_class_kernel
|
|
126
|
-
from warp.tests.test_class_kernel import ClassKernelTest
|
|
127
|
-
|
|
128
130
|
import importlib as imp
|
|
129
131
|
|
|
130
|
-
|
|
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)
|
|
131
136
|
|
|
132
137
|
ctest = ClassKernelTest(device)
|
|
133
138
|
expected = np.zeros((10, 3, 3), dtype=np.float32)
|
|
@@ -141,7 +146,7 @@ def test_reload_class(test, device):
|
|
|
141
146
|
template_ref = """# This file is used to test reloading module references.
|
|
142
147
|
|
|
143
148
|
import warp as wp
|
|
144
|
-
import warp.tests.
|
|
149
|
+
import warp.tests.aux_test_reference_reference as refref
|
|
145
150
|
|
|
146
151
|
wp.init()
|
|
147
152
|
|
|
@@ -165,8 +170,8 @@ def more_magic():
|
|
|
165
170
|
|
|
166
171
|
|
|
167
172
|
def test_reload_references(test, device):
|
|
168
|
-
path_ref = os.path.abspath(os.path.join(os.path.dirname(__file__), "
|
|
169
|
-
path_refref = os.path.abspath(os.path.join(os.path.dirname(__file__), "
|
|
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"))
|
|
170
175
|
|
|
171
176
|
# rewrite both dependency modules and reload them
|
|
172
177
|
with open(path_ref, "w") as f:
|
|
@@ -194,20 +199,19 @@ def test_reload_references(test, device):
|
|
|
194
199
|
test_dependent.run(expect=4.0, device=device) # 2 * 2 = 4
|
|
195
200
|
|
|
196
201
|
|
|
197
|
-
|
|
198
|
-
|
|
202
|
+
devices = get_test_devices()
|
|
203
|
+
|
|
199
204
|
|
|
200
|
-
|
|
201
|
-
|
|
205
|
+
class TestReload(unittest.TestCase):
|
|
206
|
+
pass
|
|
202
207
|
|
|
203
|
-
add_function_test(TestReload, "test_redefine", test_redefine, devices=devices)
|
|
204
|
-
add_function_test(TestReload, "test_reload", test_reload, devices=devices)
|
|
205
|
-
add_function_test(TestReload, "test_reload_class", test_reload_class, devices=devices)
|
|
206
|
-
add_function_test(TestReload, "test_reload_references", test_reload_references, devices=devices)
|
|
207
208
|
|
|
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)
|
|
209
213
|
|
|
210
214
|
|
|
211
215
|
if __name__ == "__main__":
|
|
212
|
-
|
|
216
|
+
wp.build.clear_kernel_cache()
|
|
213
217
|
unittest.main(verbosity=2, failfast=False)
|
warp/tests/test_rounding.py
CHANGED
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
from warp.tests.test_base import *
|
|
8
|
+
import unittest
|
|
10
9
|
|
|
11
10
|
import numpy as np
|
|
12
11
|
|
|
12
|
+
import warp as wp
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
14
|
+
|
|
13
15
|
compare_to_numpy = False
|
|
14
16
|
print_results = False
|
|
15
17
|
|
|
@@ -25,6 +27,7 @@ def test_kernel(
|
|
|
25
27
|
x_cast: wp.array(dtype=float),
|
|
26
28
|
x_floor: wp.array(dtype=float),
|
|
27
29
|
x_ceil: wp.array(dtype=float),
|
|
30
|
+
x_frac: wp.array(dtype=float),
|
|
28
31
|
):
|
|
29
32
|
tid = wp.tid()
|
|
30
33
|
|
|
@@ -34,6 +37,7 @@ def test_kernel(
|
|
|
34
37
|
x_cast[tid] = float(int(x[tid]))
|
|
35
38
|
x_floor[tid] = wp.floor(x[tid])
|
|
36
39
|
x_ceil[tid] = wp.ceil(x[tid])
|
|
40
|
+
x_frac[tid] = wp.frac(x[tid])
|
|
37
41
|
|
|
38
42
|
|
|
39
43
|
def test_rounding(test, device):
|
|
@@ -82,8 +86,11 @@ def test_rounding(test, device):
|
|
|
82
86
|
x_cast = wp.empty(N, dtype=float, device=device)
|
|
83
87
|
x_floor = wp.empty(N, dtype=float, device=device)
|
|
84
88
|
x_ceil = wp.empty(N, dtype=float, device=device)
|
|
89
|
+
x_frac = wp.empty(N, dtype=float, device=device)
|
|
85
90
|
|
|
86
|
-
wp.launch(
|
|
91
|
+
wp.launch(
|
|
92
|
+
kernel=test_kernel, dim=N, inputs=[x, x_round, x_rint, x_trunc, x_cast, x_floor, x_ceil, x_frac], device=device
|
|
93
|
+
)
|
|
87
94
|
|
|
88
95
|
wp.synchronize()
|
|
89
96
|
|
|
@@ -93,46 +100,47 @@ def test_rounding(test, device):
|
|
|
93
100
|
nx_cast = x_cast.numpy().reshape(N)
|
|
94
101
|
nx_floor = x_floor.numpy().reshape(N)
|
|
95
102
|
nx_ceil = x_ceil.numpy().reshape(N)
|
|
103
|
+
nx_frac = x_frac.numpy().reshape(N)
|
|
96
104
|
|
|
97
|
-
tab = np.stack([nx, nx_round, nx_rint, nx_trunc, nx_cast, nx_floor, nx_ceil], axis=1)
|
|
105
|
+
tab = np.stack([nx, nx_round, nx_rint, nx_trunc, nx_cast, nx_floor, nx_ceil, nx_frac], axis=1)
|
|
98
106
|
|
|
99
107
|
golden = np.array(
|
|
100
108
|
[
|
|
101
|
-
[4.9, 5.0, 5.0, 4.0, 4.0, 4.0, 5.0],
|
|
102
|
-
[4.5, 5.0, 4.0, 4.0, 4.0, 4.0, 5.0],
|
|
103
|
-
[4.1, 4.0, 4.0, 4.0, 4.0, 4.0, 5.0],
|
|
104
|
-
[3.9, 4.0, 4.0, 3.0, 3.0, 3.0, 4.0],
|
|
105
|
-
[3.5, 4.0, 4.0, 3.0, 3.0, 3.0, 4.0],
|
|
106
|
-
[3.1, 3.0, 3.0, 3.0, 3.0, 3.0, 4.0],
|
|
107
|
-
[2.9, 3.0, 3.0, 2.0, 2.0, 2.0, 3.0],
|
|
108
|
-
[2.5, 3.0, 2.0, 2.0, 2.0, 2.0, 3.0],
|
|
109
|
-
[2.1, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0],
|
|
110
|
-
[1.9, 2.0, 2.0, 1.0, 1.0, 1.0, 2.0],
|
|
111
|
-
[1.5, 2.0, 2.0, 1.0, 1.0, 1.0, 2.0],
|
|
112
|
-
[1.1, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0],
|
|
113
|
-
[0.9, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0],
|
|
114
|
-
[0.5, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0],
|
|
115
|
-
[0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
|
|
116
|
-
[-0.1, -0.0, -0.0, -0.0, 0.0, -1.0, -0.0],
|
|
117
|
-
[-0.5, -1.0, -0.0, -0.0, 0.0, -1.0, -0.0],
|
|
118
|
-
[-0.9, -1.0, -1.0, -0.0, 0.0, -1.0, -0.0],
|
|
119
|
-
[-1.1, -1.0, -1.0, -1.0, -1.0, -2.0, -1.0],
|
|
120
|
-
[-1.5, -2.0, -2.0, -1.0, -1.0, -2.0, -1.0],
|
|
121
|
-
[-1.9, -2.0, -2.0, -1.0, -1.0, -2.0, -1.0],
|
|
122
|
-
[-2.1, -2.0, -2.0, -2.0, -2.0, -3.0, -2.0],
|
|
123
|
-
[-2.5, -3.0, -2.0, -2.0, -2.0, -3.0, -2.0],
|
|
124
|
-
[-2.9, -3.0, -3.0, -2.0, -2.0, -3.0, -2.0],
|
|
125
|
-
[-3.1, -3.0, -3.0, -3.0, -3.0, -4.0, -3.0],
|
|
126
|
-
[-3.5, -4.0, -4.0, -3.0, -3.0, -4.0, -3.0],
|
|
127
|
-
[-3.9, -4.0, -4.0, -3.0, -3.0, -4.0, -3.0],
|
|
128
|
-
[-4.1, -4.0, -4.0, -4.0, -4.0, -5.0, -4.0],
|
|
129
|
-
[-4.5, -5.0, -4.0, -4.0, -4.0, -5.0, -4.0],
|
|
130
|
-
[-4.9, -5.0, -5.0, -4.0, -4.0, -5.0, -4.0],
|
|
109
|
+
[4.9, 5.0, 5.0, 4.0, 4.0, 4.0, 5.0, 0.9],
|
|
110
|
+
[4.5, 5.0, 4.0, 4.0, 4.0, 4.0, 5.0, 0.5],
|
|
111
|
+
[4.1, 4.0, 4.0, 4.0, 4.0, 4.0, 5.0, 0.1],
|
|
112
|
+
[3.9, 4.0, 4.0, 3.0, 3.0, 3.0, 4.0, 0.9],
|
|
113
|
+
[3.5, 4.0, 4.0, 3.0, 3.0, 3.0, 4.0, 0.5],
|
|
114
|
+
[3.1, 3.0, 3.0, 3.0, 3.0, 3.0, 4.0, 0.1],
|
|
115
|
+
[2.9, 3.0, 3.0, 2.0, 2.0, 2.0, 3.0, 0.9],
|
|
116
|
+
[2.5, 3.0, 2.0, 2.0, 2.0, 2.0, 3.0, 0.5],
|
|
117
|
+
[2.1, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 0.1],
|
|
118
|
+
[1.9, 2.0, 2.0, 1.0, 1.0, 1.0, 2.0, 0.9],
|
|
119
|
+
[1.5, 2.0, 2.0, 1.0, 1.0, 1.0, 2.0, 0.5],
|
|
120
|
+
[1.1, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 0.1],
|
|
121
|
+
[0.9, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.9],
|
|
122
|
+
[0.5, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.5],
|
|
123
|
+
[0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.1],
|
|
124
|
+
[-0.1, -0.0, -0.0, -0.0, 0.0, -1.0, -0.0, -0.1],
|
|
125
|
+
[-0.5, -1.0, -0.0, -0.0, 0.0, -1.0, -0.0, -0.5],
|
|
126
|
+
[-0.9, -1.0, -1.0, -0.0, 0.0, -1.0, -0.0, -0.9],
|
|
127
|
+
[-1.1, -1.0, -1.0, -1.0, -1.0, -2.0, -1.0, -0.1],
|
|
128
|
+
[-1.5, -2.0, -2.0, -1.0, -1.0, -2.0, -1.0, -0.5],
|
|
129
|
+
[-1.9, -2.0, -2.0, -1.0, -1.0, -2.0, -1.0, -0.9],
|
|
130
|
+
[-2.1, -2.0, -2.0, -2.0, -2.0, -3.0, -2.0, -0.1],
|
|
131
|
+
[-2.5, -3.0, -2.0, -2.0, -2.0, -3.0, -2.0, -0.5],
|
|
132
|
+
[-2.9, -3.0, -3.0, -2.0, -2.0, -3.0, -2.0, -0.9],
|
|
133
|
+
[-3.1, -3.0, -3.0, -3.0, -3.0, -4.0, -3.0, -0.1],
|
|
134
|
+
[-3.5, -4.0, -4.0, -3.0, -3.0, -4.0, -3.0, -0.5],
|
|
135
|
+
[-3.9, -4.0, -4.0, -3.0, -3.0, -4.0, -3.0, -0.9],
|
|
136
|
+
[-4.1, -4.0, -4.0, -4.0, -4.0, -5.0, -4.0, -0.1],
|
|
137
|
+
[-4.5, -5.0, -4.0, -4.0, -4.0, -5.0, -4.0, -0.5],
|
|
138
|
+
[-4.9, -5.0, -5.0, -4.0, -4.0, -5.0, -4.0, -0.9],
|
|
131
139
|
],
|
|
132
140
|
dtype=np.float32,
|
|
133
141
|
)
|
|
134
142
|
|
|
135
|
-
assert_np_equal(tab, golden)
|
|
143
|
+
assert_np_equal(tab, golden, tol=1e-6)
|
|
136
144
|
|
|
137
145
|
if print_results:
|
|
138
146
|
np.set_printoptions(formatter={"float": lambda x: "{:6.1f}".format(x).replace(".0", ".")})
|
|
@@ -149,24 +157,23 @@ def test_rounding(test, device):
|
|
|
149
157
|
nx_fix = np.fix(nx)
|
|
150
158
|
nx_floor = np.floor(nx)
|
|
151
159
|
nx_ceil = np.ceil(nx)
|
|
160
|
+
nx_frac = np.modf(nx)[0]
|
|
152
161
|
|
|
153
|
-
tab = np.stack([nx, nx_round, nx_rint, nx_trunc, nx_fix, nx_floor, nx_ceil], axis=1)
|
|
162
|
+
tab = np.stack([nx, nx_round, nx_rint, nx_trunc, nx_fix, nx_floor, nx_ceil, nx_frac], axis=1)
|
|
154
163
|
print(" %5s %5s %5s %5s %5s %5s %5s" % ("x ", "round", "rint", "trunc", "fix", "floor", "ceil"))
|
|
155
164
|
print(tab)
|
|
156
165
|
print("----------------------------------------------")
|
|
157
166
|
|
|
158
167
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
pass
|
|
168
|
+
class TestRounding(unittest.TestCase):
|
|
169
|
+
pass
|
|
162
170
|
|
|
163
|
-
devices = get_test_devices()
|
|
164
171
|
|
|
165
|
-
|
|
172
|
+
devices = get_test_devices()
|
|
166
173
|
|
|
167
|
-
|
|
174
|
+
add_function_test(TestRounding, "test_rounding", test_rounding, devices=devices)
|
|
168
175
|
|
|
169
176
|
|
|
170
177
|
if __name__ == "__main__":
|
|
171
|
-
|
|
178
|
+
wp.build.clear_kernel_cache()
|
|
172
179
|
unittest.main(verbosity=2)
|
|
@@ -1,16 +1,26 @@
|
|
|
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
|
+
from functools import partial
|
|
10
|
+
|
|
1
11
|
import numpy as np
|
|
2
|
-
import warp as wp
|
|
3
12
|
|
|
13
|
+
import warp as wp
|
|
14
|
+
from warp.tests.unittest_utils import *
|
|
4
15
|
from warp.utils import runlength_encode
|
|
5
|
-
from warp.tests.test_base import *
|
|
6
16
|
|
|
7
17
|
wp.init()
|
|
8
18
|
|
|
9
19
|
|
|
10
|
-
def test_runlength_encode_int(test, device):
|
|
11
|
-
|
|
20
|
+
def test_runlength_encode_int(test, device, n):
|
|
21
|
+
rng = np.random.default_rng(123)
|
|
12
22
|
|
|
13
|
-
values_np = np.sort(
|
|
23
|
+
values_np = np.sort(rng.integers(-10, high=10, size=n, dtype=int))
|
|
14
24
|
|
|
15
25
|
unique_values_np, unique_counts_np = np.unique(values_np, return_counts=True)
|
|
16
26
|
|
|
@@ -21,22 +31,160 @@ def test_runlength_encode_int(test, device):
|
|
|
21
31
|
|
|
22
32
|
run_count = runlength_encode(values, unique_values, unique_counts)
|
|
23
33
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
test.assertEqual(run_count, len(unique_values_np))
|
|
35
|
+
assert_np_equal(unique_values.numpy()[:run_count], unique_values_np[:run_count])
|
|
36
|
+
assert_np_equal(unique_counts.numpy()[:run_count], unique_counts_np[:run_count])
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_runlength_encode_error_insufficient_storage(test, device):
|
|
40
|
+
values = wp.zeros(123, dtype=int, device=device)
|
|
41
|
+
run_values = wp.empty(1, dtype=int, device=device)
|
|
42
|
+
run_lengths = wp.empty(123, dtype=int, device=device)
|
|
43
|
+
with test.assertRaisesRegex(
|
|
44
|
+
RuntimeError,
|
|
45
|
+
r"Output array storage sizes must be at least equal to value_count$",
|
|
46
|
+
):
|
|
47
|
+
runlength_encode(values, run_values, run_lengths)
|
|
48
|
+
|
|
49
|
+
values = wp.zeros(123, dtype=int, device="cpu")
|
|
50
|
+
run_values = wp.empty(123, dtype=int, device="cpu")
|
|
51
|
+
run_lengths = wp.empty(1, dtype=int, device="cpu")
|
|
52
|
+
with test.assertRaisesRegex(
|
|
53
|
+
RuntimeError,
|
|
54
|
+
r"Output array storage sizes must be at least equal to value_count$",
|
|
55
|
+
):
|
|
56
|
+
runlength_encode(values, run_values, run_lengths)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def test_runlength_encode_error_dtypes_mismatch(test, device):
|
|
60
|
+
values = wp.zeros(123, dtype=int, device=device)
|
|
61
|
+
run_values = wp.empty(123, dtype=float, device=device)
|
|
62
|
+
run_lengths = wp.empty_like(values, device=device)
|
|
63
|
+
with test.assertRaisesRegex(
|
|
64
|
+
RuntimeError,
|
|
65
|
+
r"values and run_values data types do not match$",
|
|
66
|
+
):
|
|
67
|
+
runlength_encode(values, run_values, run_lengths)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def test_runlength_encode_error_run_length_unsupported_dtype(test, device):
|
|
71
|
+
values = wp.zeros(123, dtype=int, device=device)
|
|
72
|
+
run_values = wp.empty(123, dtype=int, device=device)
|
|
73
|
+
run_lengths = wp.empty(123, dtype=float, device=device)
|
|
74
|
+
with test.assertRaisesRegex(
|
|
75
|
+
RuntimeError,
|
|
76
|
+
r"run_lengths array must be of type int32$",
|
|
77
|
+
):
|
|
78
|
+
runlength_encode(values, run_values, run_lengths)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_runlength_encode_error_run_count_unsupported_dtype(test, device):
|
|
82
|
+
values = wp.zeros(123, dtype=int, device=device)
|
|
83
|
+
run_values = wp.empty_like(values, device=device)
|
|
84
|
+
run_lengths = wp.empty_like(values, device=device)
|
|
85
|
+
run_count = wp.empty(shape=(1,), dtype=float, device=device)
|
|
86
|
+
with test.assertRaisesRegex(
|
|
87
|
+
RuntimeError,
|
|
88
|
+
r"run_count array must be of type int32$",
|
|
89
|
+
):
|
|
90
|
+
runlength_encode(values, run_values, run_lengths, run_count=run_count)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def test_runlength_encode_error_unsupported_dtype(test, device):
|
|
94
|
+
values = wp.zeros(123, dtype=float, device=device)
|
|
95
|
+
run_values = wp.empty(123, dtype=float, device=device)
|
|
96
|
+
run_lengths = wp.empty(123, dtype=int, device=device)
|
|
97
|
+
with test.assertRaisesRegex(
|
|
98
|
+
RuntimeError,
|
|
99
|
+
r"Unsupported data type$",
|
|
100
|
+
):
|
|
101
|
+
runlength_encode(values, run_values, run_lengths)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
devices = get_test_devices()
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TestRunlengthEncode(unittest.TestCase):
|
|
108
|
+
@unittest.skipUnless(wp.is_cuda_available(), "Requires CUDA")
|
|
109
|
+
def test_runlength_encode_error_devices_mismatch(self):
|
|
110
|
+
values = wp.zeros(123, dtype=int, device="cpu")
|
|
111
|
+
run_values = wp.empty_like(values, device="cuda:0")
|
|
112
|
+
run_lengths = wp.empty_like(values, device="cuda:0")
|
|
113
|
+
with self.assertRaisesRegex(
|
|
114
|
+
RuntimeError,
|
|
115
|
+
r"Array storage devices do not match$",
|
|
116
|
+
):
|
|
117
|
+
runlength_encode(values, run_values, run_lengths)
|
|
118
|
+
|
|
119
|
+
values = wp.zeros(123, dtype=int, device="cpu")
|
|
120
|
+
run_values = wp.empty_like(values, device="cpu")
|
|
121
|
+
run_lengths = wp.empty_like(values, device="cuda:0")
|
|
122
|
+
with self.assertRaisesRegex(
|
|
123
|
+
RuntimeError,
|
|
124
|
+
r"Array storage devices do not match$",
|
|
125
|
+
):
|
|
126
|
+
runlength_encode(values, run_values, run_lengths)
|
|
127
|
+
|
|
128
|
+
values = wp.zeros(123, dtype=int, device="cpu")
|
|
129
|
+
run_values = wp.empty_like(values, device="cuda:0")
|
|
130
|
+
run_lengths = wp.empty_like(values, device="cpu")
|
|
131
|
+
with self.assertRaisesRegex(
|
|
132
|
+
RuntimeError,
|
|
133
|
+
r"Array storage devices do not match$",
|
|
134
|
+
):
|
|
135
|
+
runlength_encode(values, run_values, run_lengths)
|
|
136
|
+
|
|
137
|
+
@unittest.skipUnless(wp.is_cuda_available(), "Requires CUDA")
|
|
138
|
+
def test_runlength_encode_error_run_count_device_mismatch(self):
|
|
139
|
+
values = wp.zeros(123, dtype=int, device="cpu")
|
|
140
|
+
run_values = wp.empty_like(values, device="cpu")
|
|
141
|
+
run_lengths = wp.empty_like(values, device="cpu")
|
|
142
|
+
run_count = wp.empty(shape=(1,), dtype=int, device="cuda:0")
|
|
143
|
+
with self.assertRaisesRegex(
|
|
144
|
+
RuntimeError,
|
|
145
|
+
r"run_count storage device does not match other arrays$",
|
|
146
|
+
):
|
|
147
|
+
runlength_encode(values, run_values, run_lengths, run_count=run_count)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
add_function_test(
|
|
151
|
+
TestRunlengthEncode, "test_runlength_encode_int", partial(test_runlength_encode_int, n=100), devices=devices
|
|
152
|
+
)
|
|
153
|
+
add_function_test(
|
|
154
|
+
TestRunlengthEncode, "test_runlength_encode_empty", partial(test_runlength_encode_int, n=0), devices=devices
|
|
155
|
+
)
|
|
156
|
+
add_function_test(
|
|
157
|
+
TestRunlengthEncode,
|
|
158
|
+
"test_runlength_encode_error_insufficient_storage",
|
|
159
|
+
test_runlength_encode_error_insufficient_storage,
|
|
160
|
+
devices=devices,
|
|
161
|
+
)
|
|
162
|
+
add_function_test(
|
|
163
|
+
TestRunlengthEncode,
|
|
164
|
+
"test_runlength_encode_error_dtypes_mismatch",
|
|
165
|
+
test_runlength_encode_error_dtypes_mismatch,
|
|
166
|
+
devices=devices,
|
|
167
|
+
)
|
|
168
|
+
add_function_test(
|
|
169
|
+
TestRunlengthEncode,
|
|
170
|
+
"test_runlength_encode_error_run_length_unsupported_dtype",
|
|
171
|
+
test_runlength_encode_error_run_length_unsupported_dtype,
|
|
172
|
+
devices=devices,
|
|
173
|
+
)
|
|
174
|
+
add_function_test(
|
|
175
|
+
TestRunlengthEncode,
|
|
176
|
+
"test_runlength_encode_error_run_count_unsupported_dtype",
|
|
177
|
+
test_runlength_encode_error_run_count_unsupported_dtype,
|
|
178
|
+
devices=devices,
|
|
179
|
+
)
|
|
180
|
+
add_function_test(
|
|
181
|
+
TestRunlengthEncode,
|
|
182
|
+
"test_runlength_encode_error_unsupported_dtype",
|
|
183
|
+
test_runlength_encode_error_unsupported_dtype,
|
|
184
|
+
devices=devices,
|
|
185
|
+
)
|
|
38
186
|
|
|
39
187
|
|
|
40
188
|
if __name__ == "__main__":
|
|
41
|
-
|
|
189
|
+
wp.build.clear_kernel_cache()
|
|
42
190
|
unittest.main(verbosity=2)
|
warp/tests/test_smoothstep.py
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
# distribution of this software and related documentation without an express
|
|
6
6
|
# license agreement from NVIDIA CORPORATION is strictly prohibited.
|
|
7
7
|
|
|
8
|
+
import unittest
|
|
8
9
|
from dataclasses import dataclass
|
|
9
10
|
from typing import Any
|
|
10
|
-
import unittest
|
|
11
11
|
|
|
12
12
|
import numpy as np
|
|
13
13
|
|
|
14
14
|
import warp as wp
|
|
15
|
-
from warp.tests.
|
|
15
|
+
from warp.tests.unittest_utils import *
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@dataclass
|
|
@@ -87,11 +87,9 @@ def test_smoothstep(test, device):
|
|
|
87
87
|
|
|
88
88
|
for data_type in TEST_DATA:
|
|
89
89
|
kernel_fn = make_kernel_fn(data_type)
|
|
90
|
-
module = wp.get_module(kernel_fn.__module__)
|
|
91
90
|
kernel = wp.Kernel(
|
|
92
91
|
func=kernel_fn,
|
|
93
92
|
key=f"test_smoothstep{data_type.__name__}_kernel",
|
|
94
|
-
module=module,
|
|
95
93
|
)
|
|
96
94
|
|
|
97
95
|
for test_data in TEST_DATA[data_type]:
|
|
@@ -155,16 +153,16 @@ def test_smoothstep(test, device):
|
|
|
155
153
|
)
|
|
156
154
|
|
|
157
155
|
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
devices = get_test_devices()
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class TestSmoothstep(unittest.TestCase):
|
|
160
|
+
pass
|
|
160
161
|
|
|
161
|
-
class TestSmoothstep(parent):
|
|
162
|
-
pass
|
|
163
162
|
|
|
164
|
-
|
|
165
|
-
return TestSmoothstep
|
|
163
|
+
add_function_test(TestSmoothstep, "test_smoothstep", test_smoothstep, devices=devices)
|
|
166
164
|
|
|
167
165
|
|
|
168
166
|
if __name__ == "__main__":
|
|
169
|
-
|
|
167
|
+
wp.build.clear_kernel_cache()
|
|
170
168
|
unittest.main(verbosity=2)
|