warp-lang 1.10.0__py3-none-macosx_11_0_arm64.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 +334 -0
- warp/__init__.pyi +5856 -0
- warp/_src/__init__.py +14 -0
- warp/_src/autograd.py +1077 -0
- warp/_src/build.py +620 -0
- warp/_src/build_dll.py +642 -0
- warp/_src/builtins.py +10555 -0
- warp/_src/codegen.py +4361 -0
- warp/_src/config.py +178 -0
- warp/_src/constants.py +59 -0
- warp/_src/context.py +8352 -0
- warp/_src/dlpack.py +464 -0
- warp/_src/fabric.py +362 -0
- warp/_src/fem/__init__.py +14 -0
- warp/_src/fem/adaptivity.py +510 -0
- warp/_src/fem/cache.py +689 -0
- warp/_src/fem/dirichlet.py +190 -0
- warp/_src/fem/domain.py +553 -0
- warp/_src/fem/field/__init__.py +131 -0
- warp/_src/fem/field/field.py +703 -0
- warp/_src/fem/field/nodal_field.py +403 -0
- warp/_src/fem/field/restriction.py +39 -0
- warp/_src/fem/field/virtual.py +1021 -0
- warp/_src/fem/geometry/__init__.py +32 -0
- warp/_src/fem/geometry/adaptive_nanogrid.py +782 -0
- warp/_src/fem/geometry/closest_point.py +99 -0
- warp/_src/fem/geometry/deformed_geometry.py +277 -0
- warp/_src/fem/geometry/element.py +854 -0
- warp/_src/fem/geometry/geometry.py +693 -0
- warp/_src/fem/geometry/grid_2d.py +478 -0
- warp/_src/fem/geometry/grid_3d.py +539 -0
- warp/_src/fem/geometry/hexmesh.py +956 -0
- warp/_src/fem/geometry/nanogrid.py +660 -0
- warp/_src/fem/geometry/partition.py +483 -0
- warp/_src/fem/geometry/quadmesh.py +597 -0
- warp/_src/fem/geometry/tetmesh.py +762 -0
- warp/_src/fem/geometry/trimesh.py +588 -0
- warp/_src/fem/integrate.py +2507 -0
- warp/_src/fem/linalg.py +385 -0
- warp/_src/fem/operator.py +398 -0
- warp/_src/fem/polynomial.py +231 -0
- warp/_src/fem/quadrature/__init__.py +17 -0
- warp/_src/fem/quadrature/pic_quadrature.py +318 -0
- warp/_src/fem/quadrature/quadrature.py +665 -0
- warp/_src/fem/space/__init__.py +248 -0
- warp/_src/fem/space/basis_function_space.py +499 -0
- warp/_src/fem/space/basis_space.py +681 -0
- warp/_src/fem/space/dof_mapper.py +253 -0
- warp/_src/fem/space/function_space.py +312 -0
- warp/_src/fem/space/grid_2d_function_space.py +179 -0
- warp/_src/fem/space/grid_3d_function_space.py +229 -0
- warp/_src/fem/space/hexmesh_function_space.py +255 -0
- warp/_src/fem/space/nanogrid_function_space.py +199 -0
- warp/_src/fem/space/partition.py +435 -0
- warp/_src/fem/space/quadmesh_function_space.py +222 -0
- warp/_src/fem/space/restriction.py +221 -0
- warp/_src/fem/space/shape/__init__.py +152 -0
- warp/_src/fem/space/shape/cube_shape_function.py +1107 -0
- warp/_src/fem/space/shape/shape_function.py +134 -0
- warp/_src/fem/space/shape/square_shape_function.py +928 -0
- warp/_src/fem/space/shape/tet_shape_function.py +829 -0
- warp/_src/fem/space/shape/triangle_shape_function.py +674 -0
- warp/_src/fem/space/tetmesh_function_space.py +270 -0
- warp/_src/fem/space/topology.py +461 -0
- warp/_src/fem/space/trimesh_function_space.py +193 -0
- warp/_src/fem/types.py +114 -0
- warp/_src/fem/utils.py +488 -0
- warp/_src/jax.py +188 -0
- warp/_src/jax_experimental/__init__.py +14 -0
- warp/_src/jax_experimental/custom_call.py +389 -0
- warp/_src/jax_experimental/ffi.py +1286 -0
- warp/_src/jax_experimental/xla_ffi.py +658 -0
- warp/_src/marching_cubes.py +710 -0
- warp/_src/math.py +416 -0
- warp/_src/optim/__init__.py +14 -0
- warp/_src/optim/adam.py +165 -0
- warp/_src/optim/linear.py +1608 -0
- warp/_src/optim/sgd.py +114 -0
- warp/_src/paddle.py +408 -0
- warp/_src/render/__init__.py +14 -0
- warp/_src/render/imgui_manager.py +291 -0
- warp/_src/render/render_opengl.py +3638 -0
- warp/_src/render/render_usd.py +939 -0
- warp/_src/render/utils.py +162 -0
- warp/_src/sparse.py +2718 -0
- warp/_src/tape.py +1208 -0
- warp/_src/thirdparty/__init__.py +0 -0
- warp/_src/thirdparty/appdirs.py +598 -0
- warp/_src/thirdparty/dlpack.py +145 -0
- warp/_src/thirdparty/unittest_parallel.py +676 -0
- warp/_src/torch.py +393 -0
- warp/_src/types.py +5888 -0
- warp/_src/utils.py +1695 -0
- warp/autograd.py +33 -0
- warp/bin/libwarp-clang.dylib +0 -0
- warp/bin/libwarp.dylib +0 -0
- warp/build.py +29 -0
- warp/build_dll.py +24 -0
- warp/codegen.py +24 -0
- warp/constants.py +24 -0
- warp/context.py +33 -0
- warp/dlpack.py +24 -0
- warp/examples/__init__.py +24 -0
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/assets/pixel.jpg +0 -0
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/assets/square_cloth.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +389 -0
- warp/examples/benchmarks/benchmark_cloth.py +296 -0
- warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
- warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
- warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
- warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
- warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
- warp/examples/benchmarks/benchmark_gemm.py +164 -0
- warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
- warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
- warp/examples/benchmarks/benchmark_launches.py +301 -0
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/benchmarks/benchmark_tile_sort.py +155 -0
- warp/examples/browse.py +37 -0
- warp/examples/core/example_cupy.py +86 -0
- warp/examples/core/example_dem.py +241 -0
- warp/examples/core/example_fluid.py +299 -0
- warp/examples/core/example_graph_capture.py +150 -0
- warp/examples/core/example_marching_cubes.py +195 -0
- warp/examples/core/example_mesh.py +180 -0
- warp/examples/core/example_mesh_intersect.py +211 -0
- warp/examples/core/example_nvdb.py +182 -0
- warp/examples/core/example_raycast.py +111 -0
- warp/examples/core/example_raymarch.py +205 -0
- warp/examples/core/example_render_opengl.py +290 -0
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +411 -0
- warp/examples/core/example_spin_lock.py +93 -0
- warp/examples/core/example_torch.py +211 -0
- warp/examples/core/example_wave.py +269 -0
- warp/examples/core/example_work_queue.py +118 -0
- warp/examples/distributed/example_jacobi_mpi.py +506 -0
- warp/examples/fem/example_adaptive_grid.py +286 -0
- warp/examples/fem/example_apic_fluid.py +469 -0
- warp/examples/fem/example_burgers.py +261 -0
- warp/examples/fem/example_convection_diffusion.py +181 -0
- warp/examples/fem/example_convection_diffusion_dg.py +225 -0
- warp/examples/fem/example_darcy_ls_optimization.py +489 -0
- warp/examples/fem/example_deformed_geometry.py +172 -0
- warp/examples/fem/example_diffusion.py +196 -0
- warp/examples/fem/example_diffusion_3d.py +225 -0
- warp/examples/fem/example_diffusion_mgpu.py +225 -0
- warp/examples/fem/example_distortion_energy.py +228 -0
- warp/examples/fem/example_elastic_shape_optimization.py +387 -0
- warp/examples/fem/example_magnetostatics.py +242 -0
- warp/examples/fem/example_mixed_elasticity.py +293 -0
- warp/examples/fem/example_navier_stokes.py +263 -0
- warp/examples/fem/example_nonconforming_contact.py +300 -0
- warp/examples/fem/example_stokes.py +213 -0
- warp/examples/fem/example_stokes_transfer.py +262 -0
- warp/examples/fem/example_streamlines.py +357 -0
- warp/examples/fem/utils.py +1047 -0
- warp/examples/interop/example_jax_callable.py +146 -0
- warp/examples/interop/example_jax_ffi_callback.py +132 -0
- warp/examples/interop/example_jax_kernel.py +232 -0
- warp/examples/optim/example_diffray.py +561 -0
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/tile/example_tile_block_cholesky.py +502 -0
- warp/examples/tile/example_tile_cholesky.py +88 -0
- warp/examples/tile/example_tile_convolution.py +66 -0
- warp/examples/tile/example_tile_fft.py +55 -0
- warp/examples/tile/example_tile_filtering.py +113 -0
- warp/examples/tile/example_tile_matmul.py +85 -0
- warp/examples/tile/example_tile_mcgp.py +191 -0
- warp/examples/tile/example_tile_mlp.py +385 -0
- warp/examples/tile/example_tile_nbody.py +199 -0
- warp/fabric.py +24 -0
- warp/fem/__init__.py +173 -0
- warp/fem/adaptivity.py +26 -0
- warp/fem/cache.py +30 -0
- warp/fem/dirichlet.py +24 -0
- warp/fem/field/__init__.py +24 -0
- warp/fem/field/field.py +26 -0
- warp/fem/geometry/__init__.py +21 -0
- warp/fem/geometry/closest_point.py +31 -0
- warp/fem/linalg.py +38 -0
- warp/fem/operator.py +32 -0
- warp/fem/polynomial.py +29 -0
- warp/fem/space/__init__.py +22 -0
- warp/fem/space/basis_space.py +24 -0
- warp/fem/space/shape/__init__.py +68 -0
- warp/fem/space/topology.py +24 -0
- warp/fem/types.py +24 -0
- warp/fem/utils.py +32 -0
- warp/jax.py +29 -0
- warp/jax_experimental/__init__.py +29 -0
- warp/jax_experimental/custom_call.py +29 -0
- warp/jax_experimental/ffi.py +39 -0
- warp/jax_experimental/xla_ffi.py +24 -0
- warp/marching_cubes.py +24 -0
- warp/math.py +37 -0
- warp/native/array.h +1687 -0
- warp/native/builtin.h +2327 -0
- warp/native/bvh.cpp +562 -0
- warp/native/bvh.cu +826 -0
- warp/native/bvh.h +555 -0
- warp/native/clang/clang.cpp +541 -0
- warp/native/coloring.cpp +622 -0
- warp/native/crt.cpp +51 -0
- warp/native/crt.h +568 -0
- warp/native/cuda_crt.h +1058 -0
- warp/native/cuda_util.cpp +677 -0
- warp/native/cuda_util.h +313 -0
- warp/native/error.cpp +77 -0
- warp/native/error.h +36 -0
- warp/native/exports.h +2023 -0
- warp/native/fabric.h +246 -0
- warp/native/hashgrid.cpp +311 -0
- warp/native/hashgrid.cu +89 -0
- warp/native/hashgrid.h +240 -0
- warp/native/initializer_array.h +41 -0
- warp/native/intersect.h +1253 -0
- warp/native/intersect_adj.h +375 -0
- warp/native/intersect_tri.h +348 -0
- warp/native/mat.h +5189 -0
- warp/native/mathdx.cpp +93 -0
- warp/native/matnn.h +221 -0
- warp/native/mesh.cpp +266 -0
- warp/native/mesh.cu +406 -0
- warp/native/mesh.h +2097 -0
- warp/native/nanovdb/GridHandle.h +533 -0
- warp/native/nanovdb/HostBuffer.h +591 -0
- warp/native/nanovdb/NanoVDB.h +6246 -0
- warp/native/nanovdb/NodeManager.h +323 -0
- warp/native/nanovdb/PNanoVDB.h +3390 -0
- warp/native/noise.h +859 -0
- warp/native/quat.h +1664 -0
- warp/native/rand.h +342 -0
- warp/native/range.h +145 -0
- warp/native/reduce.cpp +174 -0
- warp/native/reduce.cu +363 -0
- warp/native/runlength_encode.cpp +79 -0
- warp/native/runlength_encode.cu +61 -0
- warp/native/scan.cpp +47 -0
- warp/native/scan.cu +55 -0
- warp/native/scan.h +23 -0
- warp/native/solid_angle.h +466 -0
- warp/native/sort.cpp +251 -0
- warp/native/sort.cu +286 -0
- warp/native/sort.h +35 -0
- warp/native/sparse.cpp +241 -0
- warp/native/sparse.cu +435 -0
- warp/native/spatial.h +1306 -0
- warp/native/svd.h +727 -0
- warp/native/temp_buffer.h +46 -0
- warp/native/tile.h +4124 -0
- warp/native/tile_radix_sort.h +1112 -0
- warp/native/tile_reduce.h +838 -0
- warp/native/tile_scan.h +240 -0
- warp/native/tuple.h +189 -0
- warp/native/vec.h +2199 -0
- warp/native/version.h +23 -0
- warp/native/volume.cpp +501 -0
- warp/native/volume.cu +68 -0
- warp/native/volume.h +970 -0
- warp/native/volume_builder.cu +483 -0
- warp/native/volume_builder.h +52 -0
- warp/native/volume_impl.h +70 -0
- warp/native/warp.cpp +1143 -0
- warp/native/warp.cu +4604 -0
- warp/native/warp.h +358 -0
- warp/optim/__init__.py +20 -0
- warp/optim/adam.py +24 -0
- warp/optim/linear.py +35 -0
- warp/optim/sgd.py +24 -0
- warp/paddle.py +24 -0
- warp/py.typed +0 -0
- warp/render/__init__.py +22 -0
- warp/render/imgui_manager.py +29 -0
- warp/render/render_opengl.py +24 -0
- warp/render/render_usd.py +24 -0
- warp/render/utils.py +24 -0
- warp/sparse.py +51 -0
- warp/tape.py +24 -0
- warp/tests/__init__.py +1 -0
- warp/tests/__main__.py +4 -0
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/mlp_golden.npy +0 -0
- warp/tests/assets/pixel.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/assets/spiky.usd +0 -0
- warp/tests/assets/test_grid.nvdb +0 -0
- warp/tests/assets/test_index_grid.nvdb +0 -0
- warp/tests/assets/test_int32_grid.nvdb +0 -0
- warp/tests/assets/test_vec_grid.nvdb +0 -0
- warp/tests/assets/torus.nvdb +0 -0
- warp/tests/assets/torus.usda +105 -0
- warp/tests/aux_test_class_kernel.py +34 -0
- warp/tests/aux_test_compile_consts_dummy.py +18 -0
- warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
- warp/tests/aux_test_dependent.py +29 -0
- warp/tests/aux_test_grad_customs.py +29 -0
- warp/tests/aux_test_instancing_gc.py +26 -0
- warp/tests/aux_test_module_aot.py +7 -0
- warp/tests/aux_test_module_unload.py +23 -0
- warp/tests/aux_test_name_clash1.py +40 -0
- warp/tests/aux_test_name_clash2.py +40 -0
- warp/tests/aux_test_reference.py +9 -0
- warp/tests/aux_test_reference_reference.py +8 -0
- warp/tests/aux_test_square.py +16 -0
- warp/tests/aux_test_unresolved_func.py +22 -0
- warp/tests/aux_test_unresolved_symbol.py +22 -0
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/cuda/test_async.py +676 -0
- warp/tests/cuda/test_conditional_captures.py +1147 -0
- warp/tests/cuda/test_ipc.py +124 -0
- warp/tests/cuda/test_mempool.py +233 -0
- warp/tests/cuda/test_multigpu.py +169 -0
- warp/tests/cuda/test_peer.py +139 -0
- warp/tests/cuda/test_pinned.py +84 -0
- warp/tests/cuda/test_streams.py +691 -0
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/geometry/test_bvh.py +335 -0
- warp/tests/geometry/test_hash_grid.py +259 -0
- warp/tests/geometry/test_marching_cubes.py +294 -0
- warp/tests/geometry/test_mesh.py +318 -0
- warp/tests/geometry/test_mesh_query_aabb.py +392 -0
- warp/tests/geometry/test_mesh_query_point.py +935 -0
- warp/tests/geometry/test_mesh_query_ray.py +323 -0
- warp/tests/geometry/test_volume.py +1103 -0
- warp/tests/geometry/test_volume_write.py +346 -0
- warp/tests/interop/__init__.py +0 -0
- warp/tests/interop/test_dlpack.py +730 -0
- warp/tests/interop/test_jax.py +1673 -0
- warp/tests/interop/test_paddle.py +800 -0
- warp/tests/interop/test_torch.py +1001 -0
- warp/tests/run_coverage_serial.py +39 -0
- warp/tests/test_adam.py +162 -0
- warp/tests/test_arithmetic.py +1096 -0
- warp/tests/test_array.py +3756 -0
- warp/tests/test_array_reduce.py +156 -0
- warp/tests/test_assert.py +303 -0
- warp/tests/test_atomic.py +336 -0
- warp/tests/test_atomic_bitwise.py +209 -0
- warp/tests/test_atomic_cas.py +312 -0
- warp/tests/test_bool.py +220 -0
- warp/tests/test_builtins_resolution.py +732 -0
- warp/tests/test_closest_point_edge_edge.py +327 -0
- warp/tests/test_codegen.py +974 -0
- warp/tests/test_codegen_instancing.py +1495 -0
- warp/tests/test_compile_consts.py +215 -0
- warp/tests/test_conditional.py +298 -0
- warp/tests/test_context.py +35 -0
- warp/tests/test_copy.py +319 -0
- warp/tests/test_ctypes.py +618 -0
- warp/tests/test_dense.py +73 -0
- warp/tests/test_devices.py +127 -0
- warp/tests/test_enum.py +136 -0
- warp/tests/test_examples.py +424 -0
- warp/tests/test_fabricarray.py +998 -0
- warp/tests/test_fast_math.py +72 -0
- warp/tests/test_fem.py +2204 -0
- warp/tests/test_fixedarray.py +229 -0
- warp/tests/test_fp16.py +136 -0
- warp/tests/test_func.py +501 -0
- warp/tests/test_future_annotations.py +100 -0
- warp/tests/test_generics.py +656 -0
- warp/tests/test_grad.py +893 -0
- warp/tests/test_grad_customs.py +339 -0
- warp/tests/test_grad_debug.py +341 -0
- warp/tests/test_implicit_init.py +411 -0
- warp/tests/test_import.py +45 -0
- warp/tests/test_indexedarray.py +1140 -0
- warp/tests/test_intersect.py +103 -0
- warp/tests/test_iter.py +76 -0
- warp/tests/test_large.py +177 -0
- warp/tests/test_launch.py +411 -0
- warp/tests/test_lerp.py +151 -0
- warp/tests/test_linear_solvers.py +223 -0
- warp/tests/test_lvalue.py +427 -0
- warp/tests/test_map.py +526 -0
- warp/tests/test_mat.py +3515 -0
- warp/tests/test_mat_assign_copy.py +178 -0
- warp/tests/test_mat_constructors.py +573 -0
- warp/tests/test_mat_lite.py +122 -0
- warp/tests/test_mat_scalar_ops.py +2913 -0
- warp/tests/test_math.py +212 -0
- warp/tests/test_module_aot.py +287 -0
- warp/tests/test_module_hashing.py +258 -0
- warp/tests/test_modules_lite.py +70 -0
- warp/tests/test_noise.py +252 -0
- warp/tests/test_operators.py +299 -0
- warp/tests/test_options.py +129 -0
- warp/tests/test_overwrite.py +551 -0
- warp/tests/test_print.py +408 -0
- warp/tests/test_quat.py +2653 -0
- warp/tests/test_quat_assign_copy.py +145 -0
- warp/tests/test_rand.py +339 -0
- warp/tests/test_reload.py +303 -0
- warp/tests/test_rounding.py +157 -0
- warp/tests/test_runlength_encode.py +196 -0
- warp/tests/test_scalar_ops.py +133 -0
- warp/tests/test_smoothstep.py +108 -0
- warp/tests/test_snippet.py +318 -0
- warp/tests/test_sparse.py +845 -0
- warp/tests/test_spatial.py +2859 -0
- warp/tests/test_spatial_assign_copy.py +160 -0
- warp/tests/test_special_values.py +361 -0
- warp/tests/test_static.py +640 -0
- warp/tests/test_struct.py +901 -0
- warp/tests/test_tape.py +242 -0
- warp/tests/test_transient_module.py +93 -0
- warp/tests/test_triangle_closest_point.py +192 -0
- warp/tests/test_tuple.py +361 -0
- warp/tests/test_types.py +615 -0
- warp/tests/test_utils.py +594 -0
- warp/tests/test_vec.py +1408 -0
- warp/tests/test_vec_assign_copy.py +143 -0
- warp/tests/test_vec_constructors.py +325 -0
- warp/tests/test_vec_lite.py +80 -0
- warp/tests/test_vec_scalar_ops.py +2327 -0
- warp/tests/test_verify_fp.py +100 -0
- warp/tests/test_version.py +75 -0
- warp/tests/tile/__init__.py +0 -0
- warp/tests/tile/test_tile.py +1519 -0
- warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
- warp/tests/tile/test_tile_cholesky.py +608 -0
- warp/tests/tile/test_tile_load.py +724 -0
- warp/tests/tile/test_tile_mathdx.py +156 -0
- warp/tests/tile/test_tile_matmul.py +179 -0
- warp/tests/tile/test_tile_mlp.py +400 -0
- warp/tests/tile/test_tile_reduce.py +950 -0
- warp/tests/tile/test_tile_shared_memory.py +376 -0
- warp/tests/tile/test_tile_sort.py +121 -0
- warp/tests/tile/test_tile_view.py +173 -0
- warp/tests/unittest_serial.py +47 -0
- warp/tests/unittest_suites.py +430 -0
- warp/tests/unittest_utils.py +469 -0
- warp/tests/walkthrough_debug.py +95 -0
- warp/torch.py +24 -0
- warp/types.py +51 -0
- warp/utils.py +31 -0
- warp_lang-1.10.0.dist-info/METADATA +459 -0
- warp_lang-1.10.0.dist-info/RECORD +468 -0
- warp_lang-1.10.0.dist-info/WHEEL +5 -0
- warp_lang-1.10.0.dist-info/licenses/LICENSE.md +176 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import unittest
|
|
17
|
+
|
|
18
|
+
import warp as wp
|
|
19
|
+
import warp.tests.aux_test_compile_consts_dummy
|
|
20
|
+
from warp.tests.unittest_utils import *
|
|
21
|
+
|
|
22
|
+
LOCAL_ONE = wp.constant(1)
|
|
23
|
+
|
|
24
|
+
SQRT3_OVER_3 = wp.constant(0.57735026919)
|
|
25
|
+
UNIT_VEC = wp.constant(wp.vec3(SQRT3_OVER_3, SQRT3_OVER_3, SQRT3_OVER_3))
|
|
26
|
+
ONE_FP16 = wp.constant(wp.float16(1.0))
|
|
27
|
+
TEST_BOOL = wp.constant(True)
|
|
28
|
+
|
|
29
|
+
SHADOWED_GLOBAL = wp.constant(17)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class Foobar:
|
|
33
|
+
ONE = wp.constant(1)
|
|
34
|
+
TWO = wp.constant(2)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@wp.kernel
|
|
38
|
+
def test_bool():
|
|
39
|
+
if TEST_BOOL:
|
|
40
|
+
expect_eq(1.0, 1.0)
|
|
41
|
+
else:
|
|
42
|
+
expect_eq(1.0, -1.0)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@wp.kernel
|
|
46
|
+
def test_int(a: int):
|
|
47
|
+
if Foobar.ONE > 0:
|
|
48
|
+
a = 123 + Foobar.TWO + warp.tests.aux_test_compile_consts_dummy.MINUS_ONE
|
|
49
|
+
else:
|
|
50
|
+
a = 456 + LOCAL_ONE
|
|
51
|
+
expect_eq(a, 124)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@wp.kernel
|
|
55
|
+
def test_float(x: float):
|
|
56
|
+
x = SQRT3_OVER_3
|
|
57
|
+
for i in range(3):
|
|
58
|
+
expect_eq(UNIT_VEC[i], x)
|
|
59
|
+
|
|
60
|
+
approx_one = wp.dot(UNIT_VEC, UNIT_VEC)
|
|
61
|
+
expect_near(approx_one, 1.0, 1e-6)
|
|
62
|
+
|
|
63
|
+
# test casting
|
|
64
|
+
expect_near(wp.float32(ONE_FP16), 1.0, 1e-6)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def test_closure_capture(test, device):
|
|
68
|
+
def make_closure_kernel(cst):
|
|
69
|
+
def closure_kernel_fn(expected: int):
|
|
70
|
+
wp.expect_eq(cst, expected)
|
|
71
|
+
|
|
72
|
+
return wp.Kernel(func=closure_kernel_fn)
|
|
73
|
+
|
|
74
|
+
one_closure = make_closure_kernel(Foobar.ONE)
|
|
75
|
+
two_closure = make_closure_kernel(Foobar.TWO)
|
|
76
|
+
|
|
77
|
+
wp.launch(one_closure, dim=(1), inputs=[1], device=device)
|
|
78
|
+
wp.launch(two_closure, dim=(1), inputs=[2], device=device)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def test_closure_precedence(test, device):
|
|
82
|
+
"""Verifies that closure constants take precedence over globals"""
|
|
83
|
+
|
|
84
|
+
SHADOWED_GLOBAL = wp.constant(42)
|
|
85
|
+
|
|
86
|
+
@wp.kernel
|
|
87
|
+
def closure_kernel():
|
|
88
|
+
wp.expect_eq(SHADOWED_GLOBAL, 42)
|
|
89
|
+
|
|
90
|
+
wp.launch(closure_kernel, dim=1, device=device)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def test_hash_global_capture(test, device):
|
|
94
|
+
"""Verifies that global variables are included in the module hash"""
|
|
95
|
+
|
|
96
|
+
a = 0
|
|
97
|
+
wp.launch(test_int, (1,), inputs=[a], device=device)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_hash_redefine_kernel(test, device):
|
|
101
|
+
"""This test defines a second ``test_function`` so that the second launch returns the correct result."""
|
|
102
|
+
|
|
103
|
+
@wp.kernel
|
|
104
|
+
def test_function(data: wp.array(dtype=wp.float32)):
|
|
105
|
+
i = wp.tid()
|
|
106
|
+
data[i] = TEST_CONSTANT
|
|
107
|
+
|
|
108
|
+
TEST_CONSTANT = wp.constant(1.0)
|
|
109
|
+
|
|
110
|
+
test_array = wp.empty(1, dtype=wp.float32, device=device)
|
|
111
|
+
wp.launch(test_function, (1,), inputs=[test_array], device=device)
|
|
112
|
+
test.assertEqual(test_array.numpy()[0], 1.0)
|
|
113
|
+
|
|
114
|
+
module_hash_0 = wp.get_module(test_function.__module__).hash_module()
|
|
115
|
+
|
|
116
|
+
@wp.kernel
|
|
117
|
+
def test_function(data: wp.array(dtype=wp.float32)):
|
|
118
|
+
i = wp.tid()
|
|
119
|
+
data[i] = TEST_CONSTANT
|
|
120
|
+
|
|
121
|
+
TEST_CONSTANT = wp.constant(2.0)
|
|
122
|
+
|
|
123
|
+
wp.launch(test_function, (1,), inputs=[test_array], device=device)
|
|
124
|
+
test.assertEqual(test_array.numpy()[0], 2.0)
|
|
125
|
+
|
|
126
|
+
module_hash_1 = wp.get_module(test_function.__module__).hash_module()
|
|
127
|
+
|
|
128
|
+
test.assertNotEqual(module_hash_0, module_hash_1)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def test_hash_redefine_constant_only(test, device):
|
|
132
|
+
"""This test does not define a second ``test_function``, so the second launch does not invalidate the cache.
|
|
133
|
+
|
|
134
|
+
For now this is expected behavior, but we can verify that the content has is different.
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
@wp.kernel
|
|
138
|
+
def test_function(data: wp.array(dtype=wp.float32)):
|
|
139
|
+
i = wp.tid()
|
|
140
|
+
data[i] = TEST_CONSTANT
|
|
141
|
+
|
|
142
|
+
TEST_CONSTANT = wp.constant(1.0)
|
|
143
|
+
|
|
144
|
+
test_array = wp.empty(1, dtype=wp.float32, device=device)
|
|
145
|
+
wp.launch(test_function, (1,), inputs=[test_array], device=device)
|
|
146
|
+
test.assertEqual(test_array.numpy()[0], 1.0)
|
|
147
|
+
|
|
148
|
+
module_hash_0 = wp.get_module(test_function.__module__).hash_module()
|
|
149
|
+
|
|
150
|
+
TEST_CONSTANT = wp.constant(2.0)
|
|
151
|
+
module_hash_1 = wp.get_module(test_function.__module__).hash_module()
|
|
152
|
+
test.assertNotEqual(module_hash_0, module_hash_1, "Module hashes should be different if TEST_CONSTANT is changed.")
|
|
153
|
+
|
|
154
|
+
TEST_CONSTANT = wp.constant(1.0)
|
|
155
|
+
module_hash_2 = wp.get_module(test_function.__module__).hash_module()
|
|
156
|
+
test.assertEqual(module_hash_0, module_hash_2, "Module hashes should be the same if TEST_CONSTANT is the same.")
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def test_hash_shadowed_var(test, device):
|
|
160
|
+
"""Tests to ensure shadowed variables are not mistakenly added to the module hash"""
|
|
161
|
+
|
|
162
|
+
TEST_CONSTANT_SHADOW_0 = wp.constant(1.0)
|
|
163
|
+
TEST_CONSTANT_SHADOW_1 = wp.constant(1.0)
|
|
164
|
+
TEST_CONSTANT_SHADOW_2 = wp.constant(1.0)
|
|
165
|
+
|
|
166
|
+
@wp.kernel
|
|
167
|
+
def test_function(data: wp.array(dtype=wp.float32)):
|
|
168
|
+
i = wp.tid()
|
|
169
|
+
TEST_CONSTANT_SHADOW_0 = 2.0
|
|
170
|
+
TEST_CONSTANT_SHADOW_1, TEST_CONSTANT_SHADOW_2 = 4.0, 8.0
|
|
171
|
+
data[i] = TEST_CONSTANT_SHADOW_0 + TEST_CONSTANT_SHADOW_1 + TEST_CONSTANT_SHADOW_2
|
|
172
|
+
|
|
173
|
+
test_array = wp.empty(1, dtype=wp.float32, device=device)
|
|
174
|
+
wp.launch(test_function, (1,), inputs=[test_array], device=device)
|
|
175
|
+
test.assertEqual(test_array.numpy()[0], 14.0)
|
|
176
|
+
|
|
177
|
+
module_hash_0 = wp.get_module(test_function.__module__).hash_module()
|
|
178
|
+
|
|
179
|
+
TEST_CONSTANT_SHADOW_0 = wp.constant(0.0)
|
|
180
|
+
TEST_CONSTANT_SHADOW_1 = wp.constant(0.0)
|
|
181
|
+
TEST_CONSTANT_SHADOW_2 = wp.constant(0.0)
|
|
182
|
+
module_hash_1 = wp.get_module(test_function.__module__).hash_module()
|
|
183
|
+
test.assertEqual(module_hash_0, module_hash_1, "Module hashes should be the same since all constants are shadowed.")
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
class TestConstants(unittest.TestCase):
|
|
187
|
+
def test_constant_math(self):
|
|
188
|
+
# test doing math with python defined constants in *python* scope
|
|
189
|
+
twopi = wp.pi * 2.0
|
|
190
|
+
|
|
191
|
+
import math
|
|
192
|
+
|
|
193
|
+
self.assertEqual(twopi, math.pi * 2.0)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
a = 0
|
|
197
|
+
x = 0.0
|
|
198
|
+
|
|
199
|
+
devices = get_test_devices()
|
|
200
|
+
|
|
201
|
+
add_kernel_test(TestConstants, test_bool, dim=1, inputs=[], devices=devices)
|
|
202
|
+
add_kernel_test(TestConstants, test_int, dim=1, inputs=[a], devices=devices)
|
|
203
|
+
add_kernel_test(TestConstants, test_float, dim=1, inputs=[x], devices=devices)
|
|
204
|
+
|
|
205
|
+
add_function_test(TestConstants, "test_closure_capture", test_closure_capture, devices=devices)
|
|
206
|
+
add_function_test(TestConstants, "test_closure_precedence", test_closure_precedence, devices=devices)
|
|
207
|
+
add_function_test(TestConstants, "test_hash_global_capture", test_hash_global_capture, devices=devices)
|
|
208
|
+
add_function_test(TestConstants, "test_hash_redefine_kernel", test_hash_redefine_kernel, devices=devices)
|
|
209
|
+
add_function_test(TestConstants, "test_hash_redefine_constant_only", test_hash_redefine_constant_only, devices=devices)
|
|
210
|
+
add_function_test(TestConstants, "test_hash_shadowed_var", test_hash_shadowed_var, devices=devices)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
if __name__ == "__main__":
|
|
214
|
+
wp.clear_kernel_cache()
|
|
215
|
+
unittest.main(verbosity=2)
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import unittest
|
|
17
|
+
|
|
18
|
+
import warp as wp
|
|
19
|
+
from warp.tests.unittest_utils import *
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@wp.kernel
|
|
23
|
+
def test_conditional_if_else():
|
|
24
|
+
a = 0.5
|
|
25
|
+
b = 2.0
|
|
26
|
+
|
|
27
|
+
if a > b:
|
|
28
|
+
c = 1.0
|
|
29
|
+
else:
|
|
30
|
+
c = -1.0
|
|
31
|
+
|
|
32
|
+
wp.expect_eq(c, -1.0)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@wp.kernel
|
|
36
|
+
def test_conditional_if_else_nested():
|
|
37
|
+
a = 1.0
|
|
38
|
+
b = 2.0
|
|
39
|
+
|
|
40
|
+
if a > b:
|
|
41
|
+
c = 3.0
|
|
42
|
+
d = 4.0
|
|
43
|
+
|
|
44
|
+
if c > d:
|
|
45
|
+
e = 1.0
|
|
46
|
+
else:
|
|
47
|
+
e = -1.0
|
|
48
|
+
|
|
49
|
+
else:
|
|
50
|
+
c = 6.0
|
|
51
|
+
d = 7.0
|
|
52
|
+
|
|
53
|
+
if c > d:
|
|
54
|
+
e = 2.0
|
|
55
|
+
else:
|
|
56
|
+
e = -2.0
|
|
57
|
+
|
|
58
|
+
wp.expect_eq(e, -2.0)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@wp.kernel
|
|
62
|
+
def test_conditional_ifexp():
|
|
63
|
+
a = 0.5
|
|
64
|
+
b = 2.0
|
|
65
|
+
|
|
66
|
+
c = 1.0 if a > b else -1.0
|
|
67
|
+
|
|
68
|
+
wp.expect_eq(c, -1.0)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@wp.kernel
|
|
72
|
+
def test_conditional_ifexp_nested():
|
|
73
|
+
a = 1.0
|
|
74
|
+
b = 2.0
|
|
75
|
+
|
|
76
|
+
c = 3.0 if a > b else 6.0
|
|
77
|
+
d = 4.0 if a > b else 7.0
|
|
78
|
+
e = 1.0 if (a > b and c > d) else (-1.0 if a > b else (2.0 if c > d else -2.0))
|
|
79
|
+
|
|
80
|
+
wp.expect_eq(e, -2.0)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@wp.kernel
|
|
84
|
+
def test_conditional_ifexp_constant():
|
|
85
|
+
a = 1.0 if False else -1.0
|
|
86
|
+
b = 2.0 if 123 else -2.0
|
|
87
|
+
|
|
88
|
+
wp.expect_eq(a, -1.0)
|
|
89
|
+
wp.expect_eq(b, 2.0)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@wp.kernel
|
|
93
|
+
def test_conditional_ifexp_constant_nested():
|
|
94
|
+
a = 1.0 if False else (2.0 if True else 3.0)
|
|
95
|
+
b = 4.0 if 0 else (5.0 if 0 else (6.0 if False else 7.0))
|
|
96
|
+
c = 8.0 if False else (9.0 if False else (10.0 if 321 else 11.0))
|
|
97
|
+
|
|
98
|
+
wp.expect_eq(a, 2.0)
|
|
99
|
+
wp.expect_eq(b, 7.0)
|
|
100
|
+
wp.expect_eq(c, 10.0)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@wp.kernel
|
|
104
|
+
def test_boolean_and():
|
|
105
|
+
a = 1.0
|
|
106
|
+
b = 2.0
|
|
107
|
+
c = 1.0
|
|
108
|
+
|
|
109
|
+
if a > 0.0 and b > 0.0:
|
|
110
|
+
c = -1.0
|
|
111
|
+
|
|
112
|
+
wp.expect_eq(c, -1.0)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@wp.kernel
|
|
116
|
+
def test_boolean_or():
|
|
117
|
+
a = 1.0
|
|
118
|
+
b = 2.0
|
|
119
|
+
c = 1.0
|
|
120
|
+
|
|
121
|
+
if a > 0.0 and b > 0.0:
|
|
122
|
+
c = -1.0
|
|
123
|
+
|
|
124
|
+
wp.expect_eq(c, -1.0)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@wp.kernel
|
|
128
|
+
def test_boolean_compound():
|
|
129
|
+
a = 1.0
|
|
130
|
+
b = 2.0
|
|
131
|
+
c = 3.0
|
|
132
|
+
|
|
133
|
+
d = 1.0
|
|
134
|
+
|
|
135
|
+
if (a > 0.0 and b > 0.0) or c > a:
|
|
136
|
+
d = -1.0
|
|
137
|
+
|
|
138
|
+
wp.expect_eq(d, -1.0)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@wp.kernel
|
|
142
|
+
def test_boolean_literal():
|
|
143
|
+
t = True
|
|
144
|
+
f = False
|
|
145
|
+
|
|
146
|
+
r = 1.0
|
|
147
|
+
|
|
148
|
+
if t == (not f):
|
|
149
|
+
r = -1.0
|
|
150
|
+
|
|
151
|
+
wp.expect_eq(r, -1.0)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@wp.kernel
|
|
155
|
+
def test_int_logical_not():
|
|
156
|
+
x = 0
|
|
157
|
+
if not 123:
|
|
158
|
+
x = 123
|
|
159
|
+
|
|
160
|
+
wp.expect_eq(x, 0)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
@wp.kernel
|
|
164
|
+
def test_int_conditional_assign_overload():
|
|
165
|
+
if 123:
|
|
166
|
+
x = 123
|
|
167
|
+
|
|
168
|
+
if 234:
|
|
169
|
+
x = 234
|
|
170
|
+
|
|
171
|
+
wp.expect_eq(x, 234)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
@wp.kernel
|
|
175
|
+
def test_bool_param_conditional(foo: bool):
|
|
176
|
+
if foo:
|
|
177
|
+
x = 123
|
|
178
|
+
|
|
179
|
+
wp.expect_eq(x, 123)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
@wp.kernel
|
|
183
|
+
def test_conditional_chain_basic():
|
|
184
|
+
x = -1
|
|
185
|
+
|
|
186
|
+
if 0 < x < 1:
|
|
187
|
+
success = False
|
|
188
|
+
else:
|
|
189
|
+
success = True
|
|
190
|
+
wp.expect_eq(success, True)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@wp.kernel
|
|
194
|
+
def test_conditional_chain_empty_range():
|
|
195
|
+
x = -1
|
|
196
|
+
y = 4
|
|
197
|
+
|
|
198
|
+
if -2 <= x <= 10 <= y:
|
|
199
|
+
success = False
|
|
200
|
+
else:
|
|
201
|
+
success = True
|
|
202
|
+
wp.expect_eq(success, True)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
@wp.kernel
|
|
206
|
+
def test_conditional_chain_faker():
|
|
207
|
+
x = -1
|
|
208
|
+
|
|
209
|
+
# Not actually a chained inequality
|
|
210
|
+
if (-2 < x) < (1 > 0):
|
|
211
|
+
success = False
|
|
212
|
+
else:
|
|
213
|
+
success = True
|
|
214
|
+
wp.expect_eq(success, True)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
@wp.kernel
|
|
218
|
+
def test_conditional_chain_and():
|
|
219
|
+
x = -1
|
|
220
|
+
|
|
221
|
+
if (-2 < x < 0) and (-1 <= x <= -1):
|
|
222
|
+
success = True
|
|
223
|
+
else:
|
|
224
|
+
success = False
|
|
225
|
+
wp.expect_eq(success, True)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
@wp.kernel
|
|
229
|
+
def test_conditional_chain_eqs():
|
|
230
|
+
x = wp.int32(10)
|
|
231
|
+
y = 10
|
|
232
|
+
z = -10
|
|
233
|
+
|
|
234
|
+
if x == y != z:
|
|
235
|
+
success = True
|
|
236
|
+
else:
|
|
237
|
+
success = False
|
|
238
|
+
wp.expect_eq(success, True)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
@wp.kernel
|
|
242
|
+
def test_conditional_chain_mixed():
|
|
243
|
+
x = 0
|
|
244
|
+
|
|
245
|
+
if x < 10 == 1:
|
|
246
|
+
success = False
|
|
247
|
+
else:
|
|
248
|
+
success = True
|
|
249
|
+
wp.expect_eq(success, True)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def test_conditional_unequal_types(test: unittest.TestCase, device):
|
|
253
|
+
# The bad kernel must be in a separate module, otherwise the current module would fail to load
|
|
254
|
+
from warp.tests.aux_test_conditional_unequal_types_kernels import (
|
|
255
|
+
unequal_types_kernel,
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
with test.assertRaises(TypeError):
|
|
259
|
+
wp.launch(unequal_types_kernel, dim=(1,), inputs=[], device=device)
|
|
260
|
+
|
|
261
|
+
# remove all references to the bad module so that subsequent calls to wp.force_load()
|
|
262
|
+
# won't try to load it unless we explicitly re-import it again
|
|
263
|
+
del wp._src.context.user_modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
|
|
264
|
+
del sys.modules["warp.tests.aux_test_conditional_unequal_types_kernels"]
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
devices = get_test_devices()
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
class TestConditional(unittest.TestCase):
|
|
271
|
+
pass
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
add_kernel_test(TestConditional, kernel=test_conditional_if_else, dim=1, devices=devices)
|
|
275
|
+
add_kernel_test(TestConditional, kernel=test_conditional_if_else_nested, dim=1, devices=devices)
|
|
276
|
+
add_kernel_test(TestConditional, kernel=test_conditional_ifexp, dim=1, devices=devices)
|
|
277
|
+
add_kernel_test(TestConditional, kernel=test_conditional_ifexp_nested, dim=1, devices=devices)
|
|
278
|
+
add_kernel_test(TestConditional, kernel=test_conditional_ifexp_constant, dim=1, devices=devices)
|
|
279
|
+
add_kernel_test(TestConditional, kernel=test_conditional_ifexp_constant_nested, dim=1, devices=devices)
|
|
280
|
+
add_kernel_test(TestConditional, kernel=test_boolean_and, dim=1, devices=devices)
|
|
281
|
+
add_kernel_test(TestConditional, kernel=test_boolean_or, dim=1, devices=devices)
|
|
282
|
+
add_kernel_test(TestConditional, kernel=test_boolean_compound, dim=1, devices=devices)
|
|
283
|
+
add_kernel_test(TestConditional, kernel=test_boolean_literal, dim=1, devices=devices)
|
|
284
|
+
add_kernel_test(TestConditional, kernel=test_int_logical_not, dim=1, devices=devices)
|
|
285
|
+
add_kernel_test(TestConditional, kernel=test_int_conditional_assign_overload, dim=1, devices=devices)
|
|
286
|
+
add_kernel_test(TestConditional, kernel=test_bool_param_conditional, dim=1, inputs=[True], devices=devices)
|
|
287
|
+
add_kernel_test(TestConditional, kernel=test_conditional_chain_basic, dim=1, devices=devices)
|
|
288
|
+
add_kernel_test(TestConditional, kernel=test_conditional_chain_empty_range, dim=1, devices=devices)
|
|
289
|
+
add_kernel_test(TestConditional, kernel=test_conditional_chain_faker, dim=1, devices=devices)
|
|
290
|
+
add_kernel_test(TestConditional, kernel=test_conditional_chain_and, dim=1, devices=devices)
|
|
291
|
+
add_kernel_test(TestConditional, kernel=test_conditional_chain_eqs, dim=1, devices=devices)
|
|
292
|
+
add_kernel_test(TestConditional, kernel=test_conditional_chain_mixed, dim=1, devices=devices)
|
|
293
|
+
add_function_test(TestConditional, "test_conditional_unequal_types", test_conditional_unequal_types, devices=devices)
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
if __name__ == "__main__":
|
|
297
|
+
wp.clear_kernel_cache()
|
|
298
|
+
unittest.main(verbosity=2)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import unittest
|
|
17
|
+
from typing import List, Tuple
|
|
18
|
+
|
|
19
|
+
import warp as wp
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TestContext(unittest.TestCase):
|
|
23
|
+
def test_context_type_str(self):
|
|
24
|
+
self.assertEqual(wp._src.context.type_str(List[int]), "List[int]")
|
|
25
|
+
self.assertEqual(wp._src.context.type_str(List[float]), "List[float]")
|
|
26
|
+
|
|
27
|
+
self.assertEqual(wp._src.context.type_str(Tuple[int]), "Tuple[int]")
|
|
28
|
+
self.assertEqual(wp._src.context.type_str(Tuple[float]), "Tuple[float]")
|
|
29
|
+
self.assertEqual(wp._src.context.type_str(Tuple[int, float]), "Tuple[int, float]")
|
|
30
|
+
self.assertEqual(wp._src.context.type_str(Tuple[int, ...]), "Tuple[int, ...]")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
wp.clear_kernel_cache()
|
|
35
|
+
unittest.main(verbosity=2)
|