warp-lang 1.2.2__py3-none-macosx_10_13_universal2.whl → 1.3.1__py3-none-macosx_10_13_universal2.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.
Files changed (193) hide show
  1. warp/__init__.py +8 -6
  2. warp/autograd.py +823 -0
  3. warp/bin/libwarp.dylib +0 -0
  4. warp/build.py +6 -2
  5. warp/builtins.py +1412 -888
  6. warp/codegen.py +503 -166
  7. warp/config.py +48 -18
  8. warp/context.py +400 -198
  9. warp/dlpack.py +8 -0
  10. warp/examples/assets/bunny.usd +0 -0
  11. warp/examples/benchmarks/benchmark_cloth_warp.py +1 -1
  12. warp/examples/benchmarks/benchmark_interop_torch.py +158 -0
  13. warp/examples/benchmarks/benchmark_launches.py +1 -1
  14. warp/examples/core/example_cupy.py +78 -0
  15. warp/examples/fem/example_apic_fluid.py +17 -36
  16. warp/examples/fem/example_burgers.py +9 -18
  17. warp/examples/fem/example_convection_diffusion.py +7 -17
  18. warp/examples/fem/example_convection_diffusion_dg.py +27 -47
  19. warp/examples/fem/example_deformed_geometry.py +11 -22
  20. warp/examples/fem/example_diffusion.py +7 -18
  21. warp/examples/fem/example_diffusion_3d.py +24 -28
  22. warp/examples/fem/example_diffusion_mgpu.py +7 -14
  23. warp/examples/fem/example_magnetostatics.py +190 -0
  24. warp/examples/fem/example_mixed_elasticity.py +111 -80
  25. warp/examples/fem/example_navier_stokes.py +30 -34
  26. warp/examples/fem/example_nonconforming_contact.py +290 -0
  27. warp/examples/fem/example_stokes.py +17 -32
  28. warp/examples/fem/example_stokes_transfer.py +12 -21
  29. warp/examples/fem/example_streamlines.py +350 -0
  30. warp/examples/fem/utils.py +936 -0
  31. warp/fabric.py +5 -2
  32. warp/fem/__init__.py +13 -3
  33. warp/fem/cache.py +161 -11
  34. warp/fem/dirichlet.py +37 -28
  35. warp/fem/domain.py +105 -14
  36. warp/fem/field/__init__.py +14 -3
  37. warp/fem/field/field.py +454 -11
  38. warp/fem/field/nodal_field.py +33 -18
  39. warp/fem/geometry/deformed_geometry.py +50 -15
  40. warp/fem/geometry/hexmesh.py +12 -24
  41. warp/fem/geometry/nanogrid.py +106 -31
  42. warp/fem/geometry/quadmesh_2d.py +6 -11
  43. warp/fem/geometry/tetmesh.py +103 -61
  44. warp/fem/geometry/trimesh_2d.py +98 -47
  45. warp/fem/integrate.py +231 -186
  46. warp/fem/operator.py +14 -9
  47. warp/fem/quadrature/pic_quadrature.py +35 -9
  48. warp/fem/quadrature/quadrature.py +119 -32
  49. warp/fem/space/basis_space.py +98 -22
  50. warp/fem/space/collocated_function_space.py +3 -1
  51. warp/fem/space/function_space.py +7 -2
  52. warp/fem/space/grid_2d_function_space.py +3 -3
  53. warp/fem/space/grid_3d_function_space.py +4 -4
  54. warp/fem/space/hexmesh_function_space.py +3 -2
  55. warp/fem/space/nanogrid_function_space.py +12 -14
  56. warp/fem/space/partition.py +45 -47
  57. warp/fem/space/restriction.py +19 -16
  58. warp/fem/space/shape/cube_shape_function.py +91 -3
  59. warp/fem/space/shape/shape_function.py +7 -0
  60. warp/fem/space/shape/square_shape_function.py +32 -0
  61. warp/fem/space/shape/tet_shape_function.py +11 -7
  62. warp/fem/space/shape/triangle_shape_function.py +10 -1
  63. warp/fem/space/topology.py +116 -42
  64. warp/fem/types.py +8 -1
  65. warp/fem/utils.py +301 -83
  66. warp/native/array.h +16 -0
  67. warp/native/builtin.h +0 -15
  68. warp/native/cuda_util.cpp +14 -6
  69. warp/native/exports.h +1348 -1308
  70. warp/native/quat.h +79 -0
  71. warp/native/rand.h +27 -4
  72. warp/native/sparse.cpp +83 -81
  73. warp/native/sparse.cu +381 -453
  74. warp/native/vec.h +64 -0
  75. warp/native/volume.cpp +40 -49
  76. warp/native/volume_builder.cu +2 -3
  77. warp/native/volume_builder.h +12 -17
  78. warp/native/warp.cu +3 -3
  79. warp/native/warp.h +69 -59
  80. warp/render/render_opengl.py +17 -9
  81. warp/sim/articulation.py +117 -17
  82. warp/sim/collide.py +35 -29
  83. warp/sim/model.py +123 -18
  84. warp/sim/render.py +3 -1
  85. warp/sparse.py +867 -203
  86. warp/stubs.py +312 -541
  87. warp/tape.py +29 -1
  88. warp/tests/disabled_kinematics.py +1 -1
  89. warp/tests/test_adam.py +1 -1
  90. warp/tests/test_arithmetic.py +1 -1
  91. warp/tests/test_array.py +58 -1
  92. warp/tests/test_array_reduce.py +1 -1
  93. warp/tests/test_async.py +1 -1
  94. warp/tests/test_atomic.py +1 -1
  95. warp/tests/test_bool.py +1 -1
  96. warp/tests/test_builtins_resolution.py +1 -1
  97. warp/tests/test_bvh.py +6 -1
  98. warp/tests/test_closest_point_edge_edge.py +1 -1
  99. warp/tests/test_codegen.py +91 -1
  100. warp/tests/test_compile_consts.py +1 -1
  101. warp/tests/test_conditional.py +1 -1
  102. warp/tests/test_copy.py +1 -1
  103. warp/tests/test_ctypes.py +1 -1
  104. warp/tests/test_dense.py +1 -1
  105. warp/tests/test_devices.py +1 -1
  106. warp/tests/test_dlpack.py +1 -1
  107. warp/tests/test_examples.py +33 -4
  108. warp/tests/test_fabricarray.py +5 -2
  109. warp/tests/test_fast_math.py +1 -1
  110. warp/tests/test_fem.py +213 -6
  111. warp/tests/test_fp16.py +1 -1
  112. warp/tests/test_func.py +1 -1
  113. warp/tests/test_future_annotations.py +90 -0
  114. warp/tests/test_generics.py +1 -1
  115. warp/tests/test_grad.py +1 -1
  116. warp/tests/test_grad_customs.py +1 -1
  117. warp/tests/test_grad_debug.py +247 -0
  118. warp/tests/test_hash_grid.py +6 -1
  119. warp/tests/test_implicit_init.py +354 -0
  120. warp/tests/test_import.py +1 -1
  121. warp/tests/test_indexedarray.py +1 -1
  122. warp/tests/test_intersect.py +1 -1
  123. warp/tests/test_jax.py +1 -1
  124. warp/tests/test_large.py +1 -1
  125. warp/tests/test_launch.py +1 -1
  126. warp/tests/test_lerp.py +1 -1
  127. warp/tests/test_linear_solvers.py +1 -1
  128. warp/tests/test_lvalue.py +1 -1
  129. warp/tests/test_marching_cubes.py +5 -2
  130. warp/tests/test_mat.py +34 -35
  131. warp/tests/test_mat_lite.py +2 -1
  132. warp/tests/test_mat_scalar_ops.py +1 -1
  133. warp/tests/test_math.py +1 -1
  134. warp/tests/test_matmul.py +20 -16
  135. warp/tests/test_matmul_lite.py +1 -1
  136. warp/tests/test_mempool.py +1 -1
  137. warp/tests/test_mesh.py +5 -2
  138. warp/tests/test_mesh_query_aabb.py +1 -1
  139. warp/tests/test_mesh_query_point.py +1 -1
  140. warp/tests/test_mesh_query_ray.py +1 -1
  141. warp/tests/test_mlp.py +1 -1
  142. warp/tests/test_model.py +1 -1
  143. warp/tests/test_module_hashing.py +77 -1
  144. warp/tests/test_modules_lite.py +1 -1
  145. warp/tests/test_multigpu.py +1 -1
  146. warp/tests/test_noise.py +1 -1
  147. warp/tests/test_operators.py +1 -1
  148. warp/tests/test_options.py +1 -1
  149. warp/tests/test_overwrite.py +542 -0
  150. warp/tests/test_peer.py +1 -1
  151. warp/tests/test_pinned.py +1 -1
  152. warp/tests/test_print.py +1 -1
  153. warp/tests/test_quat.py +15 -1
  154. warp/tests/test_rand.py +1 -1
  155. warp/tests/test_reload.py +1 -1
  156. warp/tests/test_rounding.py +1 -1
  157. warp/tests/test_runlength_encode.py +1 -1
  158. warp/tests/test_scalar_ops.py +95 -0
  159. warp/tests/test_sim_grad.py +1 -1
  160. warp/tests/test_sim_kinematics.py +1 -1
  161. warp/tests/test_smoothstep.py +1 -1
  162. warp/tests/test_sparse.py +82 -15
  163. warp/tests/test_spatial.py +1 -1
  164. warp/tests/test_special_values.py +2 -11
  165. warp/tests/test_streams.py +11 -1
  166. warp/tests/test_struct.py +1 -1
  167. warp/tests/test_tape.py +1 -1
  168. warp/tests/test_torch.py +194 -1
  169. warp/tests/test_transient_module.py +1 -1
  170. warp/tests/test_types.py +1 -1
  171. warp/tests/test_utils.py +1 -1
  172. warp/tests/test_vec.py +15 -63
  173. warp/tests/test_vec_lite.py +2 -1
  174. warp/tests/test_vec_scalar_ops.py +65 -1
  175. warp/tests/test_verify_fp.py +1 -1
  176. warp/tests/test_volume.py +28 -2
  177. warp/tests/test_volume_write.py +1 -1
  178. warp/tests/unittest_serial.py +1 -1
  179. warp/tests/unittest_suites.py +9 -1
  180. warp/tests/walkthrough_debug.py +1 -1
  181. warp/thirdparty/unittest_parallel.py +2 -5
  182. warp/torch.py +103 -41
  183. warp/types.py +341 -224
  184. warp/utils.py +11 -2
  185. {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/METADATA +99 -46
  186. warp_lang-1.3.1.dist-info/RECORD +368 -0
  187. warp/examples/fem/bsr_utils.py +0 -378
  188. warp/examples/fem/mesh_utils.py +0 -133
  189. warp/examples/fem/plot_utils.py +0 -292
  190. warp_lang-1.2.2.dist-info/RECORD +0 -359
  191. {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/LICENSE.md +0 -0
  192. {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/WHEEL +0 -0
  193. {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/top_level.txt +0 -0
warp/utils.py CHANGED
@@ -644,6 +644,7 @@ class ScopedTimer:
644
644
  skip_tape (bool): If true, the timer will not be recorded in the tape
645
645
 
646
646
  Attributes:
647
+ extra_msg (str): Can be set to a string that will be added to the printout at context exit.
647
648
  elapsed (float): The duration of the ``with`` block used with this object
648
649
  timing_results (list[TimingResult]): The list of activity timing results, if collection was requested using ``cuda_filter``
649
650
  """
@@ -659,6 +660,7 @@ class ScopedTimer:
659
660
  self.elapsed = 0.0
660
661
  self.cuda_filter = cuda_filter
661
662
  self.report_func = report_func or wp.timing_print
663
+ self.extra_msg = "" # Can be used to add to the message printed at manager exit
662
664
 
663
665
  if self.dict is not None:
664
666
  if name not in self.dict:
@@ -688,6 +690,10 @@ class ScopedTimer:
688
690
  if self.print:
689
691
  ScopedTimer.indent += 1
690
692
 
693
+ if warp.config.verbose:
694
+ indent = " " * ScopedTimer.indent
695
+ print(f"{indent}{self.name} ...", flush=True)
696
+
691
697
  self.start = time.perf_counter_ns()
692
698
 
693
699
  return self
@@ -720,13 +726,16 @@ class ScopedTimer:
720
726
  self.dict[self.name].append(self.elapsed)
721
727
 
722
728
  if self.print:
723
- indent = "\t" * ScopedTimer.indent
729
+ indent = " " * ScopedTimer.indent
724
730
 
725
731
  if self.timing_results:
726
732
  self.report_func(self.timing_results, indent=indent)
727
733
  print()
728
734
 
729
- print(f"{indent}{self.name} took {self.elapsed :.2f} ms")
735
+ if self.extra_msg:
736
+ print(f"{indent}{self.name} took {self.elapsed :.2f} ms {self.extra_msg}")
737
+ else:
738
+ print(f"{indent}{self.name} took {self.elapsed :.2f} ms")
730
739
 
731
740
  ScopedTimer.indent -= 1
732
741
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: warp-lang
3
- Version: 1.2.2
3
+ Version: 1.3.1
4
4
  Summary: A Python framework for high-performance simulation and graphics programming
5
- Author-email: NVIDIA <mmacklin@nvidia.com>
5
+ Author-email: NVIDIA Corporation <mmacklin@nvidia.com>
6
6
  License: NVIDIA Software License
7
7
  Project-URL: GitHub, https://github.com/NVIDIA/warp
8
8
  Project-URL: Documentation, https://nvidia.github.io/warp
@@ -34,7 +34,7 @@ Requires-Dist: pyglet ; extra == 'extras'
34
34
  ![GitHub commit activity](https://img.shields.io/github/commit-activity/m/NVIDIA/warp?link=https%3A%2F%2Fgithub.com%2FNVIDIA%2Fwarp%2Fcommits%2Fmain)
35
35
  [![Downloads](https://static.pepy.tech/badge/warp-lang/month)](https://pepy.tech/project/warp-lang)
36
36
  [![codecov](https://codecov.io/github/NVIDIA/warp/graph/badge.svg?token=7O1KSM79FG)](https://codecov.io/github/NVIDIA/warp)
37
- ![GitHub - Build and Test](https://github.com/NVIDIA/warp/actions/workflows/build-and-test.yml/badge.svg)
37
+ ![GitHub - CI](https://github.com/NVIDIA/warp/actions/workflows/ci.yml/badge.svg)
38
38
  [![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?logo=discord&logoColor=white)](https://discord.com/invite/nvidiaomniverse)
39
39
 
40
40
  # NVIDIA Warp
@@ -42,7 +42,8 @@ Requires-Dist: pyglet ; extra == 'extras'
42
42
  Warp is a Python framework for writing high-performance simulation and graphics code. Warp takes
43
43
  regular Python functions and JIT compiles them to efficient kernel code that can run on the CPU or GPU.
44
44
 
45
- Warp is designed for spatial computing and comes with a rich set of primitives that make it easy to write
45
+ Warp is designed for [spatial computing](https://en.wikipedia.org/wiki/Spatial_computing)
46
+ and comes with a rich set of primitives that make it easy to write
46
47
  programs for physics simulation, perception, robotics, and geometry processing. In addition, Warp kernels
47
48
  are differentiable and can be used as part of machine-learning pipelines with frameworks such as PyTorch and JAX.
48
49
 
@@ -60,19 +61,54 @@ GPU support requires a CUDA-capable NVIDIA GPU and driver (minimum GeForce GTX 9
60
61
 
61
62
  The easiest way to install Warp is from [PyPI](https://pypi.org/project/warp-lang/):
62
63
 
63
- pip install warp-lang
64
+ ```text
65
+ pip install warp-lang
66
+ ```
64
67
 
65
68
  You can also use `pip install warp-lang[extras]` to install additional dependencies for running examples and USD-related features.
66
69
 
67
- The binaries hosted on PyPI are currently built with the CUDA 11.8 runtime.
68
- We provide binaries built with the CUDA 12.5 runtime on the [GitHub Releases](https://github.com/NVIDIA/warp/releases) page.
70
+ The binaries hosted on PyPI are currently built with the CUDA 12 runtime and therefore
71
+ require a minimum version of the CUDA driver of 525.60.13 (Linux x86-64) or 528.33 (Windows x86-64).
72
+
73
+ If you require GPU support on a system with an older CUDA driver, you can build Warp from source or
74
+ install wheels built with the CUDA 11.8 runtime from the [GitHub Releases](https://github.com/NVIDIA/warp/releases) page.
69
75
  Copy the URL of the appropriate wheel file (`warp-lang-{ver}+cu12-py3-none-{platform}.whl`) and pass it to
70
76
  the `pip install` command, e.g.
71
77
 
72
- pip install https://github.com/NVIDIA/warp/releases/download/v1.2.0/warp_lang-1.2.0+cu12-py3-none-manylinux2014_x86_64.whl
78
+ | Platform | Install Command |
79
+ | --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
80
+ | Linux aarch64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.3.1/warp_lang-1.3.1+cu11-py3-none-manylinux2014_aarch64.whl` |
81
+ | Linux x86-64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.3.1/warp_lang-1.3.1+cu11-py3-none-manylinux2014_x86_64.whl` |
82
+ | Windows x86-64 | `pip install https://github.com/NVIDIA/warp/releases/download/v1.3.1/warp_lang-1.3.1+cu11-py3-none-win_amd64.whl` |
73
83
 
74
84
  The `--force-reinstall` option may need to be used to overwrite a previous installation.
75
85
 
86
+ ### CUDA Requirements
87
+
88
+ * Warp packages built with CUDA Toolkit 11.x require NVIDIA driver 470 or newer.
89
+ * Warp packages built with CUDA Toolkit 12.x require NVIDIA driver 525 or newer.
90
+
91
+ This applies to pre-built packages distributed on PyPI and GitHub and also when building Warp from source.
92
+
93
+ Note that building Warp with the `--quick` flag changes the driver requirements. The quick build skips CUDA backward compatibility, so the minimum required driver is determined by the CUDA Toolkit version. Refer to the [latest CUDA Toolkit release notes](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html) to find the minimum required driver for different CUDA Toolkit versions (e.g., [this table from CUDA Toolkit 12.5](https://docs.nvidia.com/cuda/archive/12.5.0/cuda-toolkit-release-notes/index.html#id3)).
94
+
95
+ Warp checks the installed driver during initialization and will report a warning if the driver is not suitable, e.g.:
96
+
97
+ ```text
98
+ Warp UserWarning:
99
+ Insufficient CUDA driver version.
100
+ The minimum required CUDA driver version is 12.0, but the installed CUDA driver version is 11.8.
101
+ Visit https://github.com/NVIDIA/warp/blob/main/README.md#installing for guidance.
102
+ ```
103
+
104
+ This will make CUDA devices unavailable, but the CPU can still be used.
105
+
106
+ To remedy the situation there are a few options:
107
+
108
+ * Update the driver.
109
+ * Install a compatible pre-built Warp package.
110
+ * Build Warp from source using a CUDA Toolkit that's compatible with the installed driver.
111
+
76
112
  ## Getting Started
77
113
 
78
114
  An example first program that computes the lengths of random 3D vectors is given below:
@@ -108,20 +144,32 @@ print(lengths)
108
144
 
109
145
  ## Running Examples
110
146
 
111
- The [warp/examples](./warp/examples/) directory contains a number of scripts categorized under different subdirectories
112
- that show how to implement different simulation methods using the Warp API.
113
- Most examples will generate USD files containing time-sampled animations (stored in the current working directory).
147
+ The [warp/examples](./warp/examples/) directory contains a number of scripts categorized under subdirectories
148
+ that show how to implement various simulation methods using the Warp API.
149
+ Most examples will generate USD files containing time-sampled animations in the current working directory.
114
150
  Before running examples, users should ensure that the ``usd-core``, ``matplotlib``, and ``pyglet`` packages are installed using:
115
151
 
116
- pip install usd-core matplotlib pyglet
152
+ ```text
153
+ pip install warp-lang[extras]
154
+ ```
155
+
156
+ These dependencies can also be manually installed using:
157
+
158
+ ```text
159
+ pip install usd-core matplotlib pyglet
160
+ ```
117
161
 
118
162
  Examples can be run from the command-line as follows:
119
163
 
120
- python -m warp.examples.<example_subdir>.<example>
164
+ ```text
165
+ python -m warp.examples.<example_subdir>.<example>
166
+ ```
121
167
 
122
168
  To browse the example source code, you can open the directory where the files are located like this:
123
169
 
124
- python -m warp.examples.browse
170
+ ```text
171
+ python -m warp.examples.browse
172
+ ```
125
173
 
126
174
  Most examples can be run on either the CPU or a CUDA-capable device, but a handful require a CUDA-capable device. These are marked at the top of the example script.
127
175
 
@@ -129,10 +177,11 @@ USD files can be viewed or rendered inside [NVIDIA Omniverse](https://developer.
129
177
 
130
178
  Built-in unit tests can be run from the command-line as follows:
131
179
 
132
- python -m warp.tests
133
-
180
+ ```text
181
+ python -m warp.tests
182
+ ```
134
183
 
135
- ### examples/core
184
+ ### warp/examples/core
136
185
 
137
186
  <table>
138
187
  <tbody>
@@ -175,40 +224,38 @@ Built-in unit tests can be run from the command-line as follows:
175
224
  </tbody>
176
225
  </table>
177
226
 
178
-
179
- ### examples/fem
227
+ ### warp/examples/fem
180
228
 
181
229
  <table>
182
230
  <tbody>
183
231
  <tr>
184
- <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_apic_fluid.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_apic_fluid.png"></a></td>
185
- <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_convection_diffusion.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_convection_diffusion.png"></a></td>
186
232
  <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_diffusion_3d.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_diffusion_3d.png"></a></td>
187
- <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_diffusion.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_diffusion.png"></a></td>
233
+ <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_mixed_elasticity.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_mixed_elasticity.png"></a></td>
234
+ <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_apic_fluid.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_apic_fluid.png"></a></td>
235
+ <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_streamlines.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_streamlines.png"></a></td>
188
236
  </tr>
189
237
  <tr>
190
- <td align="center">apic fluid</td>
191
- <td align="center">convection diffusion</td>
192
238
  <td align="center">diffusion 3d</td>
193
- <td align="center">diffusion</td>
239
+ <td align="center">mixed elasticity</td>
240
+ <td align="center">apic fluid</td>
241
+ <td align="center">streamlines</td>
194
242
  </tr>
195
243
  <tr>
196
- <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_mixed_elasticity.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_mixed_elasticity.png"></a></td>
244
+ <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_convection_diffusion.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_convection_diffusion.png"></a></td>
197
245
  <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_navier_stokes.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_navier_stokes.png"></a></td>
198
- <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_stokes_transfer.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_stokes_transfer.png"></a></td>
199
- <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_stokes.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_stokes.png"></a></td>
246
+ <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_burgers.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_burgers.png"></a></td>
247
+ <td><a href="https://github.com/NVIDIA/warp/tree/main/warp/examples/fem/example_magnetostatics.py"><img src="https://github.com/NVIDIA/warp/raw/main/docs/img/examples/fem_magnetostatics.png"></a></td>
200
248
  </tr>
201
249
  <tr>
202
- <td align="center">mixed elasticity</td>
250
+ <td align="center">convection diffusion</td>
203
251
  <td align="center">navier stokes</td>
204
- <td align="center">stokes transfer</td>
205
- <td align="center">stokes</td>
252
+ <td align="center">burgers</td>
253
+ <td align="center">magnetostatics</td>
206
254
  </tr>
207
255
  </tbody>
208
256
  </table>
209
257
 
210
-
211
- ### examples/optim
258
+ ### warp/examples/optim
212
259
 
213
260
  <table>
214
261
  <tbody>
@@ -239,8 +286,7 @@ Built-in unit tests can be run from the command-line as follows:
239
286
  </tbody>
240
287
  </table>
241
288
 
242
-
243
- ### examples/sim
289
+ ### warp/examples/sim
244
290
 
245
291
  <table>
246
292
  <tbody>
@@ -283,7 +329,6 @@ Built-in unit tests can be run from the command-line as follows:
283
329
  </tbody>
284
330
  </table>
285
331
 
286
-
287
332
  ## Building
288
333
 
289
334
  For developers who want to build the library themselves, the following tools are required:
@@ -295,11 +340,19 @@ For developers who want to build the library themselves, the following tools are
295
340
 
296
341
  After cloning the repository, users should run:
297
342
 
298
- python build_lib.py
343
+ ```text
344
+ python build_lib.py
345
+ ```
299
346
 
300
- This will generate the `warp.dll` / `warp.so` core library respectively. It will search for the CUDA Toolkit in the default install directory. This path can be overridden by setting the `CUDA_PATH` environment variable. Alternatively, the path to the CUDA Toolkit can be passed to the build command as `--cuda_path="..."`. After building, the Warp package should be installed using:
347
+ Upon success, the script will output platform-specific binary files in `warp/bin/`.
348
+ The build script will look for the CUDA Toolkit in its default installation path.
349
+ This path can be overridden by setting the `CUDA_PATH` environment variable. Alternatively,
350
+ the path to the CUDA Toolkit can be passed to the build command as
351
+ `--cuda_path="..."`. After building, the Warp package should be installed using:
301
352
 
302
- pip install -e .
353
+ ```text
354
+ pip install -e .
355
+ ```
303
356
 
304
357
  This ensures that subsequent modifications to the library will be reflected in the Python package.
305
358
 
@@ -327,7 +380,7 @@ See the [FAQ](https://nvidia.github.io/warp/faq.html) in the Warp documentation.
327
380
 
328
381
  Problems, questions, and feature requests can be opened on [GitHub Issues](https://github.com/NVIDIA/warp/issues).
329
382
 
330
- The Warp team also monitors the **#warp** channel on the public [Omniverse Discord](https://discord.com/invite/nvidiaomniverse) server, come chat to us!
383
+ The Warp team also monitors the **#warp** channel on the public [Omniverse Discord](https://discord.com/invite/nvidiaomniverse) server, come chat with us!
331
384
 
332
385
  ## Versioning
333
386
 
@@ -335,12 +388,12 @@ Versions take the format X.Y.Z, similar to [Python itself](https://devguide.pyth
335
388
 
336
389
  * Increments in X are reserved for major reworks of the project causing disruptive incompatibility (or reaching the 1.0 milestone).
337
390
  * Increments in Y are for regular releases with a new set of features.
338
- * Increments in Z are for bug fixes. In principle there are no new features. Can be omitted if 0 or not relevant.
391
+ * Increments in Z are for bug fixes. In principle, there are no new features. Can be omitted if 0 or not relevant.
339
392
 
340
- This is similar to [Semantic Versioning](https://semver.org/) but less strict around backward compatibility.
341
- Like with Python, some breaking changes can be present between minor versions if well documented and gradually introduced.
393
+ This is similar to [Semantic Versioning](https://semver.org/) but is less strict regarding backward compatibility.
394
+ Like with Python, some breaking changes can be present between minor versions if well-documented and gradually introduced.
342
395
 
343
- Note that prior to 0.11.0 this schema was not strictly adhered to.
396
+ Note that prior to 0.11.0, this schema was not strictly adhered to.
344
397
 
345
398
  ## License
346
399
 
@@ -349,12 +402,12 @@ Warp is provided under the NVIDIA Software License, please see [LICENSE.md](./LI
349
402
  ## Contributing
350
403
 
351
404
  Contributions and pull requests from the community are welcome and are taken under the
352
- terms described in the **9. Feedback** section of the [license](LICENSE.md).
405
+ terms described in the **Feedback** section of [LICENSE.md](LICENSE.md#9-feedback).
353
406
  [CONTRIBUTING.md](./CONTRIBUTING.md) provides additional information on how to open a pull request for Warp.
354
407
 
355
408
  ## Citing
356
409
 
357
- If you use Warp in your research please use the following citation:
410
+ If you use Warp in your research, please use the following citation:
358
411
 
359
412
  ```bibtex
360
413
  @misc{warp2022,