warp-lang 0.11.0__py3-none-manylinux2014_x86_64.whl → 1.0.0__py3-none-manylinux2014_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of warp-lang might be problematic. Click here for more details.

Files changed (170) hide show
  1. warp/__init__.py +8 -0
  2. warp/bin/warp-clang.so +0 -0
  3. warp/bin/warp.so +0 -0
  4. warp/build.py +7 -6
  5. warp/build_dll.py +70 -79
  6. warp/builtins.py +10 -6
  7. warp/codegen.py +51 -19
  8. warp/config.py +7 -8
  9. warp/constants.py +3 -0
  10. warp/context.py +948 -245
  11. warp/dlpack.py +198 -113
  12. warp/examples/assets/bunny.usd +0 -0
  13. warp/examples/assets/cartpole.urdf +110 -0
  14. warp/examples/assets/crazyflie.usd +0 -0
  15. warp/examples/assets/cube.usda +42 -0
  16. warp/examples/assets/nv_ant.xml +92 -0
  17. warp/examples/assets/nv_humanoid.xml +183 -0
  18. warp/examples/assets/quadruped.urdf +268 -0
  19. warp/examples/assets/rocks.nvdb +0 -0
  20. warp/examples/assets/rocks.usd +0 -0
  21. warp/examples/assets/sphere.usda +56 -0
  22. warp/examples/assets/torus.usda +105 -0
  23. warp/examples/benchmarks/benchmark_api.py +383 -0
  24. warp/examples/benchmarks/benchmark_cloth.py +279 -0
  25. warp/examples/benchmarks/benchmark_cloth_cupy.py +88 -0
  26. warp/examples/benchmarks/benchmark_cloth_jax.py +100 -0
  27. warp/examples/benchmarks/benchmark_cloth_numba.py +142 -0
  28. warp/examples/benchmarks/benchmark_cloth_numpy.py +77 -0
  29. warp/examples/benchmarks/benchmark_cloth_pytorch.py +86 -0
  30. warp/examples/benchmarks/benchmark_cloth_taichi.py +112 -0
  31. warp/examples/benchmarks/benchmark_cloth_warp.py +146 -0
  32. warp/examples/benchmarks/benchmark_launches.py +295 -0
  33. warp/examples/core/example_dem.py +221 -0
  34. warp/examples/core/example_fluid.py +267 -0
  35. warp/examples/core/example_graph_capture.py +129 -0
  36. warp/examples/core/example_marching_cubes.py +177 -0
  37. warp/examples/core/example_mesh.py +154 -0
  38. warp/examples/core/example_mesh_intersect.py +193 -0
  39. warp/examples/core/example_nvdb.py +169 -0
  40. warp/examples/core/example_raycast.py +89 -0
  41. warp/examples/core/example_raymarch.py +178 -0
  42. warp/examples/core/example_render_opengl.py +141 -0
  43. warp/examples/core/example_sph.py +389 -0
  44. warp/examples/core/example_torch.py +181 -0
  45. warp/examples/core/example_wave.py +249 -0
  46. warp/examples/fem/bsr_utils.py +380 -0
  47. warp/examples/fem/example_apic_fluid.py +391 -0
  48. warp/examples/fem/example_convection_diffusion.py +168 -0
  49. warp/examples/fem/example_convection_diffusion_dg.py +209 -0
  50. warp/examples/fem/example_convection_diffusion_dg0.py +194 -0
  51. warp/examples/fem/example_deformed_geometry.py +159 -0
  52. warp/examples/fem/example_diffusion.py +173 -0
  53. warp/examples/fem/example_diffusion_3d.py +152 -0
  54. warp/examples/fem/example_diffusion_mgpu.py +214 -0
  55. warp/examples/fem/example_mixed_elasticity.py +222 -0
  56. warp/examples/fem/example_navier_stokes.py +243 -0
  57. warp/examples/fem/example_stokes.py +192 -0
  58. warp/examples/fem/example_stokes_transfer.py +249 -0
  59. warp/examples/fem/mesh_utils.py +109 -0
  60. warp/examples/fem/plot_utils.py +287 -0
  61. warp/examples/optim/example_bounce.py +248 -0
  62. warp/examples/optim/example_cloth_throw.py +210 -0
  63. warp/examples/optim/example_diffray.py +535 -0
  64. warp/examples/optim/example_drone.py +850 -0
  65. warp/examples/optim/example_inverse_kinematics.py +169 -0
  66. warp/examples/optim/example_inverse_kinematics_torch.py +170 -0
  67. warp/examples/optim/example_spring_cage.py +234 -0
  68. warp/examples/optim/example_trajectory.py +201 -0
  69. warp/examples/sim/example_cartpole.py +128 -0
  70. warp/examples/sim/example_cloth.py +184 -0
  71. warp/examples/sim/example_granular.py +113 -0
  72. warp/examples/sim/example_granular_collision_sdf.py +185 -0
  73. warp/examples/sim/example_jacobian_ik.py +213 -0
  74. warp/examples/sim/example_particle_chain.py +106 -0
  75. warp/examples/sim/example_quadruped.py +179 -0
  76. warp/examples/sim/example_rigid_chain.py +191 -0
  77. warp/examples/sim/example_rigid_contact.py +176 -0
  78. warp/examples/sim/example_rigid_force.py +126 -0
  79. warp/examples/sim/example_rigid_gyroscopic.py +97 -0
  80. warp/examples/sim/example_rigid_soft_contact.py +124 -0
  81. warp/examples/sim/example_soft_body.py +178 -0
  82. warp/fabric.py +29 -20
  83. warp/fem/cache.py +0 -1
  84. warp/fem/dirichlet.py +0 -2
  85. warp/fem/integrate.py +0 -1
  86. warp/jax.py +45 -0
  87. warp/jax_experimental.py +339 -0
  88. warp/native/builtin.h +12 -0
  89. warp/native/bvh.cu +18 -18
  90. warp/native/clang/clang.cpp +8 -3
  91. warp/native/cuda_util.cpp +94 -5
  92. warp/native/cuda_util.h +35 -6
  93. warp/native/cutlass_gemm.cpp +1 -1
  94. warp/native/cutlass_gemm.cu +4 -1
  95. warp/native/error.cpp +66 -0
  96. warp/native/error.h +27 -0
  97. warp/native/mesh.cu +2 -2
  98. warp/native/reduce.cu +4 -4
  99. warp/native/runlength_encode.cu +2 -2
  100. warp/native/scan.cu +2 -2
  101. warp/native/sparse.cu +0 -1
  102. warp/native/temp_buffer.h +2 -2
  103. warp/native/warp.cpp +95 -60
  104. warp/native/warp.cu +1053 -218
  105. warp/native/warp.h +49 -32
  106. warp/optim/linear.py +33 -16
  107. warp/render/render_opengl.py +202 -101
  108. warp/render/render_usd.py +82 -40
  109. warp/sim/__init__.py +13 -4
  110. warp/sim/articulation.py +4 -5
  111. warp/sim/collide.py +320 -175
  112. warp/sim/import_mjcf.py +25 -30
  113. warp/sim/import_urdf.py +94 -63
  114. warp/sim/import_usd.py +51 -36
  115. warp/sim/inertia.py +3 -2
  116. warp/sim/integrator.py +233 -0
  117. warp/sim/integrator_euler.py +447 -469
  118. warp/sim/integrator_featherstone.py +1991 -0
  119. warp/sim/integrator_xpbd.py +1420 -640
  120. warp/sim/model.py +765 -487
  121. warp/sim/particles.py +2 -1
  122. warp/sim/render.py +35 -13
  123. warp/sim/utils.py +222 -11
  124. warp/stubs.py +8 -0
  125. warp/tape.py +16 -1
  126. warp/tests/aux_test_grad_customs.py +23 -0
  127. warp/tests/test_array.py +190 -1
  128. warp/tests/test_async.py +656 -0
  129. warp/tests/test_bool.py +50 -0
  130. warp/tests/test_dlpack.py +164 -11
  131. warp/tests/test_examples.py +166 -74
  132. warp/tests/test_fem.py +8 -1
  133. warp/tests/test_generics.py +15 -5
  134. warp/tests/test_grad.py +1 -1
  135. warp/tests/test_grad_customs.py +172 -12
  136. warp/tests/test_jax.py +254 -0
  137. warp/tests/test_large.py +29 -6
  138. warp/tests/test_launch.py +25 -0
  139. warp/tests/test_linear_solvers.py +20 -3
  140. warp/tests/test_matmul.py +61 -16
  141. warp/tests/test_matmul_lite.py +13 -13
  142. warp/tests/test_mempool.py +186 -0
  143. warp/tests/test_multigpu.py +3 -0
  144. warp/tests/test_options.py +16 -2
  145. warp/tests/test_peer.py +137 -0
  146. warp/tests/test_print.py +3 -1
  147. warp/tests/test_quat.py +23 -0
  148. warp/tests/test_sim_kinematics.py +97 -0
  149. warp/tests/test_snippet.py +126 -3
  150. warp/tests/test_streams.py +108 -79
  151. warp/tests/test_torch.py +16 -8
  152. warp/tests/test_utils.py +32 -27
  153. warp/tests/test_verify_fp.py +65 -0
  154. warp/tests/test_volume.py +1 -1
  155. warp/tests/unittest_serial.py +2 -0
  156. warp/tests/unittest_suites.py +12 -0
  157. warp/tests/unittest_utils.py +14 -7
  158. warp/thirdparty/unittest_parallel.py +15 -3
  159. warp/torch.py +10 -8
  160. warp/types.py +363 -246
  161. warp/utils.py +143 -19
  162. warp_lang-1.0.0.dist-info/LICENSE.md +126 -0
  163. warp_lang-1.0.0.dist-info/METADATA +394 -0
  164. {warp_lang-0.11.0.dist-info → warp_lang-1.0.0.dist-info}/RECORD +167 -86
  165. warp/sim/optimizer.py +0 -138
  166. warp_lang-0.11.0.dist-info/LICENSE.md +0 -36
  167. warp_lang-0.11.0.dist-info/METADATA +0 -238
  168. /warp/tests/{walkthough_debug.py → walkthrough_debug.py} +0 -0
  169. {warp_lang-0.11.0.dist-info → warp_lang-1.0.0.dist-info}/WHEEL +0 -0
  170. {warp_lang-0.11.0.dist-info → warp_lang-1.0.0.dist-info}/top_level.txt +0 -0
warp/utils.py CHANGED
@@ -6,8 +6,9 @@
6
6
  # license agreement from NVIDIA CORPORATION is strictly prohibited.
7
7
 
8
8
  import cProfile
9
+ import os
9
10
  import sys
10
- import timeit
11
+ import time
11
12
  import warnings
12
13
  from typing import Any
13
14
 
@@ -22,7 +23,29 @@ warnings_seen = set()
22
23
 
23
24
  def warp_showwarning(message, category, filename, lineno, file=None, line=None):
24
25
  """Version of warnings.showwarning that always prints to sys.stdout."""
25
- sys.stdout.write(warnings.formatwarning(message, category, filename, lineno, line=line))
26
+
27
+ if warp.config.verbose_warnings:
28
+ s = f"Warp {category.__name__}: {message} ({filename}:{lineno})\n"
29
+
30
+ if line is None:
31
+ try:
32
+ import linecache
33
+ line = linecache.getline(filename, lineno)
34
+ except Exception:
35
+ # When a warning is logged during Python shutdown, linecache
36
+ # and the import machinery don't work anymore
37
+ line = None
38
+ linecache = None
39
+ else:
40
+ line = line
41
+ if line:
42
+ line = line.strip()
43
+ s += " %s\n" % line
44
+ else:
45
+ # simple warning
46
+ s = f"Warp {category.__name__}: {message}\n"
47
+
48
+ sys.stdout.write(s)
26
49
 
27
50
 
28
51
  def warn(message, category=None, stacklevel=1):
@@ -371,7 +394,6 @@ def array_cast(in_array, out_array, count=None):
371
394
  data=None,
372
395
  ptr=in_array.ptr,
373
396
  capacity=in_array.capacity,
374
- owner=False,
375
397
  device=in_array.device,
376
398
  dtype=in_array_scalar_type,
377
399
  shape=in_array.shape[0] * in_array_data_length,
@@ -381,7 +403,6 @@ def array_cast(in_array, out_array, count=None):
381
403
  data=None,
382
404
  ptr=out_array.ptr,
383
405
  capacity=out_array.capacity,
384
- owner=False,
385
406
  device=out_array.device,
386
407
  dtype=out_array_scalar_type,
387
408
  shape=out_array.shape[0] * out_array_data_length,
@@ -559,8 +580,10 @@ class ScopedDevice:
559
580
 
560
581
 
561
582
  class ScopedStream:
562
- def __init__(self, stream):
583
+ def __init__(self, stream, sync_enter=True, sync_exit=False):
563
584
  self.stream = stream
585
+ self.sync_enter = sync_enter
586
+ self.sync_exit = sync_exit
564
587
  if stream is not None:
565
588
  self.device = stream.device
566
589
  self.device_scope = ScopedDevice(self.device)
@@ -569,13 +592,13 @@ class ScopedStream:
569
592
  if self.stream is not None:
570
593
  self.device_scope.__enter__()
571
594
  self.saved_stream = self.device.stream
572
- self.device.stream = self.stream
595
+ self.device.set_stream(self.stream, self.sync_enter)
573
596
 
574
597
  return self.stream
575
598
 
576
599
  def __exit__(self, exc_type, exc_value, traceback):
577
600
  if self.stream is not None:
578
- self.device.stream = self.saved_stream
601
+ self.device.set_stream(self.saved_stream, self.sync_exit)
579
602
  self.device_scope.__exit__(exc_type, exc_value, traceback)
580
603
 
581
604
 
@@ -634,17 +657,18 @@ class ScopedTimer:
634
657
  import nvtx
635
658
 
636
659
  self.nvtx_range_id = nvtx.start_range(self.name, color=self.color)
637
- return
638
-
639
- self.start = timeit.default_timer()
640
- if self.print:
641
- ScopedTimer.indent += 1
660
+ return self
642
661
 
643
662
  if self.detailed:
644
663
  self.cp = cProfile.Profile()
645
664
  self.cp.clear()
646
665
  self.cp.enable()
647
666
 
667
+ if self.print:
668
+ ScopedTimer.indent += 1
669
+
670
+ self.start = time.perf_counter_ns()
671
+
648
672
  return self
649
673
 
650
674
  def __exit__(self, exc_type, exc_value, traceback):
@@ -658,23 +682,94 @@ class ScopedTimer:
658
682
  nvtx.end_range(self.nvtx_range_id)
659
683
  return
660
684
 
685
+ self.elapsed = (time.perf_counter_ns() - self.start) / 1000000.0
686
+
661
687
  if self.detailed:
662
688
  self.cp.disable()
663
689
  self.cp.print_stats(sort="tottime")
664
690
 
665
- self.elapsed = (timeit.default_timer() - self.start) * 1000.0
666
-
667
691
  if self.dict is not None:
668
692
  self.dict[self.name].append(self.elapsed)
669
693
 
670
- indent = ""
671
- for i in range(ScopedTimer.indent):
672
- indent += "\t"
673
-
674
694
  if self.print:
695
+ indent = ""
696
+ for i in range(ScopedTimer.indent):
697
+ indent += "\t"
698
+
675
699
  print("{}{} took {:.2f} ms".format(indent, self.name, self.elapsed))
676
700
 
677
- ScopedTimer.indent -= 1
701
+ ScopedTimer.indent -= 1
702
+
703
+
704
+ # Allow temporarily enabling/disabling mempool allocators
705
+ class ScopedMempool:
706
+ def __init__(self, device, enable: bool):
707
+ self.device = wp.get_device(device)
708
+ self.enable = enable
709
+
710
+ def __enter__(self):
711
+ self.saved_setting = wp.is_mempool_enabled(self.device)
712
+ wp.set_mempool_enabled(self.device, self.enable)
713
+
714
+ def __exit__(self, exc_type, exc_value, traceback):
715
+ wp.set_mempool_enabled(self.device, self.saved_setting)
716
+
717
+
718
+ # Allow temporarily enabling/disabling mempool access
719
+ class ScopedMempoolAccess:
720
+ def __init__(self, target_device, peer_device, enable: bool):
721
+ self.target_device = target_device
722
+ self.peer_device = peer_device
723
+ self.enable = enable
724
+
725
+ def __enter__(self):
726
+ self.saved_setting = wp.is_mempool_access_enabled(self.target_device, self.peer_device)
727
+ wp.set_mempool_access_enabled(self.target_device, self.peer_device, self.enable)
728
+
729
+ def __exit__(self, exc_type, exc_value, traceback):
730
+ wp.set_mempool_access_enabled(self.target_device, self.peer_device, self.saved_setting)
731
+
732
+
733
+ # Allow temporarily enabling/disabling peer access
734
+ class ScopedPeerAccess:
735
+ def __init__(self, target_device, peer_device, enable: bool):
736
+ self.target_device = target_device
737
+ self.peer_device = peer_device
738
+ self.enable = enable
739
+
740
+ def __enter__(self):
741
+ self.saved_setting = wp.is_peer_access_enabled(self.target_device, self.peer_device)
742
+ wp.set_peer_access_enabled(self.target_device, self.peer_device, self.enable)
743
+
744
+ def __exit__(self, exc_type, exc_value, traceback):
745
+ wp.set_peer_access_enabled(self.target_device, self.peer_device, self.saved_setting)
746
+
747
+
748
+ class ScopedCapture:
749
+ def __init__(self, device=None, stream=None, force_module_load=None, external=False):
750
+ self.device = device
751
+ self.stream = stream
752
+ self.force_module_load = force_module_load
753
+ self.external = external
754
+ self.active = False
755
+ self.graph = None
756
+
757
+ def __enter__(self):
758
+ try:
759
+ wp.capture_begin(
760
+ device=self.device, stream=self.stream, force_module_load=self.force_module_load, external=self.external
761
+ )
762
+ self.active = True
763
+ return self
764
+ except:
765
+ raise
766
+
767
+ def __exit__(self, exc_type, exc_value, traceback):
768
+ if self.active:
769
+ try:
770
+ self.graph = wp.capture_end(device=self.device, stream=self.stream)
771
+ finally:
772
+ self.active = False
678
773
 
679
774
 
680
775
  # helper kernels for adj_matmul
@@ -684,8 +779,37 @@ def add_kernel_2d(x: wp.array2d(dtype=Any), acc: wp.array2d(dtype=Any), beta: An
684
779
 
685
780
  x[i,j] = x[i,j] + beta * acc[i,j]
686
781
 
782
+
687
783
  @wp.kernel
688
784
  def add_kernel_3d(x: wp.array3d(dtype=Any), acc: wp.array3d(dtype=Any), beta: Any):
689
785
  i, j, k = wp.tid()
690
786
 
691
787
  x[i,j,k] = x[i,j,k] + beta * acc[i,j,k]
788
+
789
+
790
+ # explicit instantiations of generic kernels for adj_matmul
791
+ for T in [wp.float16, wp.float32, wp.float64]:
792
+ wp.overload(add_kernel_2d, [wp.array2d(dtype=T), wp.array2d(dtype=T), T])
793
+ wp.overload(add_kernel_3d, [wp.array3d(dtype=T), wp.array3d(dtype=T), T])
794
+
795
+
796
+ def check_iommu():
797
+ """Check if IOMMU is enabled on Linux, which can affect peer-to-peer transfers.
798
+
799
+ Returns:
800
+ A Boolean indicating whether IOMMU is configured properly for peer-to-peer transfers.
801
+ On Linux, this function attempts to determine if IOMMU is enabled and will return `False` if IOMMU is detected.
802
+ On other operating systems, it always return `True`.
803
+ """
804
+
805
+ if sys.platform == "linux":
806
+ # On modern Linux, there should be IOMMU-related entries in the /sys file system.
807
+ # This should be more reliable than checking kernel logs like dmesg.
808
+ if os.path.isdir("/sys/class/iommu") and os.listdir("/sys/class/iommu"):
809
+ return False
810
+ if os.path.isdir("/sys/kernel/iommu_groups") and os.listdir("/sys/kernel/iommu_groups"):
811
+ return False
812
+ return True
813
+ else:
814
+ # doesn't matter
815
+ return True
@@ -0,0 +1,126 @@
1
+ # NVIDIA Software License Agreement
2
+
3
+ IMPORTANT NOTICE – PLEASE READ AND AGREE BEFORE USING THE SOFTWARE.
4
+
5
+ This license agreement (“Agreement”) is a legal agreement between you, whether an individual or entity (“you”) and NVIDIA Corporation (“NVIDIA”) and governs the use of the NVIDIA Warp and any additional software and materials provided under this Agreement (“Software”).
6
+
7
+ This Agreement can be accepted only by an adult of legal age of majority in the country in which the Software is used.
8
+ If you don’t have the required age or authority to accept this Agreement, or if you don’t accept all the terms and conditions of this Agreement, do not use the Software.
9
+ You agree to use the Software only for purposes that are permitted by this Agreement and any applicable law or regulation in the relevant jurisdictions.
10
+
11
+ ## 1. License Grant
12
+
13
+ Subject to the terms of this Agreement, NVIDIA grants you a non-exclusive, revocable, non-transferable, non-sublicensable (except as expressly granted in this Agreement), license to:
14
+
15
+ 1.1 install and use copies of the Software,
16
+
17
+ 1.2 modify and create derivative works of sample or example Software provided by NVIDIA in source code format, and
18
+
19
+ 1.3 distribute the Software as incorporated into a software application subject to the following distribution requirements:
20
+
21
+ (a) Your application must have material additional functionality, beyond the included portions of the Software.
22
+
23
+ (b) The distributable portions of the Software shall only be accessed by your application.
24
+
25
+ (c) The following notice shall be included in modifications and derivative works of sample source code distributed: “This software contains source code provided by NVIDIA Corporation.”
26
+
27
+ (d) Unless a developer tool is identified in this Agreement as distributable, it is delivered for your internal use only.
28
+
29
+ (e) The terms under which you distribute your application must be consistent with the terms of this Agreement, including (without limitation) terms relating to the license grant and license restrictions and protection of
30
+ NVIDIA’s intellectual property rights. Additionally, you agree that you will protect the privacy, security and legal rights of your application users.
31
+
32
+ (f) You agree to notify NVIDIA in writing of any known or suspected distribution or use of the Software not in compliance with the requirements of this Agreement, and to enforce the terms of your agreements with respect to distributed Software.
33
+
34
+ ## 2. Limitations
35
+
36
+ Your license to use the Software is restricted as follows:
37
+
38
+ 2.1 The Software is licensed for you to develop applications only for use in systems with NVIDIA GPUs, NVIDIA CPUs or other CPUs.
39
+
40
+ 2.2 You may not reverse engineer, decompile or disassemble the Software components provided in binary form, nor attempt in any other manner to obtain source code of the Software.
41
+
42
+ 2.3 You may not change or remove copyright or other proprietary notices in the Software.
43
+
44
+ 2.4 Except as expressly granted in this Agreement, you may not copy, sell, rent, sublicense, transfer, distribute, modify or create derivative works of the Software, or make its functionality available to others.
45
+
46
+ 2.5 You may not bypass, disable or circumvent any technical limitation, encryption, security, digital rights management or authentication mechanism in the Software.
47
+
48
+ 2.6 You may not use the Software in any manner that would cause it to become subject to an open source software license; subject to the terms in the “Components Under Other Licenses” section below.
49
+
50
+ 2.7 You may not use the Software for the purpose of developing competing products or technologies or assist a third party in such activities.
51
+
52
+ 2.8 You may not indicate that a product or service developed with the Software is sponsored or endorsed by NVIDIA.
53
+
54
+ 2.9 You may not replace any NVIDIA software components in the Software that are governed by this Agreement with other software that implements NVIDIA APIs.
55
+
56
+ 2.10 You may not reverse engineer, decompile or disassemble any portion of the output generated using Software elements for the purpose of translating such output artifacts to target a non-NVIDIA platform.
57
+
58
+ 2.11 You acknowledge that the Software provided under this Agreement is not designed or tested by NVIDIA for use in any system or application where the use or failure of such system or application developed with NVIDIA’s Software could result in injury, death or catastrophic damage (each, a “Mission Critical Application”). Examples of Mission Critical Applications include use in avionics, navigation, autonomous vehicle applications, AI solutions for automotive products, military, medical, life support or other mission-critical or life-critical applications. NVIDIA will not be liable to you or any third party, in whole or in part, for any claims or damages arising from these uses. You are solely responsible for ensuring that systems and applications developed with the Software include sufficient safety and redundancy features and comply with all applicable legal and regulatory standards and requirements.
59
+
60
+ 2.12 You agree to defend, indemnify and hold harmless NVIDIA and its affiliates, and their respective employees, contractors, agents, officers and directors, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, fines, restitutions and expenses (including but not limited to attorney’s fees and costs incident to establishing the right of indemnification) arising out of or related to (i) products or services that have been developed or deployed with or use the Software, or claims that they violate laws, or infringe, violate, or misappropriate any third party right; or (ii) a violation of the terms and conditions of this Agreement.
61
+
62
+ ## 3. Authorized Users
63
+
64
+ You may allow employees and contractors of your entity or of your subsidiary(ies) to access and use the Software from your secure network to perform the work authorized by this Agreement on your behalf. If you are an academic institution, you may allow users enrolled or employed by the academic institution to access and use the Software as authorized by this Agreement from your secure network. You are responsible for the compliance with the terms of this Agreement by your authorized users. Any act or omission that if committed by you would constitute a breach of this Agreement will be deemed to constitute a breach of this Agreement if committed by your authorized users.
65
+
66
+ ## 4. Pre-Release Versions
67
+
68
+ Software versions or specific features identified as alpha, beta, preview, early access or otherwise as pre-release may not be fully functional, may contain errors or design flaws, and may have reduced or different security, privacy, availability and reliability standards relative to commercial versions of NVIDIA offerings. You may use pre-release Software at your own risk, understanding that such versions are not intended for use in production or business-critical systems. NVIDIA may choose not to make available a commercial version of any pre-release Software. NVIDIA may also choose to abandon development and terminate the availability of pre-release Software at any time without liability.
69
+
70
+ ## 5. Updates
71
+
72
+ NVIDIA may, at its option, make available patches, workarounds or other updates to the Software. Unless the updates are provided with their separate governing terms, they are deemed part of the Software licensed to you as provided in this Agreement.
73
+
74
+ ## 6. Components Under Other Licenses
75
+
76
+ The Software may include or be distributed with components provided with separate legal notices or terms that accompany the components, such as open source software licenses and other license. The components are subject to the applicable other licenses, including any proprietary notices, disclaimers, requirements and extended use rights; except that this Agreement will prevail regarding the use of third-party open source software, unless a third-party open source software license requires its license terms to prevail. Open source software license means any software, data or documentation subject to any license identified as an open source license by the Open Source Initiative (http://opensource.org), Free Software Foundation (http://www.fsf.org) or other similar open source organization or listed by the Software Package Data Exchange (SPDX) Workgroup under the Linux Foundation (http://www.spdx.org).
77
+
78
+ ## 7. Termination
79
+
80
+ This Agreement will automatically terminate without notice from NVIDIA if you fail to comply with any of the terms in this Agreement or if you commence or participate in any legal proceeding against NVIDIA with respect to the Software. Additionally, NVIDIA may terminate this Agreement with prior written notice to you if, in NVIDIA’s sole discretion, the continued use of the Software is no longer commercially viable or creates liabilities for NVIDIA. You agree to cooperate with NVIDIA and provide reasonably requested information to verify your compliance with this Agreement. Upon any termination, you must stop using and destroy all copies of the Software. Upon written request, you will certify in writing that you have complied with your commitments under this section. All provisions will survive termination, except for the licenses granted to you.
81
+
82
+ ## 8. Ownership
83
+
84
+ 8.1 NVIDIA Ownership. The Software, including all intellectual property rights, is and will remain the sole and exclusive property of NVIDIA or its licensors. Except as expressly granted in this Agreement, (i) NVIDIA reserves all rights, interests and remedies in connection with the Software and (ii) no other license or right is granted to you by implication, estoppel or otherwise.
85
+
86
+ 8.2 Your Ownership. Subject to the rights of NVIDIA and its suppliers in the Software, you hold all rights, title and interest in and to your services, applications and derivative works of samples or examples you develop as permitted in this Agreement including their respective intellectual property rights.
87
+
88
+ 8.3 Non-Assert. You agree that you will not, and will not assist or enable any other party to, assert or threaten to assert any intellectual property rights against NVIDIA or its affiliates with respect to new software samples or examples that NVIDIA or its affiliates may develop and make available in the future.
89
+
90
+ ## 9. Feedback
91
+
92
+ You may, but are not obligated to, provide suggestions, requests, fixes, modifications, enhancements or other feedback regarding or in connection with your use of the Software (collectively, “Feedback”). Feedback, even if designated as confidential by you, will not create any confidentiality obligation for NVIDIA or its affiliates. If you provide Feedback, you hereby grant NVIDIA, its affiliates and its designees a non-exclusive, perpetual, irrevocable, sublicensable, worldwide, royalty-free, fully paid-up and transferable license, under your intellectual property rights, to publicly perform, publicly display, reproduce, use, make, have made, sell, offer for sale, distribute (through multiple tiers of distribution), import, create derivative works of and otherwise commercialize and exploit the Feedback at NVIDIA’s discretion. You will not give Feedback (i) that you have reason to believe is subject to any restriction that impairs the exercise of the grant stated in this section, such as third-party intellectual property rights or (ii) subject to license terms which seek to require any product incorporating or developed using such Feedback, or other intellectual property of NVIDIA or its affiliates, to be licensed to or otherwise shared with any third party.
93
+
94
+ ## 10. Disclaimer of Warranties.
95
+
96
+ THE SOFTWARE IS PROVIDED BY NVIDIA AS-IS AND WITH ALL FAULTS. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NVIDIA DISCLAIMS ALL WARRANTIES AND REPRESENTATIONS OF ANY KIND, WHETHER EXPRESS, IMPLIED OR STATUTORY, RELATING TO OR ARISING UNDER THIS AGREEMENT, INCLUDING, WITHOUT LIMITATION, THE WARRANTIES OF TITLE, NONINFRINGEMENT, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, USAGE OF TRADE AND COURSE OF DEALING. WITHOUT LIMITING THE FOREGOING, NVIDIA DOES NOT WARRANT THAT THE SOFTWARE WILL MEET YOUR REQUIREMENTS; THAT ANY DEFECTS OR ERRORS WILL BE CORRECTED; THAT ANY CERTAIN CONTENT WILL BE AVAILABLE; OR THAT THE SOFTWARE IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. NO INFORMATION OR ADVICE GIVEN BY NVIDIA WILL IN ANY WAY INCREASE THE SCOPE OF ANY WARRANTY EXPRESSLY PROVIDED IN THIS AGREEMENT. NVIDIA does not warrant or assume responsibility for the accuracy or completeness of any third-party information, text, graphics or links contained in the Software.
97
+
98
+ ## 11. Limitations of Liability
99
+
100
+ 11.1 DISCLAIMERS. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL NVIDIA BE LIABLE FOR ANY (I) INDIRECT, PUNITIVE, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, OR (II) DAMAGES FOR THE (A) COST OF PROCURING SUBSTITUTE GOODS OR (B) LOSS OF PROFITS, REVENUES, USE, DATA OR GOODWILL ARISING OUT OF OR RELATED TO THIS AGREEMENT, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, OR OTHERWISE, AND EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND EVEN IF A PARTY’S REMEDIES FAIL THEIR ESSENTIAL PURPOSE.
101
+
102
+ 11.2 DAMAGES CAP. ADDITIONALLY, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, NVIDIA’S TOTAL CUMULATIVE AGGREGATE LIABILITY FOR ANY AND ALL LIABILITIES, OBLIGATIONS OR CLAIMS ARISING OUT OF OR RELATED TO THIS AGREEMENT WILL NOT EXCEED FIVE U.S. DOLLARS (US$5).
103
+
104
+ ## 12. Governing Law and Jurisdiction
105
+
106
+ This Agreement will be governed in all respects by the laws of the United States and the laws of the State of Delaware, without regard to conflict of laws principles or the United Nations Convention on Contracts for the International Sale of Goods. The state and federal courts residing in Santa Clara County, California will have exclusive jurisdiction over any dispute or claim arising out of or related to this Agreement, and the parties irrevocably consent to personal jurisdiction and venue in those courts; except that either party may apply for injunctive remedies or an equivalent type of urgent legal relief in any jurisdiction.
107
+
108
+ ## 13. General
109
+
110
+ 13.1 No Assignment. NVIDIA may assign, delegate or transfer its rights or obligations under this Agreement by any means or operation of law. You may not, without NVIDIA’s prior written consent, assign, delegate or transfer any of your rights or obligations under this Agreement by any means or operation of law, and any attempt to do so is null and void.
111
+
112
+ 13.2 No Waiver. No waiver of any term of the Agreement will be deemed a further or continuing waiver of such term or any other term, and NVIDIA’s failure to assert any right or provision under the Agreement will not constitute a waiver of such right or provision.
113
+
114
+ 13.3 Trade and Compliance. You agree to comply with all applicable export, import, trade and economic sanctions laws and regulations, including U.S. Export Administration Regulations and Office of Foreign Assets Control regulations. You confirm that you will not export or reexport any products or technology, directly or indirectly, without first obtaining any required license or other approval from appropriate authorities, (i) to any countries that are subject to any U.S. or local export restrictions (currently including, but not necessarily limited to, Cuba, Iran, North Korea, Syria, the Region of Crimea, Donetsk People’s Republic Region and Luhansk People’s Republic Region); (ii) to any end user who you know or have reason to know will utilize them in the design, development or production of nuclear, chemical or biological weapons, missiles, rocket systems, unmanned air vehicles, or any weapons of mass destruction; (iii) to any end-user who has been prohibited from participating in the U.S. or local export transactions by any governing authority; or (iv) to any known military or military-intelligence end-user or for any known military or military-intelligence end-use in accordance with U.S. trade compliance laws and regulations. Use of the Software under this Agreement must be consistent with NVIDIA’s HumanRightsPolicy.pdf (nvidia.com).
115
+
116
+ 13.4 Government Rights. The Software, documentation and technology (“Protected Items”) are “Commercial products” as this term is defined at 48 C.F.R. 2.101, consisting of “commercial computer software” and “commercial computer software documentation” as such terms are used in, respectively, 48 C.F.R. 12.212 and 48 C.F.R. 227.7202 & 252.227-7014(a)(1). Before any Protected Items are supplied to the U.S. Government, you will (i) inform the U.S. Government in writing that the Protected Items are and must be treated as commercial computer software and commercial computer software documentation developed at private expense; (ii) inform the U.S. Government that the Protected Items are provided subject to the terms of the Agreement; and (iii) mark the Protected Items as commercial computer software and commercial computer software documentation developed at private expense. In no event will you permit the U.S. Government to acquire rights in Protected Items beyond those specified in 48 C.F.R. 52.227-19(b)(1)-(2) or 252.227-7013(c) except as expressly approved by NVIDIA in writing.
117
+
118
+ 13.5 Notices. Please direct your legal notices or other correspondence to NVIDIA Corporation, 2788 San Tomas Expressway, Santa Clara, California 95051, United States of America, Attention: Legal Department, with a copy emailed to legalnotices@nvidia.com. If NVIDIA needs to contact you about the Software, you consent to receive the notices by email and agree that such notices will satisfy any legal communication requirements.
119
+
120
+ 13.6 Force Majeure. Neither party will be liable during any period where an event or circumstance prevents or delays that party from performing its obligations under this Agreement and that event or circumstance: (i) is not within the reasonable control of that party and is not the result of that party’s negligence, and (ii) cannot be overcome or avoided by that party using reasonably diligent efforts.
121
+
122
+ 13.7 Severability and Amendment. If a court of competent jurisdiction rules that a provision of this Agreement is unenforceable, that provision will be deemed modified to the extent necessary to make it enforceable and the remainder of this Agreement will continue in full force and effect. Any amendment to this Agreement must be in writing and signed by authorized representatives of both parties.
123
+
124
+ 13.8 Construction. The headings in the Agreement are included solely for convenience and are not intended to affect the meaning or interpretation of the Agreement. As required by the context of the Agreement, the singular of a term includes the plural and vice versa.
125
+
126
+ 13.9 Entire Agreement. Regarding the subject matter of this Agreement, the parties agree that (i) this Agreement constitutes the entire and exclusive agreement between the parties and supersedes all prior and contemporaneous communications and (ii) any additional or different terms or conditions, whether contained in purchase orders, order acknowledgments, invoices or otherwise, will not be binding and are null and void.