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_bvh.py
CHANGED
|
@@ -5,13 +5,12 @@
|
|
|
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
|
-
|
|
8
|
+
import unittest
|
|
9
|
+
|
|
9
10
|
import numpy as np
|
|
10
11
|
|
|
11
12
|
import warp as wp
|
|
12
|
-
from warp.tests.
|
|
13
|
-
|
|
14
|
-
np.random.seed(42)
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
15
14
|
|
|
16
15
|
wp.init()
|
|
17
16
|
|
|
@@ -71,9 +70,11 @@ def intersect_ray_aabb(start, dir, lower, upper):
|
|
|
71
70
|
|
|
72
71
|
|
|
73
72
|
def test_bvh(test, type, device):
|
|
73
|
+
rng = np.random.default_rng(123)
|
|
74
|
+
|
|
74
75
|
num_bounds = 100
|
|
75
|
-
lowers =
|
|
76
|
-
uppers = lowers +
|
|
76
|
+
lowers = rng.random(size=(num_bounds, 3)) * 5.0
|
|
77
|
+
uppers = lowers + rng.random(size=(num_bounds, 3)) * 5.0
|
|
77
78
|
|
|
78
79
|
device_lowers = wp.array(lowers, dtype=wp.vec3, device=device)
|
|
79
80
|
device_uppers = wp.array(uppers, dtype=wp.vec3, device=device)
|
|
@@ -114,10 +115,10 @@ def test_bvh(test, type, device):
|
|
|
114
115
|
test.assertEqual(host_intersected, device_intersected[i])
|
|
115
116
|
|
|
116
117
|
if test_case == 0:
|
|
117
|
-
lowers =
|
|
118
|
-
uppers = lowers +
|
|
119
|
-
wp.copy(device_lowers, wp.array(lowers, dtype=wp.vec3))
|
|
120
|
-
wp.copy(device_uppers, wp.array(uppers, dtype=wp.vec3))
|
|
118
|
+
lowers = rng.random(size=(num_bounds, 3)) * 5.0
|
|
119
|
+
uppers = lowers + rng.random(size=(num_bounds, 3)) * 5.0
|
|
120
|
+
wp.copy(device_lowers, wp.array(lowers, dtype=wp.vec3, device=device))
|
|
121
|
+
wp.copy(device_uppers, wp.array(uppers, dtype=wp.vec3, device=device))
|
|
121
122
|
bvh.refit()
|
|
122
123
|
bounds_intersected.zero_()
|
|
123
124
|
|
|
@@ -130,18 +131,17 @@ def test_bvh_query_ray(test, device):
|
|
|
130
131
|
test_bvh(test, "ray", device)
|
|
131
132
|
|
|
132
133
|
|
|
133
|
-
|
|
134
|
-
|
|
134
|
+
devices = get_test_devices()
|
|
135
|
+
|
|
135
136
|
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
class TestBvh(unittest.TestCase):
|
|
138
|
+
pass
|
|
138
139
|
|
|
139
|
-
add_function_test(TestBvh, "test_bvh_aabb", test_bvh_query_aabb, devices=devices)
|
|
140
|
-
add_function_test(TestBvh, "test_bvh_ray", test_bvh_query_ray, devices=devices)
|
|
141
140
|
|
|
142
|
-
|
|
141
|
+
add_function_test(TestBvh, "test_bvh_aabb", test_bvh_query_aabb, devices=devices)
|
|
142
|
+
add_function_test(TestBvh, "test_bvh_ray", test_bvh_query_ray, devices=devices)
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
if __name__ == "__main__":
|
|
146
|
-
|
|
146
|
+
wp.build.clear_kernel_cache()
|
|
147
147
|
unittest.main(verbosity=2)
|
|
@@ -5,12 +5,12 @@
|
|
|
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 numpy as np
|
|
9
|
-
|
|
10
8
|
import unittest
|
|
11
9
|
|
|
10
|
+
import numpy as np
|
|
11
|
+
|
|
12
12
|
import warp as wp
|
|
13
|
-
from warp.tests.
|
|
13
|
+
from warp.tests.unittest_utils import *
|
|
14
14
|
|
|
15
15
|
wp.init()
|
|
16
16
|
epsilon = 0.00001
|
|
@@ -171,61 +171,58 @@ def test_edge_edge_perpendicular_s0_t1(test, device):
|
|
|
171
171
|
test.assertAlmostEqual(st0[1], 1.0) # t value
|
|
172
172
|
|
|
173
173
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
)
|
|
225
|
-
|
|
226
|
-
return TestClosestPointEdgeEdgeMethods
|
|
174
|
+
devices = get_test_devices()
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class TestClosestPointEdgeEdgeMethods(unittest.TestCase):
|
|
178
|
+
pass
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
add_function_test(
|
|
182
|
+
TestClosestPointEdgeEdgeMethods,
|
|
183
|
+
"test_edge_edge_middle_crossing",
|
|
184
|
+
test_edge_edge_middle_crossing,
|
|
185
|
+
devices=devices,
|
|
186
|
+
)
|
|
187
|
+
add_function_test(
|
|
188
|
+
TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel_s1_t0", test_edge_edge_parallel_s1_t0, devices=devices
|
|
189
|
+
)
|
|
190
|
+
add_function_test(
|
|
191
|
+
TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel_s0_t1", test_edge_edge_parallel_s0_t1, devices=devices
|
|
192
|
+
)
|
|
193
|
+
add_function_test(
|
|
194
|
+
TestClosestPointEdgeEdgeMethods,
|
|
195
|
+
"test_edge_edge_both_degenerate_case",
|
|
196
|
+
test_edge_edge_both_degenerate_case,
|
|
197
|
+
devices=devices,
|
|
198
|
+
)
|
|
199
|
+
add_function_test(
|
|
200
|
+
TestClosestPointEdgeEdgeMethods,
|
|
201
|
+
"test_edge_edge_degenerate_first_edge",
|
|
202
|
+
test_edge_edge_degenerate_first_edge,
|
|
203
|
+
devices=devices,
|
|
204
|
+
)
|
|
205
|
+
add_function_test(
|
|
206
|
+
TestClosestPointEdgeEdgeMethods,
|
|
207
|
+
"test_edge_edge_degenerate_second_edge",
|
|
208
|
+
test_edge_edge_degenerate_second_edge,
|
|
209
|
+
devices=devices,
|
|
210
|
+
)
|
|
211
|
+
add_function_test(TestClosestPointEdgeEdgeMethods, "test_edge_edge_parallel", test_edge_edge_parallel, devices=devices)
|
|
212
|
+
add_function_test(
|
|
213
|
+
TestClosestPointEdgeEdgeMethods,
|
|
214
|
+
"test_edge_edge_perpendicular_s1_t0",
|
|
215
|
+
test_edge_edge_perpendicular_s1_t0,
|
|
216
|
+
devices=devices,
|
|
217
|
+
)
|
|
218
|
+
add_function_test(
|
|
219
|
+
TestClosestPointEdgeEdgeMethods,
|
|
220
|
+
"test_edge_edge_perpendicular_s0_t1",
|
|
221
|
+
test_edge_edge_perpendicular_s0_t1,
|
|
222
|
+
devices=devices,
|
|
223
|
+
)
|
|
227
224
|
|
|
228
225
|
|
|
229
226
|
if __name__ == "__main__":
|
|
230
|
-
|
|
227
|
+
wp.build.clear_kernel_cache()
|
|
231
228
|
unittest.main(verbosity=2)
|
warp/tests/test_codegen.py
CHANGED
|
@@ -5,12 +5,11 @@
|
|
|
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
|
-
# include parent path
|
|
9
8
|
import sys
|
|
10
9
|
import unittest
|
|
11
10
|
|
|
12
11
|
import warp as wp
|
|
13
|
-
from warp.tests.
|
|
12
|
+
from warp.tests.unittest_utils import *
|
|
14
13
|
|
|
15
14
|
# wp.config.mode = "debug"
|
|
16
15
|
|
|
@@ -317,9 +316,36 @@ def test_range_constant_dynamic_nested(m: int):
|
|
|
317
316
|
wp.expect_eq(s, N * m * N)
|
|
318
317
|
|
|
319
318
|
|
|
319
|
+
@wp.kernel
|
|
320
|
+
def test_range_expression():
|
|
321
|
+
idx = 1
|
|
322
|
+
batch_size = 100
|
|
323
|
+
|
|
324
|
+
a = wp.float(0.0)
|
|
325
|
+
c = wp.float(1.0)
|
|
326
|
+
|
|
327
|
+
# constant expression with a function
|
|
328
|
+
for i in range(4 * idx, wp.min(4 * idx + 4, batch_size)):
|
|
329
|
+
a += c
|
|
330
|
+
|
|
331
|
+
for i in range(4 * idx, min(4 * idx + 4, batch_size)):
|
|
332
|
+
a += c
|
|
333
|
+
|
|
334
|
+
tid = wp.tid()
|
|
335
|
+
|
|
336
|
+
# dynamic expression with a function
|
|
337
|
+
for i in range(4 * idx, wp.min(4 * idx, tid + 1000)):
|
|
338
|
+
a += c
|
|
339
|
+
|
|
340
|
+
for i in range(4 * idx, min(4 * idx, tid + 1000)):
|
|
341
|
+
a += c
|
|
342
|
+
|
|
343
|
+
wp.expect_eq(a, 8.0)
|
|
344
|
+
|
|
345
|
+
|
|
320
346
|
def test_unresolved_func(test, device):
|
|
321
347
|
# kernel with unresolved function must be in a separate module, otherwise the current module would fail to load
|
|
322
|
-
from warp.tests.
|
|
348
|
+
from warp.tests.aux_test_unresolved_func import unresolved_func_kernel
|
|
323
349
|
|
|
324
350
|
# ensure that an appropriate exception is raised when the bad module gets loaded
|
|
325
351
|
with test.assertRaisesRegex(RuntimeError, "Could not find function wp.missing_func"):
|
|
@@ -327,13 +353,13 @@ def test_unresolved_func(test, device):
|
|
|
327
353
|
|
|
328
354
|
# remove all references to the bad module so that subsequent calls to wp.force_load()
|
|
329
355
|
# won't try to load it unless we explicitly re-import it again
|
|
330
|
-
del wp.context.user_modules["warp.tests.
|
|
331
|
-
del sys.modules["warp.tests.
|
|
356
|
+
del wp.context.user_modules["warp.tests.aux_test_unresolved_func"]
|
|
357
|
+
del sys.modules["warp.tests.aux_test_unresolved_func"]
|
|
332
358
|
|
|
333
359
|
|
|
334
360
|
def test_unresolved_symbol(test, device):
|
|
335
361
|
# kernel with unresolved symbol must be in a separate module, otherwise the current module would fail to load
|
|
336
|
-
from warp.tests.
|
|
362
|
+
from warp.tests.aux_test_unresolved_symbol import unresolved_symbol_kernel
|
|
337
363
|
|
|
338
364
|
# ensure that an appropriate exception is raised when the bad module gets loaded
|
|
339
365
|
with test.assertRaisesRegex(KeyError, "Referencing undefined symbol: missing_symbol"):
|
|
@@ -341,135 +367,140 @@ def test_unresolved_symbol(test, device):
|
|
|
341
367
|
|
|
342
368
|
# remove all references to the bad module so that subsequent calls to wp.force_load()
|
|
343
369
|
# won't try to load it unless we explicitly re-import it again
|
|
344
|
-
del wp.context.user_modules["warp.tests.
|
|
345
|
-
del sys.modules["warp.tests.
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
370
|
+
del wp.context.user_modules["warp.tests.aux_test_unresolved_symbol"]
|
|
371
|
+
del sys.modules["warp.tests.aux_test_unresolved_symbol"]
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
class TestCodeGen(unittest.TestCase):
|
|
375
|
+
pass
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
devices = get_test_devices()
|
|
379
|
+
|
|
380
|
+
add_kernel_test(TestCodeGen, name="test_inplace", kernel=test_inplace, dim=1, devices=devices)
|
|
381
|
+
add_kernel_test(TestCodeGen, name="test_rename", kernel=test_rename, dim=1, devices=devices)
|
|
382
|
+
add_kernel_test(TestCodeGen, name="test_constant", kernel=test_constant, inputs=[1.0], dim=1, devices=devices)
|
|
383
|
+
add_kernel_test(
|
|
384
|
+
TestCodeGen, name="test_dynamic_for_rename", kernel=test_dynamic_for_rename, inputs=[10], dim=1, devices=devices
|
|
385
|
+
)
|
|
386
|
+
add_kernel_test(
|
|
387
|
+
TestCodeGen,
|
|
388
|
+
name="test_dynamic_for_inplace",
|
|
389
|
+
kernel=test_dynamic_for_inplace,
|
|
390
|
+
inputs=[10],
|
|
391
|
+
dim=1,
|
|
392
|
+
devices=devices,
|
|
393
|
+
)
|
|
394
|
+
add_kernel_test(TestCodeGen, name="test_reassign", kernel=test_reassign, dim=1, devices=devices)
|
|
395
|
+
add_kernel_test(
|
|
396
|
+
TestCodeGen, name="test_dynamic_reassign", kernel=test_dynamic_reassign, inputs=[2], dim=1, devices=devices
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
add_kernel_test(
|
|
400
|
+
TestCodeGen,
|
|
401
|
+
name="test_range_dynamic_forward",
|
|
402
|
+
kernel=test_range_dynamic,
|
|
403
|
+
dim=1,
|
|
404
|
+
inputs=[0, 4, 1],
|
|
405
|
+
expect=[0, 1, 2, 3],
|
|
406
|
+
devices=devices,
|
|
407
|
+
)
|
|
408
|
+
add_kernel_test(
|
|
409
|
+
TestCodeGen,
|
|
410
|
+
name="test_range_dynamic_reverse",
|
|
411
|
+
kernel=test_range_dynamic,
|
|
412
|
+
dim=1,
|
|
413
|
+
inputs=[4, 0, -1],
|
|
414
|
+
expect=[4, 3, 2, 1],
|
|
415
|
+
devices=devices,
|
|
416
|
+
)
|
|
417
|
+
add_kernel_test(
|
|
418
|
+
TestCodeGen,
|
|
419
|
+
name="test_range_dynamic_forward_step",
|
|
420
|
+
kernel=test_range_dynamic,
|
|
421
|
+
dim=1,
|
|
422
|
+
inputs=[0, 8, 2],
|
|
423
|
+
expect=[0, 2, 4, 6],
|
|
424
|
+
devices=devices,
|
|
425
|
+
)
|
|
426
|
+
add_kernel_test(
|
|
427
|
+
TestCodeGen,
|
|
428
|
+
name="test_range_dynamic_reverse_step",
|
|
429
|
+
kernel=test_range_dynamic,
|
|
430
|
+
dim=1,
|
|
431
|
+
inputs=[8, 0, -2],
|
|
432
|
+
expect=[8, 6, 4, 2],
|
|
433
|
+
devices=devices,
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
add_kernel_test(
|
|
437
|
+
TestCodeGen,
|
|
438
|
+
name="test_range_static_sum",
|
|
439
|
+
kernel=test_range_static_sum,
|
|
440
|
+
dim=1,
|
|
441
|
+
expect=[10, 10, 10],
|
|
442
|
+
devices=devices,
|
|
443
|
+
)
|
|
444
|
+
add_kernel_test(
|
|
445
|
+
TestCodeGen,
|
|
446
|
+
name="test_range_dynamic_sum",
|
|
447
|
+
kernel=test_range_dynamic_sum,
|
|
448
|
+
dim=1,
|
|
449
|
+
inputs=[0, 10, 2],
|
|
450
|
+
expect=[10, 10, 10, 10],
|
|
451
|
+
devices=devices,
|
|
452
|
+
)
|
|
453
|
+
add_kernel_test(
|
|
454
|
+
TestCodeGen,
|
|
455
|
+
name="test_range_dynamic_sum_zero",
|
|
456
|
+
kernel=test_range_dynamic_sum,
|
|
457
|
+
dim=1,
|
|
458
|
+
inputs=[0, 0, 1],
|
|
459
|
+
expect=[0, 0, 0, 0],
|
|
460
|
+
devices=devices,
|
|
461
|
+
)
|
|
462
|
+
add_kernel_test(TestCodeGen, name="test_range_constant", kernel=test_range_constant, dim=1, devices=devices)
|
|
463
|
+
add_kernel_test(
|
|
464
|
+
TestCodeGen,
|
|
465
|
+
name="test_range_constant_dynamic_nested",
|
|
466
|
+
kernel=test_range_constant_dynamic_nested,
|
|
467
|
+
dim=1,
|
|
468
|
+
inputs=[10],
|
|
469
|
+
devices=devices,
|
|
470
|
+
)
|
|
471
|
+
add_kernel_test(
|
|
472
|
+
TestCodeGen,
|
|
473
|
+
name="test_range_dynamic_nested",
|
|
474
|
+
kernel=test_range_dynamic_nested,
|
|
475
|
+
dim=1,
|
|
476
|
+
inputs=[4],
|
|
477
|
+
devices=devices,
|
|
478
|
+
)
|
|
479
|
+
add_kernel_test(
|
|
480
|
+
TestCodeGen,
|
|
481
|
+
name="test_range_expression",
|
|
482
|
+
kernel=test_range_expression,
|
|
483
|
+
dim=1,
|
|
484
|
+
devices=devices,
|
|
485
|
+
)
|
|
486
|
+
|
|
487
|
+
add_kernel_test(TestCodeGen, name="test_while_zero", kernel=test_while, dim=1, inputs=[0], devices=devices)
|
|
488
|
+
add_kernel_test(TestCodeGen, name="test_while_positive", kernel=test_while, dim=1, inputs=[16], devices=devices)
|
|
489
|
+
add_kernel_test(TestCodeGen, name="test_pass", kernel=test_pass, dim=1, inputs=[16], devices=devices)
|
|
490
|
+
|
|
491
|
+
add_kernel_test(TestCodeGen, name="test_break", kernel=test_break, dim=1, inputs=[10], devices=devices)
|
|
492
|
+
add_kernel_test(TestCodeGen, name="test_break_early", kernel=test_break_early, dim=1, inputs=[10], devices=devices)
|
|
493
|
+
add_kernel_test(TestCodeGen, name="test_break_unroll", kernel=test_break_unroll, dim=1, devices=devices)
|
|
494
|
+
add_kernel_test(
|
|
495
|
+
TestCodeGen, name="test_break_multiple", kernel=test_break_multiple, dim=1, inputs=[10], devices=devices
|
|
496
|
+
)
|
|
497
|
+
add_kernel_test(TestCodeGen, name="test_continue", kernel=test_continue, dim=1, inputs=[10], devices=devices)
|
|
498
|
+
add_kernel_test(TestCodeGen, name="test_continue_unroll", kernel=test_continue_unroll, dim=1, devices=devices)
|
|
499
|
+
|
|
500
|
+
add_function_test(TestCodeGen, func=test_unresolved_func, name="test_unresolved_func", devices=devices)
|
|
501
|
+
add_function_test(TestCodeGen, func=test_unresolved_symbol, name="test_unresolved_symbol", devices=devices)
|
|
471
502
|
|
|
472
503
|
|
|
473
504
|
if __name__ == "__main__":
|
|
474
|
-
|
|
505
|
+
wp.build.clear_kernel_cache()
|
|
475
506
|
unittest.main(verbosity=2, failfast=True)
|
|
@@ -5,14 +5,11 @@
|
|
|
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 os
|
|
9
|
-
import sys
|
|
10
|
-
|
|
11
8
|
import unittest
|
|
12
|
-
from warp.tests.test_base import *
|
|
13
|
-
import warp.tests.test_compile_consts_dummy
|
|
14
9
|
|
|
15
10
|
import warp as wp
|
|
11
|
+
import warp.tests.aux_test_compile_consts_dummy
|
|
12
|
+
from warp.tests.unittest_utils import *
|
|
16
13
|
|
|
17
14
|
wp.init()
|
|
18
15
|
|
|
@@ -20,6 +17,8 @@ LOCAL_ONE = wp.constant(1)
|
|
|
20
17
|
|
|
21
18
|
SQRT3_OVER_3 = wp.constant(0.57735026919)
|
|
22
19
|
UNIT_VEC = wp.constant(wp.vec3(SQRT3_OVER_3, SQRT3_OVER_3, SQRT3_OVER_3))
|
|
20
|
+
ONE_FP16 = wp.constant(wp.float16(1.0))
|
|
21
|
+
TEST_BOOL = wp.constant(True)
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
class Foobar:
|
|
@@ -27,10 +26,18 @@ class Foobar:
|
|
|
27
26
|
TWO = wp.constant(2)
|
|
28
27
|
|
|
29
28
|
|
|
29
|
+
@wp.kernel
|
|
30
|
+
def test_constants_bool():
|
|
31
|
+
if TEST_BOOL:
|
|
32
|
+
expect_eq(1.0, 1.0)
|
|
33
|
+
else:
|
|
34
|
+
expect_eq(1.0, -1.0)
|
|
35
|
+
|
|
36
|
+
|
|
30
37
|
@wp.kernel
|
|
31
38
|
def test_constants_int(a: int):
|
|
32
39
|
if Foobar.ONE > 0:
|
|
33
|
-
a = 123 + Foobar.TWO + warp.tests.
|
|
40
|
+
a = 123 + Foobar.TWO + warp.tests.aux_test_compile_consts_dummy.MINUS_ONE
|
|
34
41
|
else:
|
|
35
42
|
a = 456 + LOCAL_ONE
|
|
36
43
|
expect_eq(a, 124)
|
|
@@ -45,6 +52,9 @@ def test_constants_float(x: float):
|
|
|
45
52
|
approx_one = wp.dot(UNIT_VEC, UNIT_VEC)
|
|
46
53
|
expect_near(approx_one, 1.0, 1e-6)
|
|
47
54
|
|
|
55
|
+
# test casting
|
|
56
|
+
expect_near(wp.float32(ONE_FP16), 1.0, 1e-6)
|
|
57
|
+
|
|
48
58
|
|
|
49
59
|
def test_constant_math(test, device):
|
|
50
60
|
# test doing math with Python defined constants in *Python* scope
|
|
@@ -60,8 +70,7 @@ def test_constant_closure_capture(test, device):
|
|
|
60
70
|
def closure_kernel_fn(expected: int):
|
|
61
71
|
wp.expect_eq(cst, expected)
|
|
62
72
|
|
|
63
|
-
|
|
64
|
-
return wp.Kernel(func=closure_kernel_fn, key=key, module=wp.get_module(closure_kernel_fn.__module__))
|
|
73
|
+
return wp.Kernel(func=closure_kernel_fn)
|
|
65
74
|
|
|
66
75
|
one_closure = make_closure_kernel(Foobar.ONE)
|
|
67
76
|
two_closure = make_closure_kernel(Foobar.TWO)
|
|
@@ -70,24 +79,23 @@ def test_constant_closure_capture(test, device):
|
|
|
70
79
|
wp.launch(two_closure, dim=(1), inputs=[2], device=device)
|
|
71
80
|
|
|
72
81
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
pass
|
|
82
|
+
class TestConstants(unittest.TestCase):
|
|
83
|
+
pass
|
|
76
84
|
|
|
77
|
-
a = 0
|
|
78
|
-
x = 0.0
|
|
79
85
|
|
|
80
|
-
|
|
86
|
+
a = 0
|
|
87
|
+
x = 0.0
|
|
81
88
|
|
|
82
|
-
|
|
83
|
-
add_kernel_test(TestConstants, test_constants_float, dim=1, inputs=[x], devices=devices)
|
|
89
|
+
devices = get_test_devices()
|
|
84
90
|
|
|
85
|
-
|
|
86
|
-
|
|
91
|
+
add_kernel_test(TestConstants, test_constants_bool, dim=1, inputs=[], devices=devices)
|
|
92
|
+
add_kernel_test(TestConstants, test_constants_int, dim=1, inputs=[a], devices=devices)
|
|
93
|
+
add_kernel_test(TestConstants, test_constants_float, dim=1, inputs=[x], devices=devices)
|
|
87
94
|
|
|
88
|
-
|
|
95
|
+
add_function_test(TestConstants, "test_constant_math", test_constant_math, devices=devices)
|
|
96
|
+
add_function_test(TestConstants, "test_constant_closure_capture", test_constant_closure_capture, devices=devices)
|
|
89
97
|
|
|
90
98
|
|
|
91
99
|
if __name__ == "__main__":
|
|
92
|
-
|
|
100
|
+
wp.build.clear_kernel_cache()
|
|
93
101
|
unittest.main(verbosity=2)
|