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
warp/native/cuda_util.h
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include "builtin.h"
|
|
21
|
+
|
|
22
|
+
#if WP_ENABLE_CUDA
|
|
23
|
+
|
|
24
|
+
#include <cudaTypedefs.h>
|
|
25
|
+
#include <cuda_runtime_api.h>
|
|
26
|
+
|
|
27
|
+
#include <stdio.h>
|
|
28
|
+
|
|
29
|
+
#include <vector>
|
|
30
|
+
|
|
31
|
+
#define check_cuda(code) (check_cuda_result(code, __FUNCTION__, __FILE__, __LINE__))
|
|
32
|
+
#define check_cu(code) (check_cu_result(code, __FUNCTION__, __FILE__, __LINE__))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
#if defined(__CUDACC__)
|
|
36
|
+
#if _DEBUG
|
|
37
|
+
// helper for launching kernels (synchronize + error checking after each kernel)
|
|
38
|
+
#define wp_launch_device(context, kernel, dim, args) { \
|
|
39
|
+
if (dim) { \
|
|
40
|
+
ContextGuard guard(context); \
|
|
41
|
+
cudaStream_t stream = (cudaStream_t)wp_cuda_stream_get_current(); \
|
|
42
|
+
const int num_threads = 256; \
|
|
43
|
+
const int num_blocks = (dim+num_threads-1)/num_threads; \
|
|
44
|
+
begin_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream, context, #kernel); \
|
|
45
|
+
kernel<<<num_blocks, 256, 0, stream>>>args; \
|
|
46
|
+
check_cuda(wp_cuda_context_check(WP_CURRENT_CONTEXT)); \
|
|
47
|
+
end_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream); }}
|
|
48
|
+
#else
|
|
49
|
+
// helper for launching kernels (no error checking)
|
|
50
|
+
#define wp_launch_device(context, kernel, dim, args) { \
|
|
51
|
+
if (dim) { \
|
|
52
|
+
ContextGuard guard(context); \
|
|
53
|
+
cudaStream_t stream = (cudaStream_t)wp_cuda_stream_get_current(); \
|
|
54
|
+
const int num_threads = 256; \
|
|
55
|
+
const int num_blocks = (dim+num_threads-1)/num_threads; \
|
|
56
|
+
begin_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream, context, #kernel); \
|
|
57
|
+
kernel<<<num_blocks, 256, 0, stream>>>args; \
|
|
58
|
+
end_cuda_range(WP_TIMING_KERNEL_BUILTIN, stream); }}
|
|
59
|
+
#endif // _DEBUG
|
|
60
|
+
#endif // defined(__CUDACC__)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
CUresult cuDriverGetVersion_f(int* version);
|
|
64
|
+
CUresult cuGetErrorName_f(CUresult result, const char** pstr);
|
|
65
|
+
CUresult cuGetErrorString_f(CUresult result, const char** pstr);
|
|
66
|
+
CUresult cuInit_f(unsigned int flags);
|
|
67
|
+
CUresult cuDeviceGet_f(CUdevice *dev, int ordinal);
|
|
68
|
+
CUresult cuDeviceGetCount_f(int* count);
|
|
69
|
+
CUresult cuDeviceGetName_f(char* name, int len, CUdevice dev);
|
|
70
|
+
CUresult cuDeviceGetAttribute_f(int* value, CUdevice_attribute attrib, CUdevice dev);
|
|
71
|
+
CUresult cuDeviceGetUuid_f(CUuuid* uuid, CUdevice dev);
|
|
72
|
+
CUresult cuDevicePrimaryCtxRetain_f(CUcontext* ctx, CUdevice dev);
|
|
73
|
+
CUresult cuDevicePrimaryCtxRelease_f(CUdevice dev);
|
|
74
|
+
CUresult cuDeviceCanAccessPeer_f(int* can_access, CUdevice dev, CUdevice peer_dev);
|
|
75
|
+
CUresult cuMemGetInfo_f(size_t* free, size_t* total);
|
|
76
|
+
CUresult cuCtxGetCurrent_f(CUcontext* ctx);
|
|
77
|
+
CUresult cuCtxSetCurrent_f(CUcontext ctx);
|
|
78
|
+
CUresult cuCtxPushCurrent_f(CUcontext ctx);
|
|
79
|
+
CUresult cuCtxPopCurrent_f(CUcontext* ctx);
|
|
80
|
+
CUresult cuCtxSynchronize_f();
|
|
81
|
+
CUresult cuCtxGetDevice_f(CUdevice* dev);
|
|
82
|
+
CUresult cuCtxCreate_f(CUcontext* ctx, unsigned int flags, CUdevice dev);
|
|
83
|
+
CUresult cuCtxDestroy_f(CUcontext ctx);
|
|
84
|
+
CUresult cuCtxEnablePeerAccess_f(CUcontext peer_ctx, unsigned int flags);
|
|
85
|
+
CUresult cuCtxDisablePeerAccess_f(CUcontext peer_ctx);
|
|
86
|
+
CUresult cuStreamCreate_f(CUstream* stream, unsigned int flags);
|
|
87
|
+
CUresult cuStreamDestroy_f(CUstream stream);
|
|
88
|
+
CUresult cuStreamQuery_f(CUstream stream);
|
|
89
|
+
CUresult cuStreamSynchronize_f(CUstream stream);
|
|
90
|
+
CUresult cuStreamWaitEvent_f(CUstream stream, CUevent event, unsigned int flags);
|
|
91
|
+
CUresult cuStreamGetCtx_f(CUstream stream, CUcontext* pctx);
|
|
92
|
+
CUresult cuStreamGetCaptureInfo_f(CUstream stream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out, CUgraph *graph_out, const CUgraphNode **dependencies_out, size_t *numDependencies_out);
|
|
93
|
+
CUresult cuStreamUpdateCaptureDependencies_f(CUstream stream, CUgraphNode *dependencies, size_t numDependencies, unsigned int flags);
|
|
94
|
+
CUresult cuStreamCreateWithPriority_f(CUstream* phStream, unsigned int flags, int priority);
|
|
95
|
+
CUresult cuStreamGetPriority_f(CUstream hStream, int* priority);
|
|
96
|
+
CUresult cuEventCreate_f(CUevent* event, unsigned int flags);
|
|
97
|
+
CUresult cuEventDestroy_f(CUevent event);
|
|
98
|
+
CUresult cuEventQuery_f(CUevent event);
|
|
99
|
+
CUresult cuEventRecord_f(CUevent event, CUstream stream);
|
|
100
|
+
CUresult cuEventRecordWithFlags_f(CUevent event, CUstream stream, unsigned int flags);
|
|
101
|
+
CUresult cuEventSynchronize_f(CUevent event);
|
|
102
|
+
#if CUDA_VERSION >= 12030
|
|
103
|
+
// function used to add conditional graph nodes, not available in older CUDA versions
|
|
104
|
+
CUresult cuGraphAddNode_f(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, const CUgraphEdgeData *dependencyData, size_t numDependencies, CUgraphNodeParams *nodeParams);
|
|
105
|
+
#endif
|
|
106
|
+
CUresult cuGraphNodeGetDependentNodes_f(CUgraphNode hNode, CUgraphNode *dependentNodes, size_t *numDependentNodes);
|
|
107
|
+
CUresult cuGraphNodeGetType_f(CUgraphNode hNode, CUgraphNodeType* type);
|
|
108
|
+
CUresult cuModuleUnload_f(CUmodule hmod);
|
|
109
|
+
CUresult cuModuleLoadDataEx_f(CUmodule *module, const void *image, unsigned int numOptions, CUjit_option *options, void **optionValues);
|
|
110
|
+
CUresult cuModuleGetFunction_f(CUfunction *hfunc, CUmodule hmod, const char *name);
|
|
111
|
+
CUresult cuLaunchKernel_f(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, void **extra);
|
|
112
|
+
CUresult cuMemcpyPeerAsync_f(CUdeviceptr dst_ptr, CUcontext dst_ctx, CUdeviceptr src_ptr, CUcontext src_ctx, size_t n, CUstream stream);
|
|
113
|
+
CUresult cuPointerGetAttribute_f(void* data, CUpointer_attribute attribute, CUdeviceptr ptr);
|
|
114
|
+
CUresult cuGraphicsMapResources_f(unsigned int count, CUgraphicsResource* resources, CUstream stream);
|
|
115
|
+
CUresult cuGraphicsUnmapResources_f(unsigned int count, CUgraphicsResource* resources, CUstream hStream);
|
|
116
|
+
CUresult cuGraphicsResourceGetMappedPointer_f(CUdeviceptr* pDevPtr, size_t* pSize, CUgraphicsResource resource);
|
|
117
|
+
CUresult cuGraphicsGLRegisterBuffer_f(CUgraphicsResource *pCudaResource, unsigned int buffer, unsigned int flags);
|
|
118
|
+
CUresult cuGraphicsUnregisterResource_f(CUgraphicsResource resource);
|
|
119
|
+
CUresult cuModuleGetGlobal_f(CUdeviceptr* dptr, size_t* bytes, CUmodule hmod, const char* name );
|
|
120
|
+
CUresult cuFuncSetAttribute_f(CUfunction hfunc, CUfunction_attribute attrib, int value);
|
|
121
|
+
CUresult cuIpcGetEventHandle_f(CUipcEventHandle *pHandle, CUevent event);
|
|
122
|
+
CUresult cuIpcOpenEventHandle_f(CUevent *phEvent, CUipcEventHandle handle);
|
|
123
|
+
CUresult cuIpcGetMemHandle_f(CUipcMemHandle *pHandle, CUdeviceptr dptr);
|
|
124
|
+
CUresult cuIpcOpenMemHandle_f(CUdeviceptr *pdptr, CUipcMemHandle handle, unsigned int flags);
|
|
125
|
+
CUresult cuIpcCloseMemHandle_f(CUdeviceptr dptr);
|
|
126
|
+
|
|
127
|
+
bool init_cuda_driver();
|
|
128
|
+
bool is_cuda_driver_initialized();
|
|
129
|
+
|
|
130
|
+
bool check_cuda_result(cudaError_t code, const char* func, const char* file, int line);
|
|
131
|
+
|
|
132
|
+
inline bool check_cuda_result(uint64_t code, const char* func, const char* file, int line)
|
|
133
|
+
{
|
|
134
|
+
return check_cuda_result(static_cast<cudaError_t>(code), func, file, line);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
bool check_cu_result(CUresult result, const char* func, const char* file, int line);
|
|
138
|
+
|
|
139
|
+
inline uint64_t get_capture_id(CUstream stream)
|
|
140
|
+
{
|
|
141
|
+
CUstreamCaptureStatus status;
|
|
142
|
+
uint64_t id = 0;
|
|
143
|
+
check_cu(cuStreamGetCaptureInfo_f(stream, &status, &id, NULL, NULL, NULL));
|
|
144
|
+
return id;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
inline CUgraph get_capture_graph(CUstream stream)
|
|
148
|
+
{
|
|
149
|
+
CUstreamCaptureStatus status;
|
|
150
|
+
CUgraph graph = NULL;
|
|
151
|
+
check_cu(cuStreamGetCaptureInfo_f(stream, &status, NULL, &graph, NULL, NULL));
|
|
152
|
+
return graph;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
bool get_capture_dependencies(CUstream stream, std::vector<CUgraphNode>& dependencies_ret);
|
|
156
|
+
|
|
157
|
+
bool get_graph_leaf_nodes(cudaGraph_t graph, std::vector<cudaGraphNode_t>& leaf_nodes_ret);
|
|
158
|
+
|
|
159
|
+
inline CUcontext get_stream_context(CUstream stream)
|
|
160
|
+
{
|
|
161
|
+
CUcontext context;
|
|
162
|
+
if (check_cu(cuStreamGetCtx_f(stream, &context)))
|
|
163
|
+
return context;
|
|
164
|
+
else
|
|
165
|
+
return NULL;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
inline CUcontext get_stream_context(void* stream)
|
|
169
|
+
{
|
|
170
|
+
return get_stream_context(static_cast<CUstream>(stream));
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
//
|
|
175
|
+
// Scoped CUDA context guard
|
|
176
|
+
//
|
|
177
|
+
// Behaviour on entry
|
|
178
|
+
// - If the given `context` is NULL, do nothing.
|
|
179
|
+
// - If the given `context` is the same as the current context, do nothing.
|
|
180
|
+
// - If the given `context` is different from the current context, make the given context current.
|
|
181
|
+
//
|
|
182
|
+
// Behaviour on exit
|
|
183
|
+
// - If the current context did not change on entry, do nothing.
|
|
184
|
+
// - If the `restore` flag was true on entry, make the previous context current.
|
|
185
|
+
//
|
|
186
|
+
// Default exit behaviour policy
|
|
187
|
+
// - If the `restore` flag is omitted on entry, fall back on the global `always_restore` flag.
|
|
188
|
+
// - This allows us to easily change the default behaviour of the guards.
|
|
189
|
+
//
|
|
190
|
+
class ContextGuard
|
|
191
|
+
{
|
|
192
|
+
public:
|
|
193
|
+
// default policy for restoring contexts
|
|
194
|
+
static bool always_restore;
|
|
195
|
+
|
|
196
|
+
explicit ContextGuard(CUcontext context, bool restore=always_restore)
|
|
197
|
+
: need_restore(false)
|
|
198
|
+
{
|
|
199
|
+
if (context)
|
|
200
|
+
{
|
|
201
|
+
if (check_cu(cuCtxGetCurrent_f(&prev_context)) && context != prev_context)
|
|
202
|
+
need_restore = check_cu(cuCtxSetCurrent_f(context)) && restore;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
explicit ContextGuard(void* context, bool restore=always_restore)
|
|
207
|
+
: ContextGuard(static_cast<CUcontext>(context), restore)
|
|
208
|
+
{
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
~ContextGuard()
|
|
212
|
+
{
|
|
213
|
+
if (need_restore)
|
|
214
|
+
check_cu(cuCtxSetCurrent_f(prev_context));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
private:
|
|
218
|
+
CUcontext prev_context;
|
|
219
|
+
bool need_restore;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
// CUDA timing range used during event-based timing
|
|
224
|
+
struct CudaTimingRange
|
|
225
|
+
{
|
|
226
|
+
void* context;
|
|
227
|
+
const char* name;
|
|
228
|
+
int flag;
|
|
229
|
+
CUevent start;
|
|
230
|
+
CUevent end;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// Timing result used to pass timings to Python
|
|
234
|
+
struct timing_result_t
|
|
235
|
+
{
|
|
236
|
+
void* context;
|
|
237
|
+
const char* name;
|
|
238
|
+
int flag;
|
|
239
|
+
float elapsed;
|
|
240
|
+
};
|
|
241
|
+
|
|
242
|
+
struct CudaTimingState
|
|
243
|
+
{
|
|
244
|
+
int flags;
|
|
245
|
+
std::vector<CudaTimingRange> ranges;
|
|
246
|
+
CudaTimingState* parent;
|
|
247
|
+
|
|
248
|
+
CudaTimingState(int flags, CudaTimingState* parent)
|
|
249
|
+
: flags(flags), parent(parent)
|
|
250
|
+
{
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
// timing flags
|
|
255
|
+
constexpr int WP_TIMING_KERNEL = 1; // Warp kernel
|
|
256
|
+
constexpr int WP_TIMING_KERNEL_BUILTIN = 2; // internal kernel
|
|
257
|
+
constexpr int WP_TIMING_MEMCPY = 4; // memcpy operation
|
|
258
|
+
constexpr int WP_TIMING_MEMSET = 8; // memset operation
|
|
259
|
+
constexpr int WP_TIMING_GRAPH = 16; // graph launch
|
|
260
|
+
|
|
261
|
+
#define begin_cuda_range(_flag, _stream, _context, _name) \
|
|
262
|
+
CudaTimingRange _timing_range; \
|
|
263
|
+
bool _timing_enabled; \
|
|
264
|
+
if ((g_cuda_timing_state->flags & _flag) && !wp_cuda_stream_is_capturing(_stream)) { \
|
|
265
|
+
ContextGuard guard(_context, true); \
|
|
266
|
+
_timing_enabled = true; \
|
|
267
|
+
_timing_range.context = _context ? _context : get_current_context(); \
|
|
268
|
+
_timing_range.name = _name; \
|
|
269
|
+
_timing_range.flag = _flag; \
|
|
270
|
+
check_cu(cuEventCreate_f(&_timing_range.start, CU_EVENT_DEFAULT)); \
|
|
271
|
+
check_cu(cuEventCreate_f(&_timing_range.end, CU_EVENT_DEFAULT)); \
|
|
272
|
+
check_cu(cuEventRecord_f(_timing_range.start, static_cast<CUstream>(_stream))); \
|
|
273
|
+
} else { \
|
|
274
|
+
_timing_enabled = false; \
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
#define end_cuda_range(_flag, _stream) \
|
|
278
|
+
if (_timing_enabled) { \
|
|
279
|
+
check_cu(cuEventRecord_f(_timing_range.end, static_cast<CUstream>(_stream))); \
|
|
280
|
+
g_cuda_timing_state->ranges.push_back(_timing_range); \
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
extern CudaTimingState* g_cuda_timing_state;
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
#else
|
|
287
|
+
|
|
288
|
+
typedef int CUdevice;
|
|
289
|
+
typedef struct CUctx_st* CUcontext;
|
|
290
|
+
typedef struct CUstream_st* CUstream;
|
|
291
|
+
|
|
292
|
+
class ContextGuard
|
|
293
|
+
{
|
|
294
|
+
public:
|
|
295
|
+
explicit ContextGuard(CUcontext context, bool restore=false)
|
|
296
|
+
{
|
|
297
|
+
(void)context;
|
|
298
|
+
(void)restore;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
explicit ContextGuard(void* context, bool restore=false)
|
|
302
|
+
{
|
|
303
|
+
(void)context;
|
|
304
|
+
(void)restore;
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
#endif // WP_ENABLE_CUDA
|
|
309
|
+
|
|
310
|
+
// Pass this value to device functions as the `context` parameter to bypass unnecessary context management.
|
|
311
|
+
// This works in conjunction with ContextGuards, which do nothing if the given context is NULL.
|
|
312
|
+
// Using this variable instead of passing NULL directly aids readability and makes the intent clear.
|
|
313
|
+
constexpr void* WP_CURRENT_CONTEXT = NULL;
|
warp/native/error.cpp
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include <stdarg.h>
|
|
19
|
+
#include <stdio.h>
|
|
20
|
+
#include <string.h>
|
|
21
|
+
|
|
22
|
+
namespace wp
|
|
23
|
+
{
|
|
24
|
+
static char g_error_buffer[4096] = "";
|
|
25
|
+
static bool g_error_output_enabled = true;
|
|
26
|
+
static FILE* g_error_stream = stderr;
|
|
27
|
+
|
|
28
|
+
const char* get_error_string()
|
|
29
|
+
{
|
|
30
|
+
return g_error_buffer;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void set_error_string(const char* fmt, ...)
|
|
34
|
+
{
|
|
35
|
+
va_list args;
|
|
36
|
+
va_start(args, fmt);
|
|
37
|
+
vsnprintf(g_error_buffer, sizeof(g_error_buffer), fmt, args);
|
|
38
|
+
if (g_error_output_enabled)
|
|
39
|
+
{
|
|
40
|
+
// note: we deliberately avoid vfprintf() due to problems with runtime glibc mismatch
|
|
41
|
+
fputs(g_error_buffer, g_error_stream);
|
|
42
|
+
fputc('\n', g_error_stream);
|
|
43
|
+
fflush(g_error_stream);
|
|
44
|
+
}
|
|
45
|
+
va_end(args);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void append_error_string(const char* fmt, ...)
|
|
49
|
+
{
|
|
50
|
+
size_t offset = strlen(g_error_buffer);
|
|
51
|
+
if (offset + 2 > sizeof(g_error_buffer))
|
|
52
|
+
return;
|
|
53
|
+
g_error_buffer[offset++] = '\n';
|
|
54
|
+
va_list args;
|
|
55
|
+
va_start(args, fmt);
|
|
56
|
+
vsnprintf(g_error_buffer + offset, sizeof(g_error_buffer) - offset, fmt, args);
|
|
57
|
+
if (g_error_output_enabled)
|
|
58
|
+
{
|
|
59
|
+
// note: we deliberately avoid vfprintf() due to problems with runtime glibc mismatch
|
|
60
|
+
fputs(g_error_buffer + offset, g_error_stream);
|
|
61
|
+
fputc('\n', g_error_stream);
|
|
62
|
+
fflush(g_error_stream);
|
|
63
|
+
}
|
|
64
|
+
va_end(args);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
void set_error_output_enabled(bool enable)
|
|
68
|
+
{
|
|
69
|
+
g_error_output_enabled = enable;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
bool is_error_output_enabled()
|
|
73
|
+
{
|
|
74
|
+
return g_error_output_enabled;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
} // end of namespace wp
|
warp/native/error.h
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
namespace wp
|
|
21
|
+
{
|
|
22
|
+
// functions related to error reporting
|
|
23
|
+
|
|
24
|
+
// get error string from Python
|
|
25
|
+
const char* get_error_string();
|
|
26
|
+
|
|
27
|
+
// set error message for Python
|
|
28
|
+
// these functions also print the error message if error output is enabled
|
|
29
|
+
void set_error_string(const char* fmt, ...);
|
|
30
|
+
void append_error_string(const char* fmt, ...);
|
|
31
|
+
|
|
32
|
+
// allow disabling printing errors, which is handy during tests that expect failure
|
|
33
|
+
void set_error_output_enabled(bool enable);
|
|
34
|
+
bool is_error_output_enabled();
|
|
35
|
+
|
|
36
|
+
}
|