warp-lang 1.8.1__py3-none-manylinux_2_34_aarch64.whl → 1.9.1__py3-none-manylinux_2_34_aarch64.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 +282 -103
- warp/__init__.pyi +1904 -114
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +93 -30
- warp/build_dll.py +331 -101
- warp/builtins.py +1244 -160
- warp/codegen.py +317 -206
- warp/config.py +1 -1
- warp/context.py +1465 -789
- warp/examples/core/example_marching_cubes.py +1 -0
- warp/examples/core/example_render_opengl.py +100 -3
- warp/examples/fem/example_apic_fluid.py +98 -52
- warp/examples/fem/example_convection_diffusion_dg.py +25 -4
- warp/examples/fem/example_diffusion_mgpu.py +8 -3
- warp/examples/fem/utils.py +68 -22
- warp/examples/interop/example_jax_kernel.py +2 -1
- warp/fabric.py +1 -1
- warp/fem/cache.py +27 -19
- warp/fem/domain.py +2 -2
- warp/fem/field/nodal_field.py +2 -2
- warp/fem/field/virtual.py +264 -166
- warp/fem/geometry/geometry.py +5 -5
- warp/fem/integrate.py +129 -51
- warp/fem/space/restriction.py +4 -0
- warp/fem/space/shape/tet_shape_function.py +3 -10
- warp/jax_experimental/custom_call.py +25 -2
- warp/jax_experimental/ffi.py +22 -1
- warp/jax_experimental/xla_ffi.py +16 -7
- warp/marching_cubes.py +708 -0
- warp/native/array.h +99 -4
- warp/native/builtin.h +86 -9
- warp/native/bvh.cpp +64 -28
- warp/native/bvh.cu +58 -58
- warp/native/bvh.h +2 -2
- warp/native/clang/clang.cpp +7 -7
- warp/native/coloring.cpp +8 -2
- warp/native/crt.cpp +2 -2
- warp/native/crt.h +3 -5
- warp/native/cuda_util.cpp +41 -10
- warp/native/cuda_util.h +10 -4
- warp/native/exports.h +1842 -1908
- warp/native/fabric.h +2 -1
- warp/native/hashgrid.cpp +37 -37
- warp/native/hashgrid.cu +2 -2
- warp/native/initializer_array.h +1 -1
- warp/native/intersect.h +2 -2
- warp/native/mat.h +1910 -116
- warp/native/mathdx.cpp +43 -43
- warp/native/mesh.cpp +24 -24
- warp/native/mesh.cu +26 -26
- warp/native/mesh.h +4 -2
- warp/native/nanovdb/GridHandle.h +179 -12
- warp/native/nanovdb/HostBuffer.h +8 -7
- warp/native/nanovdb/NanoVDB.h +517 -895
- warp/native/nanovdb/NodeManager.h +323 -0
- warp/native/nanovdb/PNanoVDB.h +2 -2
- warp/native/quat.h +331 -14
- warp/native/range.h +7 -1
- warp/native/reduce.cpp +10 -10
- warp/native/reduce.cu +13 -14
- warp/native/runlength_encode.cpp +2 -2
- warp/native/runlength_encode.cu +5 -5
- warp/native/scan.cpp +3 -3
- warp/native/scan.cu +4 -4
- warp/native/sort.cpp +10 -10
- warp/native/sort.cu +40 -31
- warp/native/sort.h +2 -0
- warp/native/sparse.cpp +8 -8
- warp/native/sparse.cu +13 -13
- warp/native/spatial.h +366 -17
- warp/native/temp_buffer.h +2 -2
- warp/native/tile.h +471 -82
- warp/native/vec.h +328 -14
- warp/native/volume.cpp +54 -54
- warp/native/volume.cu +1 -1
- warp/native/volume.h +2 -1
- warp/native/volume_builder.cu +30 -37
- warp/native/warp.cpp +150 -149
- warp/native/warp.cu +377 -216
- warp/native/warp.h +227 -226
- warp/optim/linear.py +736 -271
- warp/render/imgui_manager.py +289 -0
- warp/render/render_opengl.py +99 -18
- warp/render/render_usd.py +1 -0
- warp/sim/graph_coloring.py +2 -2
- warp/sparse.py +558 -175
- warp/tests/aux_test_module_aot.py +7 -0
- warp/tests/cuda/test_async.py +3 -3
- warp/tests/cuda/test_conditional_captures.py +101 -0
- warp/tests/geometry/test_hash_grid.py +38 -0
- warp/tests/geometry/test_marching_cubes.py +233 -12
- warp/tests/interop/test_jax.py +608 -28
- warp/tests/sim/test_coloring.py +6 -6
- warp/tests/test_array.py +58 -5
- warp/tests/test_codegen.py +4 -3
- warp/tests/test_context.py +8 -15
- warp/tests/test_enum.py +136 -0
- warp/tests/test_examples.py +2 -2
- warp/tests/test_fem.py +49 -6
- warp/tests/test_fixedarray.py +229 -0
- warp/tests/test_func.py +18 -15
- warp/tests/test_future_annotations.py +7 -5
- warp/tests/test_linear_solvers.py +30 -0
- warp/tests/test_map.py +15 -1
- warp/tests/test_mat.py +1518 -378
- warp/tests/test_mat_assign_copy.py +178 -0
- warp/tests/test_mat_constructors.py +574 -0
- warp/tests/test_module_aot.py +287 -0
- warp/tests/test_print.py +69 -0
- warp/tests/test_quat.py +140 -34
- warp/tests/test_quat_assign_copy.py +145 -0
- warp/tests/test_reload.py +2 -1
- warp/tests/test_sparse.py +71 -0
- warp/tests/test_spatial.py +140 -34
- warp/tests/test_spatial_assign_copy.py +160 -0
- warp/tests/test_struct.py +43 -3
- warp/tests/test_tuple.py +96 -0
- warp/tests/test_types.py +61 -20
- warp/tests/test_vec.py +179 -34
- warp/tests/test_vec_assign_copy.py +143 -0
- warp/tests/tile/test_tile.py +245 -18
- warp/tests/tile/test_tile_cholesky.py +605 -0
- warp/tests/tile/test_tile_load.py +169 -0
- warp/tests/tile/test_tile_mathdx.py +2 -558
- warp/tests/tile/test_tile_matmul.py +1 -1
- warp/tests/tile/test_tile_mlp.py +1 -1
- warp/tests/tile/test_tile_shared_memory.py +5 -5
- warp/tests/unittest_suites.py +6 -0
- warp/tests/walkthrough_debug.py +1 -1
- warp/thirdparty/unittest_parallel.py +108 -9
- warp/types.py +571 -267
- warp/utils.py +68 -86
- {warp_lang-1.8.1.dist-info → warp_lang-1.9.1.dist-info}/METADATA +29 -69
- {warp_lang-1.8.1.dist-info → warp_lang-1.9.1.dist-info}/RECORD +138 -128
- warp/native/marching.cpp +0 -19
- warp/native/marching.cu +0 -514
- warp/native/marching.h +0 -19
- {warp_lang-1.8.1.dist-info → warp_lang-1.9.1.dist-info}/WHEEL +0 -0
- {warp_lang-1.8.1.dist-info → warp_lang-1.9.1.dist-info}/licenses/LICENSE.md +0 -0
- {warp_lang-1.8.1.dist-info → warp_lang-1.9.1.dist-info}/top_level.txt +0 -0
|
@@ -28,6 +28,7 @@ import sys
|
|
|
28
28
|
import tempfile
|
|
29
29
|
import time
|
|
30
30
|
import unittest
|
|
31
|
+
from concurrent.futures.process import BrokenProcessPool
|
|
31
32
|
from contextlib import contextmanager
|
|
32
33
|
from io import StringIO
|
|
33
34
|
|
|
@@ -160,6 +161,7 @@ def main(argv=None):
|
|
|
160
161
|
group_warp.add_argument(
|
|
161
162
|
"--no-shared-cache", action="store_true", help="Use a separate kernel cache per test process."
|
|
162
163
|
)
|
|
164
|
+
group_warp.add_argument("--warp-debug", action="store_true", help="Set warp.config.mode to 'debug'")
|
|
163
165
|
args = parser.parse_args(args=argv)
|
|
164
166
|
|
|
165
167
|
if args.coverage_branch:
|
|
@@ -242,15 +244,76 @@ def main(argv=None):
|
|
|
242
244
|
test_manager = ParallelTestManager(manager, args, temp_dir)
|
|
243
245
|
results = pool.map(test_manager.run_tests, test_suites)
|
|
244
246
|
else:
|
|
245
|
-
# NVIDIA Modification added concurrent.futures
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
247
|
+
# NVIDIA Modification: added concurrent.futures with crash handling and per-suite isolated fallback
|
|
248
|
+
results = []
|
|
249
|
+
parallel_failed = False
|
|
250
|
+
|
|
251
|
+
try:
|
|
252
|
+
with concurrent.futures.ProcessPoolExecutor(
|
|
253
|
+
max_workers=process_count,
|
|
254
|
+
mp_context=multiprocessing.get_context(method="spawn"),
|
|
255
|
+
initializer=initialize_test_process,
|
|
256
|
+
initargs=(manager.Lock(), shared_index, args, temp_dir),
|
|
257
|
+
) as executor:
|
|
258
|
+
test_manager = ParallelTestManager(manager, args, temp_dir)
|
|
259
|
+
# Try parallel execution first using the original map approach
|
|
260
|
+
results = list(executor.map(test_manager.run_tests, test_suites, timeout=2400))
|
|
261
|
+
|
|
262
|
+
except BrokenProcessPool:
|
|
263
|
+
# Process pool is broken - switch to isolated single-process fallback
|
|
264
|
+
print(
|
|
265
|
+
"Warning: Process pool broken during parallel execution. Switching to isolated single-process fallback.",
|
|
266
|
+
file=sys.stderr,
|
|
267
|
+
)
|
|
268
|
+
parallel_failed = True
|
|
269
|
+
except Exception as e:
|
|
270
|
+
# Handle other pool-level exceptions
|
|
271
|
+
print(
|
|
272
|
+
f"Warning: Process pool error: {e}. Switching to isolated single-process fallback.",
|
|
273
|
+
file=sys.stderr,
|
|
274
|
+
)
|
|
275
|
+
parallel_failed = True
|
|
276
|
+
|
|
277
|
+
# Fallback to isolated single-process execution if parallel failed
|
|
278
|
+
if parallel_failed:
|
|
279
|
+
print("Running all tests in isolated single-process mode...", file=sys.stderr)
|
|
280
|
+
# Run all test suites in isolated single-process pools
|
|
281
|
+
results = []
|
|
282
|
+
for i, suite in enumerate(test_suites):
|
|
283
|
+
try:
|
|
284
|
+
# Create a new single-process pool for each test suite
|
|
285
|
+
with concurrent.futures.ProcessPoolExecutor(
|
|
286
|
+
max_workers=1,
|
|
287
|
+
mp_context=multiprocessing.get_context(method="spawn"),
|
|
288
|
+
initializer=initialize_test_process,
|
|
289
|
+
initargs=(manager.Lock(), shared_index, args, temp_dir),
|
|
290
|
+
) as executor:
|
|
291
|
+
test_manager = ParallelTestManager(manager, args, temp_dir)
|
|
292
|
+
future = executor.submit(test_manager.run_tests, suite)
|
|
293
|
+
try:
|
|
294
|
+
result = future.result(timeout=2400)
|
|
295
|
+
results.append(result)
|
|
296
|
+
except BrokenProcessPool:
|
|
297
|
+
print(
|
|
298
|
+
f"Warning: Process crashed or was terminated unexpectedly in isolated execution for test suite {i + 1}/{len(test_suites)}. Marking tests as crashed.",
|
|
299
|
+
file=sys.stderr,
|
|
300
|
+
)
|
|
301
|
+
crash_result = create_crash_result(suite)
|
|
302
|
+
results.append(crash_result)
|
|
303
|
+
except Exception as e:
|
|
304
|
+
print(
|
|
305
|
+
f"Warning: Error in isolated test suite {i + 1}/{len(test_suites)}: {e}. Marking tests as crashed.",
|
|
306
|
+
file=sys.stderr,
|
|
307
|
+
)
|
|
308
|
+
error_result = create_crash_result(suite)
|
|
309
|
+
results.append(error_result)
|
|
310
|
+
except Exception as e:
|
|
311
|
+
print(
|
|
312
|
+
f"Warning: Failed to create isolated process for test suite {i + 1}/{len(test_suites)}: {e}. Marking tests as crashed.",
|
|
313
|
+
file=sys.stderr,
|
|
314
|
+
)
|
|
315
|
+
error_result = create_crash_result(suite)
|
|
316
|
+
results.append(error_result)
|
|
254
317
|
else:
|
|
255
318
|
# This entire path is an NVIDIA Modification
|
|
256
319
|
|
|
@@ -259,6 +322,9 @@ def main(argv=None):
|
|
|
259
322
|
if args.verbose > 1:
|
|
260
323
|
print(file=sys.stderr)
|
|
261
324
|
|
|
325
|
+
if args.warp_debug:
|
|
326
|
+
wp.config.mode = "debug"
|
|
327
|
+
|
|
262
328
|
# Run the tests in serial
|
|
263
329
|
start_time = time.perf_counter()
|
|
264
330
|
|
|
@@ -423,6 +489,36 @@ def _iter_test_cases(test_suite):
|
|
|
423
489
|
yield from _iter_test_cases(suite)
|
|
424
490
|
|
|
425
491
|
|
|
492
|
+
def create_crash_result(test_suite):
|
|
493
|
+
"""Create a result indicating the process crashed or was terminated unexpectedly while running this test suite.
|
|
494
|
+
|
|
495
|
+
This entire function is an NVIDIA modification.
|
|
496
|
+
"""
|
|
497
|
+
test_count = test_suite.countTestCases()
|
|
498
|
+
crash_errors = []
|
|
499
|
+
|
|
500
|
+
# Create crash error entries for each test in the suite
|
|
501
|
+
# Note: We don't know which specific test caused the crash, just that the process crashed
|
|
502
|
+
for test in _iter_test_cases(test_suite):
|
|
503
|
+
error_msg = (
|
|
504
|
+
"Process crashed or was terminated unexpectedly while running this test suite "
|
|
505
|
+
f"(unknown which test caused the crash): {test}"
|
|
506
|
+
)
|
|
507
|
+
crash_errors.append(
|
|
508
|
+
"\n".join(
|
|
509
|
+
[
|
|
510
|
+
unittest.TextTestResult.separator1,
|
|
511
|
+
str(test),
|
|
512
|
+
unittest.TextTestResult.separator2,
|
|
513
|
+
error_msg,
|
|
514
|
+
]
|
|
515
|
+
)
|
|
516
|
+
)
|
|
517
|
+
|
|
518
|
+
# Return the same format as run_tests: (test_count, errors, failures, skipped, expected_failures, unexpected_successes, test_records)
|
|
519
|
+
return (test_count, crash_errors, [], 0, 0, 0, [])
|
|
520
|
+
|
|
521
|
+
|
|
426
522
|
class ParallelTestManager:
|
|
427
523
|
def __init__(self, manager, args, temp_dir):
|
|
428
524
|
self.args = args
|
|
@@ -547,6 +643,9 @@ def initialize_test_process(lock, shared_index, args, temp_dir):
|
|
|
547
643
|
with _coverage(args, temp_dir):
|
|
548
644
|
import warp as wp
|
|
549
645
|
|
|
646
|
+
if args.warp_debug:
|
|
647
|
+
wp.config.mode = "debug"
|
|
648
|
+
|
|
550
649
|
if args.no_shared_cache:
|
|
551
650
|
from warp.thirdparty import appdirs
|
|
552
651
|
|