warp-lang 1.2.2__py3-none-win_amd64.whl → 1.3.1__py3-none-win_amd64.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 +8 -6
- warp/autograd.py +823 -0
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +0 -0
- warp/build.py +6 -2
- warp/builtins.py +1412 -888
- warp/codegen.py +503 -166
- warp/config.py +48 -18
- warp/context.py +400 -198
- warp/dlpack.py +8 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/benchmarks/benchmark_cloth_warp.py +1 -1
- warp/examples/benchmarks/benchmark_interop_torch.py +158 -0
- warp/examples/benchmarks/benchmark_launches.py +1 -1
- warp/examples/core/example_cupy.py +78 -0
- warp/examples/fem/example_apic_fluid.py +17 -36
- warp/examples/fem/example_burgers.py +9 -18
- warp/examples/fem/example_convection_diffusion.py +7 -17
- warp/examples/fem/example_convection_diffusion_dg.py +27 -47
- warp/examples/fem/example_deformed_geometry.py +11 -22
- warp/examples/fem/example_diffusion.py +7 -18
- warp/examples/fem/example_diffusion_3d.py +24 -28
- warp/examples/fem/example_diffusion_mgpu.py +7 -14
- warp/examples/fem/example_magnetostatics.py +190 -0
- warp/examples/fem/example_mixed_elasticity.py +111 -80
- warp/examples/fem/example_navier_stokes.py +30 -34
- warp/examples/fem/example_nonconforming_contact.py +290 -0
- warp/examples/fem/example_stokes.py +17 -32
- warp/examples/fem/example_stokes_transfer.py +12 -21
- warp/examples/fem/example_streamlines.py +350 -0
- warp/examples/fem/utils.py +936 -0
- warp/fabric.py +5 -2
- warp/fem/__init__.py +13 -3
- warp/fem/cache.py +161 -11
- warp/fem/dirichlet.py +37 -28
- warp/fem/domain.py +105 -14
- warp/fem/field/__init__.py +14 -3
- warp/fem/field/field.py +454 -11
- warp/fem/field/nodal_field.py +33 -18
- warp/fem/geometry/deformed_geometry.py +50 -15
- warp/fem/geometry/hexmesh.py +12 -24
- warp/fem/geometry/nanogrid.py +106 -31
- warp/fem/geometry/quadmesh_2d.py +6 -11
- warp/fem/geometry/tetmesh.py +103 -61
- warp/fem/geometry/trimesh_2d.py +98 -47
- warp/fem/integrate.py +231 -186
- warp/fem/operator.py +14 -9
- warp/fem/quadrature/pic_quadrature.py +35 -9
- warp/fem/quadrature/quadrature.py +119 -32
- warp/fem/space/basis_space.py +98 -22
- warp/fem/space/collocated_function_space.py +3 -1
- warp/fem/space/function_space.py +7 -2
- warp/fem/space/grid_2d_function_space.py +3 -3
- warp/fem/space/grid_3d_function_space.py +4 -4
- warp/fem/space/hexmesh_function_space.py +3 -2
- warp/fem/space/nanogrid_function_space.py +12 -14
- warp/fem/space/partition.py +45 -47
- warp/fem/space/restriction.py +19 -16
- warp/fem/space/shape/cube_shape_function.py +91 -3
- warp/fem/space/shape/shape_function.py +7 -0
- warp/fem/space/shape/square_shape_function.py +32 -0
- warp/fem/space/shape/tet_shape_function.py +11 -7
- warp/fem/space/shape/triangle_shape_function.py +10 -1
- warp/fem/space/topology.py +116 -42
- warp/fem/types.py +8 -1
- warp/fem/utils.py +301 -83
- warp/native/array.h +16 -0
- warp/native/builtin.h +0 -15
- warp/native/cuda_util.cpp +14 -6
- warp/native/exports.h +1348 -1308
- warp/native/quat.h +79 -0
- warp/native/rand.h +27 -4
- warp/native/sparse.cpp +83 -81
- warp/native/sparse.cu +381 -453
- warp/native/vec.h +64 -0
- warp/native/volume.cpp +40 -49
- warp/native/volume_builder.cu +2 -3
- warp/native/volume_builder.h +12 -17
- warp/native/warp.cu +3 -3
- warp/native/warp.h +69 -59
- warp/render/render_opengl.py +17 -9
- warp/sim/articulation.py +117 -17
- warp/sim/collide.py +35 -29
- warp/sim/model.py +123 -18
- warp/sim/render.py +3 -1
- warp/sparse.py +867 -203
- warp/stubs.py +312 -541
- warp/tape.py +29 -1
- warp/tests/disabled_kinematics.py +1 -1
- warp/tests/test_adam.py +1 -1
- warp/tests/test_arithmetic.py +1 -1
- warp/tests/test_array.py +58 -1
- warp/tests/test_array_reduce.py +1 -1
- warp/tests/test_async.py +1 -1
- warp/tests/test_atomic.py +1 -1
- warp/tests/test_bool.py +1 -1
- warp/tests/test_builtins_resolution.py +1 -1
- warp/tests/test_bvh.py +6 -1
- warp/tests/test_closest_point_edge_edge.py +1 -1
- warp/tests/test_codegen.py +91 -1
- warp/tests/test_compile_consts.py +1 -1
- warp/tests/test_conditional.py +1 -1
- warp/tests/test_copy.py +1 -1
- warp/tests/test_ctypes.py +1 -1
- warp/tests/test_dense.py +1 -1
- warp/tests/test_devices.py +1 -1
- warp/tests/test_dlpack.py +1 -1
- warp/tests/test_examples.py +33 -4
- warp/tests/test_fabricarray.py +5 -2
- warp/tests/test_fast_math.py +1 -1
- warp/tests/test_fem.py +213 -6
- warp/tests/test_fp16.py +1 -1
- warp/tests/test_func.py +1 -1
- warp/tests/test_future_annotations.py +90 -0
- warp/tests/test_generics.py +1 -1
- warp/tests/test_grad.py +1 -1
- warp/tests/test_grad_customs.py +1 -1
- warp/tests/test_grad_debug.py +247 -0
- warp/tests/test_hash_grid.py +6 -1
- warp/tests/test_implicit_init.py +354 -0
- warp/tests/test_import.py +1 -1
- warp/tests/test_indexedarray.py +1 -1
- warp/tests/test_intersect.py +1 -1
- warp/tests/test_jax.py +1 -1
- warp/tests/test_large.py +1 -1
- warp/tests/test_launch.py +1 -1
- warp/tests/test_lerp.py +1 -1
- warp/tests/test_linear_solvers.py +1 -1
- warp/tests/test_lvalue.py +1 -1
- warp/tests/test_marching_cubes.py +5 -2
- warp/tests/test_mat.py +34 -35
- warp/tests/test_mat_lite.py +2 -1
- warp/tests/test_mat_scalar_ops.py +1 -1
- warp/tests/test_math.py +1 -1
- warp/tests/test_matmul.py +20 -16
- warp/tests/test_matmul_lite.py +1 -1
- warp/tests/test_mempool.py +1 -1
- warp/tests/test_mesh.py +5 -2
- warp/tests/test_mesh_query_aabb.py +1 -1
- warp/tests/test_mesh_query_point.py +1 -1
- warp/tests/test_mesh_query_ray.py +1 -1
- warp/tests/test_mlp.py +1 -1
- warp/tests/test_model.py +1 -1
- warp/tests/test_module_hashing.py +77 -1
- warp/tests/test_modules_lite.py +1 -1
- warp/tests/test_multigpu.py +1 -1
- warp/tests/test_noise.py +1 -1
- warp/tests/test_operators.py +1 -1
- warp/tests/test_options.py +1 -1
- warp/tests/test_overwrite.py +542 -0
- warp/tests/test_peer.py +1 -1
- warp/tests/test_pinned.py +1 -1
- warp/tests/test_print.py +1 -1
- warp/tests/test_quat.py +15 -1
- warp/tests/test_rand.py +1 -1
- warp/tests/test_reload.py +1 -1
- warp/tests/test_rounding.py +1 -1
- warp/tests/test_runlength_encode.py +1 -1
- warp/tests/test_scalar_ops.py +95 -0
- warp/tests/test_sim_grad.py +1 -1
- warp/tests/test_sim_kinematics.py +1 -1
- warp/tests/test_smoothstep.py +1 -1
- warp/tests/test_sparse.py +82 -15
- warp/tests/test_spatial.py +1 -1
- warp/tests/test_special_values.py +2 -11
- warp/tests/test_streams.py +11 -1
- warp/tests/test_struct.py +1 -1
- warp/tests/test_tape.py +1 -1
- warp/tests/test_torch.py +194 -1
- warp/tests/test_transient_module.py +1 -1
- warp/tests/test_types.py +1 -1
- warp/tests/test_utils.py +1 -1
- warp/tests/test_vec.py +15 -63
- warp/tests/test_vec_lite.py +2 -1
- warp/tests/test_vec_scalar_ops.py +65 -1
- warp/tests/test_verify_fp.py +1 -1
- warp/tests/test_volume.py +28 -2
- warp/tests/test_volume_write.py +1 -1
- warp/tests/unittest_serial.py +1 -1
- warp/tests/unittest_suites.py +9 -1
- warp/tests/walkthrough_debug.py +1 -1
- warp/thirdparty/unittest_parallel.py +2 -5
- warp/torch.py +103 -41
- warp/types.py +341 -224
- warp/utils.py +11 -2
- {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/METADATA +99 -46
- warp_lang-1.3.1.dist-info/RECORD +368 -0
- warp/examples/fem/bsr_utils.py +0 -378
- warp/examples/fem/mesh_utils.py +0 -133
- warp/examples/fem/plot_utils.py +0 -292
- warp_lang-1.2.2.dist-info/RECORD +0 -359
- {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/LICENSE.md +0 -0
- {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/WHEEL +0 -0
- {warp_lang-1.2.2.dist-info → warp_lang-1.3.1.dist-info}/top_level.txt +0 -0
warp/stubs.py
CHANGED
|
@@ -23,7 +23,7 @@ FabricArray = Generic[DType]
|
|
|
23
23
|
IndexedFabricArray = Generic[DType]
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
from warp.types import array, array1d, array2d, array3d, array4d, constant
|
|
26
|
+
from warp.types import array, array1d, array2d, array3d, array4d, constant, from_ptr
|
|
27
27
|
from warp.types import indexedarray, indexedarray1d, indexedarray2d, indexedarray3d, indexedarray4d
|
|
28
28
|
from warp.fabric import fabricarray, fabricarrayarray, indexedfabricarray, indexedfabricarrayarray
|
|
29
29
|
|
|
@@ -40,9 +40,9 @@ from warp.types import spatial_vector, spatial_vectorh, spatial_vectorf, spatial
|
|
|
40
40
|
from warp.types import spatial_matrix, spatial_matrixh, spatial_matrixf, spatial_matrixd
|
|
41
41
|
|
|
42
42
|
from warp.types import Bvh, Mesh, HashGrid, Volume, MarchingCubes
|
|
43
|
-
from warp.types import
|
|
43
|
+
from warp.types import BvhQuery, HashGridQuery, MeshQueryAABB, MeshQueryPoint, MeshQueryRay
|
|
44
44
|
|
|
45
|
-
from warp.types import matmul, adj_matmul, batched_matmul, adj_batched_matmul
|
|
45
|
+
from warp.types import matmul, adj_matmul, batched_matmul, adj_batched_matmul
|
|
46
46
|
|
|
47
47
|
from warp.types import vector as vec
|
|
48
48
|
from warp.types import matrix as mat
|
|
@@ -108,54 +108,56 @@ from warp.jax import device_from_jax, device_to_jax
|
|
|
108
108
|
|
|
109
109
|
from warp.dlpack import from_dlpack, to_dlpack
|
|
110
110
|
|
|
111
|
+
from warp.build import clear_kernel_cache
|
|
112
|
+
|
|
111
113
|
from warp.constants import *
|
|
112
114
|
|
|
113
115
|
from . import builtins
|
|
114
116
|
|
|
115
|
-
import warp.config
|
|
117
|
+
import warp.config as config
|
|
116
118
|
|
|
117
|
-
__version__ =
|
|
119
|
+
__version__ = config.version
|
|
118
120
|
|
|
119
121
|
|
|
120
122
|
@over
|
|
121
|
-
def min(
|
|
123
|
+
def min(a: Scalar, b: Scalar) -> Scalar:
|
|
122
124
|
"""Return the minimum of two scalars."""
|
|
123
125
|
...
|
|
124
126
|
|
|
125
127
|
|
|
126
128
|
@over
|
|
127
|
-
def min(
|
|
129
|
+
def min(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
128
130
|
"""Return the element-wise minimum of two vectors."""
|
|
129
131
|
...
|
|
130
132
|
|
|
131
133
|
|
|
132
134
|
@over
|
|
133
|
-
def min(
|
|
134
|
-
"""Return the minimum element of a vector ``
|
|
135
|
+
def min(a: Vector[Any, Scalar]) -> Scalar:
|
|
136
|
+
"""Return the minimum element of a vector ``a``."""
|
|
135
137
|
...
|
|
136
138
|
|
|
137
139
|
|
|
138
140
|
@over
|
|
139
|
-
def max(
|
|
141
|
+
def max(a: Scalar, b: Scalar) -> Scalar:
|
|
140
142
|
"""Return the maximum of two scalars."""
|
|
141
143
|
...
|
|
142
144
|
|
|
143
145
|
|
|
144
146
|
@over
|
|
145
|
-
def max(
|
|
147
|
+
def max(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
146
148
|
"""Return the element-wise maximum of two vectors."""
|
|
147
149
|
...
|
|
148
150
|
|
|
149
151
|
|
|
150
152
|
@over
|
|
151
|
-
def max(
|
|
152
|
-
"""Return the maximum element of a vector ``
|
|
153
|
+
def max(a: Vector[Any, Scalar]) -> Scalar:
|
|
154
|
+
"""Return the maximum element of a vector ``a``."""
|
|
153
155
|
...
|
|
154
156
|
|
|
155
157
|
|
|
156
158
|
@over
|
|
157
|
-
def clamp(x: Scalar,
|
|
158
|
-
"""Clamp the value of ``x`` to the range [
|
|
159
|
+
def clamp(x: Scalar, low: Scalar, high: Scalar) -> Scalar:
|
|
160
|
+
"""Clamp the value of ``x`` to the range [low, high]."""
|
|
159
161
|
...
|
|
160
162
|
|
|
161
163
|
|
|
@@ -165,12 +167,24 @@ def abs(x: Scalar) -> Scalar:
|
|
|
165
167
|
...
|
|
166
168
|
|
|
167
169
|
|
|
170
|
+
@over
|
|
171
|
+
def abs(x: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
172
|
+
"""Return the absolute values of the elements of ``x``."""
|
|
173
|
+
...
|
|
174
|
+
|
|
175
|
+
|
|
168
176
|
@over
|
|
169
177
|
def sign(x: Scalar) -> Scalar:
|
|
170
178
|
"""Return -1 if ``x`` < 0, return 1 otherwise."""
|
|
171
179
|
...
|
|
172
180
|
|
|
173
181
|
|
|
182
|
+
@over
|
|
183
|
+
def sign(x: Vector[Any, Scalar]) -> Scalar:
|
|
184
|
+
"""Return -1 for the negative elements of ``x``, and 1 otherwise."""
|
|
185
|
+
...
|
|
186
|
+
|
|
187
|
+
|
|
174
188
|
@over
|
|
175
189
|
def step(x: Scalar) -> Scalar:
|
|
176
190
|
"""Return 1.0 if ``x`` < 0.0, return 0.0 otherwise."""
|
|
@@ -321,7 +335,7 @@ def trunc(x: Float) -> Float:
|
|
|
321
335
|
"""Return the nearest integer that is closer to zero than ``x``.
|
|
322
336
|
|
|
323
337
|
In other words, it discards the fractional part of ``x``.
|
|
324
|
-
It is similar to casting ``float(int(
|
|
338
|
+
It is similar to casting ``float(int(a))``, but preserves the negative sign when ``x`` is in the range [-0.0, -1.0).
|
|
325
339
|
Equivalent to :func:`numpy.trunc()` and :func:`numpy.fix()`.
|
|
326
340
|
"""
|
|
327
341
|
...
|
|
@@ -341,349 +355,349 @@ def ceil(x: Float) -> Float:
|
|
|
341
355
|
|
|
342
356
|
@over
|
|
343
357
|
def frac(x: Float) -> Float:
|
|
344
|
-
"""Retrieve the fractional part of x
|
|
358
|
+
"""Retrieve the fractional part of ``x``.
|
|
345
359
|
|
|
346
|
-
In other words, it discards the integer part of x and is equivalent to ``x - trunc(x)``.
|
|
360
|
+
In other words, it discards the integer part of ``x`` and is equivalent to ``x - trunc(x)``.
|
|
347
361
|
"""
|
|
348
362
|
...
|
|
349
363
|
|
|
350
364
|
|
|
351
365
|
@over
|
|
352
|
-
def isfinite(
|
|
353
|
-
"""Return ``True`` if
|
|
366
|
+
def isfinite(a: Scalar) -> bool:
|
|
367
|
+
"""Return ``True`` if ``a`` is a finite number, otherwise return ``False``."""
|
|
354
368
|
...
|
|
355
369
|
|
|
356
370
|
|
|
357
371
|
@over
|
|
358
|
-
def isfinite(
|
|
359
|
-
"""Return ``True`` if all elements of the vector ``
|
|
372
|
+
def isfinite(a: Vector[Any, Scalar]) -> bool:
|
|
373
|
+
"""Return ``True`` if all elements of the vector ``a`` are finite, otherwise return ``False``."""
|
|
360
374
|
...
|
|
361
375
|
|
|
362
376
|
|
|
363
377
|
@over
|
|
364
|
-
def isfinite(
|
|
365
|
-
"""Return ``True`` if all elements of the quaternion ``
|
|
378
|
+
def isfinite(a: Quaternion[Scalar]) -> bool:
|
|
379
|
+
"""Return ``True`` if all elements of the quaternion ``a`` are finite, otherwise return ``False``."""
|
|
366
380
|
...
|
|
367
381
|
|
|
368
382
|
|
|
369
383
|
@over
|
|
370
|
-
def isfinite(
|
|
371
|
-
"""Return ``True`` if all elements of the matrix ``
|
|
384
|
+
def isfinite(a: Matrix[Any, Any, Scalar]) -> bool:
|
|
385
|
+
"""Return ``True`` if all elements of the matrix ``a`` are finite, otherwise return ``False``."""
|
|
372
386
|
...
|
|
373
387
|
|
|
374
388
|
|
|
375
389
|
@over
|
|
376
|
-
def isnan(
|
|
377
|
-
"""Return ``True`` if ``
|
|
390
|
+
def isnan(a: Scalar) -> bool:
|
|
391
|
+
"""Return ``True`` if ``a`` is NaN, otherwise return ``False``."""
|
|
378
392
|
...
|
|
379
393
|
|
|
380
394
|
|
|
381
395
|
@over
|
|
382
|
-
def isnan(
|
|
383
|
-
"""Return ``True`` if any element of the vector ``
|
|
396
|
+
def isnan(a: Vector[Any, Scalar]) -> bool:
|
|
397
|
+
"""Return ``True`` if any element of the vector ``a`` is NaN, otherwise return ``False``."""
|
|
384
398
|
...
|
|
385
399
|
|
|
386
400
|
|
|
387
401
|
@over
|
|
388
|
-
def isnan(
|
|
389
|
-
"""Return ``True`` if any element of the quaternion ``
|
|
402
|
+
def isnan(a: Quaternion[Scalar]) -> bool:
|
|
403
|
+
"""Return ``True`` if any element of the quaternion ``a`` is NaN, otherwise return ``False``."""
|
|
390
404
|
...
|
|
391
405
|
|
|
392
406
|
|
|
393
407
|
@over
|
|
394
|
-
def isnan(
|
|
395
|
-
"""Return ``True`` if any element of the matrix ``
|
|
408
|
+
def isnan(a: Matrix[Any, Any, Scalar]) -> bool:
|
|
409
|
+
"""Return ``True`` if any element of the matrix ``a`` is NaN, otherwise return ``False``."""
|
|
396
410
|
...
|
|
397
411
|
|
|
398
412
|
|
|
399
413
|
@over
|
|
400
|
-
def isinf(
|
|
401
|
-
"""Return ``True`` if
|
|
414
|
+
def isinf(a: Scalar) -> bool:
|
|
415
|
+
"""Return ``True`` if ``a`` is positive or negative infinity, otherwise return ``False``."""
|
|
402
416
|
...
|
|
403
417
|
|
|
404
418
|
|
|
405
419
|
@over
|
|
406
|
-
def isinf(
|
|
407
|
-
"""Return ``True`` if any element of the vector ``
|
|
420
|
+
def isinf(a: Vector[Any, Scalar]) -> bool:
|
|
421
|
+
"""Return ``True`` if any element of the vector ``a`` is positive or negative infinity, otherwise return ``False``."""
|
|
408
422
|
...
|
|
409
423
|
|
|
410
424
|
|
|
411
425
|
@over
|
|
412
|
-
def isinf(
|
|
413
|
-
"""Return ``True`` if any element of the quaternion ``
|
|
426
|
+
def isinf(a: Quaternion[Scalar]) -> bool:
|
|
427
|
+
"""Return ``True`` if any element of the quaternion ``a`` is positive or negative infinity, otherwise return ``False``."""
|
|
414
428
|
...
|
|
415
429
|
|
|
416
430
|
|
|
417
431
|
@over
|
|
418
|
-
def isinf(
|
|
419
|
-
"""Return ``True`` if any element of the matrix ``
|
|
432
|
+
def isinf(a: Matrix[Any, Any, Scalar]) -> bool:
|
|
433
|
+
"""Return ``True`` if any element of the matrix ``a`` is positive or negative infinity, otherwise return ``False``."""
|
|
420
434
|
...
|
|
421
435
|
|
|
422
436
|
|
|
423
437
|
@over
|
|
424
|
-
def dot(
|
|
438
|
+
def dot(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Scalar:
|
|
425
439
|
"""Compute the dot product between two vectors."""
|
|
426
440
|
...
|
|
427
441
|
|
|
428
442
|
|
|
429
443
|
@over
|
|
430
|
-
def dot(
|
|
444
|
+
def dot(a: Quaternion[Float], b: Quaternion[Float]) -> Float:
|
|
431
445
|
"""Compute the dot product between two quaternions."""
|
|
432
446
|
...
|
|
433
447
|
|
|
434
448
|
|
|
435
449
|
@over
|
|
436
|
-
def ddot(
|
|
450
|
+
def ddot(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]) -> Scalar:
|
|
437
451
|
"""Compute the double dot product between two matrices."""
|
|
438
452
|
...
|
|
439
453
|
|
|
440
454
|
|
|
441
455
|
@over
|
|
442
|
-
def argmin(
|
|
443
|
-
"""Return the index of the minimum element of a vector ``
|
|
456
|
+
def argmin(a: Vector[Any, Scalar]) -> uint32:
|
|
457
|
+
"""Return the index of the minimum element of a vector ``a``."""
|
|
444
458
|
...
|
|
445
459
|
|
|
446
460
|
|
|
447
461
|
@over
|
|
448
|
-
def argmax(
|
|
449
|
-
"""Return the index of the maximum element of a vector ``
|
|
462
|
+
def argmax(a: Vector[Any, Scalar]) -> uint32:
|
|
463
|
+
"""Return the index of the maximum element of a vector ``a``."""
|
|
450
464
|
...
|
|
451
465
|
|
|
452
466
|
|
|
453
467
|
@over
|
|
454
|
-
def outer(
|
|
455
|
-
"""Compute the outer product ``
|
|
468
|
+
def outer(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
469
|
+
"""Compute the outer product ``a*b^T`` for two vectors."""
|
|
456
470
|
...
|
|
457
471
|
|
|
458
472
|
|
|
459
473
|
@over
|
|
460
|
-
def cross(
|
|
474
|
+
def cross(a: Vector[3, Scalar], b: Vector[3, Scalar]) -> Vector[3, Scalar]:
|
|
461
475
|
"""Compute the cross product of two 3D vectors."""
|
|
462
476
|
...
|
|
463
477
|
|
|
464
478
|
|
|
465
479
|
@over
|
|
466
|
-
def skew(
|
|
467
|
-
"""Compute the skew-symmetric 3x3 matrix for a 3D vector ``
|
|
480
|
+
def skew(vec: Vector[3, Scalar]):
|
|
481
|
+
"""Compute the skew-symmetric 3x3 matrix for a 3D vector ``vec``."""
|
|
468
482
|
...
|
|
469
483
|
|
|
470
484
|
|
|
471
485
|
@over
|
|
472
|
-
def length(
|
|
473
|
-
"""Compute the length of a floating-point vector ``
|
|
486
|
+
def length(a: Vector[Any, Float]) -> Float:
|
|
487
|
+
"""Compute the length of a floating-point vector ``a``."""
|
|
474
488
|
...
|
|
475
489
|
|
|
476
490
|
|
|
477
491
|
@over
|
|
478
|
-
def length(
|
|
479
|
-
"""Compute the length of a quaternion ``
|
|
492
|
+
def length(a: Quaternion[Float]) -> Float:
|
|
493
|
+
"""Compute the length of a quaternion ``a``."""
|
|
480
494
|
...
|
|
481
495
|
|
|
482
496
|
|
|
483
497
|
@over
|
|
484
|
-
def length_sq(
|
|
485
|
-
"""Compute the squared length of a vector ``
|
|
498
|
+
def length_sq(a: Vector[Any, Scalar]) -> Scalar:
|
|
499
|
+
"""Compute the squared length of a vector ``a``."""
|
|
486
500
|
...
|
|
487
501
|
|
|
488
502
|
|
|
489
503
|
@over
|
|
490
|
-
def length_sq(
|
|
491
|
-
"""Compute the squared length of a quaternion ``
|
|
504
|
+
def length_sq(a: Quaternion[Scalar]) -> Scalar:
|
|
505
|
+
"""Compute the squared length of a quaternion ``a``."""
|
|
492
506
|
...
|
|
493
507
|
|
|
494
508
|
|
|
495
509
|
@over
|
|
496
|
-
def normalize(
|
|
497
|
-
"""Compute the normalized value of ``
|
|
510
|
+
def normalize(a: Vector[Any, Float]) -> Vector[Any, Float]:
|
|
511
|
+
"""Compute the normalized value of ``a``. If ``length(a)`` is 0 then the zero vector is returned."""
|
|
498
512
|
...
|
|
499
513
|
|
|
500
514
|
|
|
501
515
|
@over
|
|
502
|
-
def normalize(
|
|
503
|
-
"""Compute the normalized value of ``
|
|
516
|
+
def normalize(a: Quaternion[Float]) -> Quaternion[Float]:
|
|
517
|
+
"""Compute the normalized value of ``a``. If ``length(a)`` is 0, then the zero quaternion is returned."""
|
|
504
518
|
...
|
|
505
519
|
|
|
506
520
|
|
|
507
521
|
@over
|
|
508
|
-
def transpose(
|
|
509
|
-
"""Return the transpose of the matrix ``
|
|
522
|
+
def transpose(a: Matrix[Any, Any, Scalar]):
|
|
523
|
+
"""Return the transpose of the matrix ``a``."""
|
|
510
524
|
...
|
|
511
525
|
|
|
512
526
|
|
|
513
527
|
@over
|
|
514
|
-
def inverse(
|
|
515
|
-
"""Return the inverse of a 2x2 matrix ``
|
|
528
|
+
def inverse(a: Matrix[2, 2, Float]) -> Matrix[Any, Any, Float]:
|
|
529
|
+
"""Return the inverse of a 2x2 matrix ``a``."""
|
|
516
530
|
...
|
|
517
531
|
|
|
518
532
|
|
|
519
533
|
@over
|
|
520
|
-
def inverse(
|
|
521
|
-
"""Return the inverse of a 3x3 matrix ``
|
|
534
|
+
def inverse(a: Matrix[3, 3, Float]) -> Matrix[Any, Any, Float]:
|
|
535
|
+
"""Return the inverse of a 3x3 matrix ``a``."""
|
|
522
536
|
...
|
|
523
537
|
|
|
524
538
|
|
|
525
539
|
@over
|
|
526
|
-
def inverse(
|
|
527
|
-
"""Return the inverse of a 4x4 matrix ``
|
|
540
|
+
def inverse(a: Matrix[4, 4, Float]) -> Matrix[Any, Any, Float]:
|
|
541
|
+
"""Return the inverse of a 4x4 matrix ``a``."""
|
|
528
542
|
...
|
|
529
543
|
|
|
530
544
|
|
|
531
545
|
@over
|
|
532
|
-
def determinant(
|
|
533
|
-
"""Return the determinant of a 2x2 matrix ``
|
|
546
|
+
def determinant(a: Matrix[2, 2, Float]) -> Float:
|
|
547
|
+
"""Return the determinant of a 2x2 matrix ``a``."""
|
|
534
548
|
...
|
|
535
549
|
|
|
536
550
|
|
|
537
551
|
@over
|
|
538
|
-
def determinant(
|
|
539
|
-
"""Return the determinant of a 3x3 matrix ``
|
|
552
|
+
def determinant(a: Matrix[3, 3, Float]) -> Float:
|
|
553
|
+
"""Return the determinant of a 3x3 matrix ``a``."""
|
|
540
554
|
...
|
|
541
555
|
|
|
542
556
|
|
|
543
557
|
@over
|
|
544
|
-
def determinant(
|
|
545
|
-
"""Return the determinant of a 4x4 matrix ``
|
|
558
|
+
def determinant(a: Matrix[4, 4, Float]) -> Float:
|
|
559
|
+
"""Return the determinant of a 4x4 matrix ``a``."""
|
|
546
560
|
...
|
|
547
561
|
|
|
548
562
|
|
|
549
563
|
@over
|
|
550
|
-
def trace(
|
|
551
|
-
"""Return the trace of the matrix ``
|
|
564
|
+
def trace(a: Matrix[Any, Any, Scalar]) -> Scalar:
|
|
565
|
+
"""Return the trace of the matrix ``a``."""
|
|
552
566
|
...
|
|
553
567
|
|
|
554
568
|
|
|
555
569
|
@over
|
|
556
|
-
def diag(
|
|
557
|
-
"""Returns a matrix with the components of the vector ``
|
|
570
|
+
def diag(vec: Vector[Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
571
|
+
"""Returns a matrix with the components of the vector ``vec`` on the diagonal."""
|
|
558
572
|
...
|
|
559
573
|
|
|
560
574
|
|
|
561
575
|
@over
|
|
562
|
-
def get_diag(
|
|
563
|
-
"""Returns a vector containing the diagonal elements of the square matrix ``
|
|
576
|
+
def get_diag(mat: Matrix[Any, Any, Scalar]) -> Vector[Any, Scalar]:
|
|
577
|
+
"""Returns a vector containing the diagonal elements of the square matrix ``mat``."""
|
|
564
578
|
...
|
|
565
579
|
|
|
566
580
|
|
|
567
581
|
@over
|
|
568
|
-
def cw_mul(
|
|
582
|
+
def cw_mul(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
569
583
|
"""Component-wise multiplication of two vectors."""
|
|
570
584
|
...
|
|
571
585
|
|
|
572
586
|
|
|
573
587
|
@over
|
|
574
|
-
def cw_mul(
|
|
588
|
+
def cw_mul(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
575
589
|
"""Component-wise multiplication of two matrices."""
|
|
576
590
|
...
|
|
577
591
|
|
|
578
592
|
|
|
579
593
|
@over
|
|
580
|
-
def cw_div(
|
|
594
|
+
def cw_div(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
581
595
|
"""Component-wise division of two vectors."""
|
|
582
596
|
...
|
|
583
597
|
|
|
584
598
|
|
|
585
599
|
@over
|
|
586
|
-
def cw_div(
|
|
600
|
+
def cw_div(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
587
601
|
"""Component-wise division of two matrices."""
|
|
588
602
|
...
|
|
589
603
|
|
|
590
604
|
|
|
591
605
|
@over
|
|
592
|
-
def quat_identity() -> quatf:
|
|
606
|
+
def quat_identity(dtype: Float) -> quatf:
|
|
593
607
|
"""Construct an identity quaternion with zero imaginary part and real part of 1.0"""
|
|
594
608
|
...
|
|
595
609
|
|
|
596
610
|
|
|
597
611
|
@over
|
|
598
|
-
def quat_from_axis_angle(axis: Vector[3, Float], angle: Float) -> Quaternion[
|
|
612
|
+
def quat_from_axis_angle(axis: Vector[3, Float], angle: Float) -> Quaternion[Float]:
|
|
599
613
|
"""Construct a quaternion representing a rotation of angle radians around the given axis."""
|
|
600
614
|
...
|
|
601
615
|
|
|
602
616
|
|
|
603
617
|
@over
|
|
604
|
-
def quat_to_axis_angle(
|
|
618
|
+
def quat_to_axis_angle(quat: Quaternion[Float], axis: Vector[3, Float], angle: Float):
|
|
605
619
|
"""Extract the rotation axis and angle radians a quaternion represents."""
|
|
606
620
|
...
|
|
607
621
|
|
|
608
622
|
|
|
609
623
|
@over
|
|
610
|
-
def quat_from_matrix(
|
|
624
|
+
def quat_from_matrix(mat: Matrix[3, 3, Float]) -> Quaternion[Float]:
|
|
611
625
|
"""Construct a quaternion from a 3x3 matrix."""
|
|
612
626
|
...
|
|
613
627
|
|
|
614
628
|
|
|
615
629
|
@over
|
|
616
|
-
def quat_rpy(roll: Float, pitch: Float, yaw: Float) -> Quaternion[
|
|
630
|
+
def quat_rpy(roll: Float, pitch: Float, yaw: Float) -> Quaternion[Float]:
|
|
617
631
|
"""Construct a quaternion representing a combined roll (z), pitch (x), yaw rotations (y) in radians."""
|
|
618
632
|
...
|
|
619
633
|
|
|
620
634
|
|
|
621
635
|
@over
|
|
622
|
-
def quat_inverse(
|
|
636
|
+
def quat_inverse(quat: Quaternion[Float]) -> Quaternion[Float]:
|
|
623
637
|
"""Compute quaternion conjugate."""
|
|
624
638
|
...
|
|
625
639
|
|
|
626
640
|
|
|
627
641
|
@over
|
|
628
|
-
def quat_rotate(
|
|
642
|
+
def quat_rotate(quat: Quaternion[Float], vec: Vector[3, Float]) -> Vector[3, Float]:
|
|
629
643
|
"""Rotate a vector by a quaternion."""
|
|
630
644
|
...
|
|
631
645
|
|
|
632
646
|
|
|
633
647
|
@over
|
|
634
|
-
def quat_rotate_inv(
|
|
648
|
+
def quat_rotate_inv(quat: Quaternion[Float], vec: Vector[3, Float]) -> Vector[3, Float]:
|
|
635
649
|
"""Rotate a vector by the inverse of a quaternion."""
|
|
636
650
|
...
|
|
637
651
|
|
|
638
652
|
|
|
639
653
|
@over
|
|
640
|
-
def quat_slerp(
|
|
654
|
+
def quat_slerp(a: Quaternion[Float], b: Quaternion[Float], t: Float) -> Quaternion[Float]:
|
|
641
655
|
"""Linearly interpolate between two quaternions."""
|
|
642
656
|
...
|
|
643
657
|
|
|
644
658
|
|
|
645
659
|
@over
|
|
646
|
-
def quat_to_matrix(
|
|
660
|
+
def quat_to_matrix(quat: Quaternion[Float]) -> Matrix[3, 3, Float]:
|
|
647
661
|
"""Convert a quaternion to a 3x3 rotation matrix."""
|
|
648
662
|
...
|
|
649
663
|
|
|
650
664
|
|
|
651
665
|
@over
|
|
652
|
-
def transform_identity() -> transformf:
|
|
666
|
+
def transform_identity(dtype: Float) -> transformf:
|
|
653
667
|
"""Construct an identity transform with zero translation and identity rotation."""
|
|
654
668
|
...
|
|
655
669
|
|
|
656
670
|
|
|
657
671
|
@over
|
|
658
|
-
def transform_get_translation(
|
|
659
|
-
"""Return the translational part of a transform ``
|
|
672
|
+
def transform_get_translation(xform: Transformation[Float]) -> Vector[3, Float]:
|
|
673
|
+
"""Return the translational part of a transform ``xform``."""
|
|
660
674
|
...
|
|
661
675
|
|
|
662
676
|
|
|
663
677
|
@over
|
|
664
|
-
def transform_get_rotation(
|
|
665
|
-
"""Return the rotational part of a transform ``
|
|
678
|
+
def transform_get_rotation(xform: Transformation[Float]) -> Quaternion[Float]:
|
|
679
|
+
"""Return the rotational part of a transform ``xform``."""
|
|
666
680
|
...
|
|
667
681
|
|
|
668
682
|
|
|
669
683
|
@over
|
|
670
|
-
def transform_multiply(a: Transformation[Float], b: Transformation[Float]) -> Transformation[
|
|
684
|
+
def transform_multiply(a: Transformation[Float], b: Transformation[Float]) -> Transformation[Float]:
|
|
671
685
|
"""Multiply two rigid body transformations together."""
|
|
672
686
|
...
|
|
673
687
|
|
|
674
688
|
|
|
675
689
|
@over
|
|
676
|
-
def transform_point(
|
|
677
|
-
"""Apply the transform to a point ``
|
|
690
|
+
def transform_point(xform: Transformation[Float], point: Vector[3, Float]) -> Vector[3, Float]:
|
|
691
|
+
"""Apply the transform to a point ``point`` treating the homogeneous coordinate as w=1 (translation and rotation)."""
|
|
678
692
|
...
|
|
679
693
|
|
|
680
694
|
|
|
681
695
|
@over
|
|
682
|
-
def transform_point(
|
|
683
|
-
"""Apply the transform to a point ``
|
|
696
|
+
def transform_point(mat: Matrix[4, 4, Float], point: Vector[3, Float]) -> Vector[3, Float]:
|
|
697
|
+
"""Apply the transform to a point ``point`` treating the homogeneous coordinate as w=1.
|
|
684
698
|
|
|
685
|
-
The transformation is applied treating ``
|
|
686
|
-
Note this is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T =
|
|
699
|
+
The transformation is applied treating ``point`` as a column vector, e.g.: ``y = mat*point``.
|
|
700
|
+
Note this is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T = point^T*mat^T``.
|
|
687
701
|
If the transform is coming from a library that uses row-vectors, then users should transpose the transformation
|
|
688
702
|
matrix before calling this method.
|
|
689
703
|
"""
|
|
@@ -691,17 +705,17 @@ def transform_point(m: Matrix[4, 4, Scalar], p: Vector[3, Scalar]) -> Vector[3,
|
|
|
691
705
|
|
|
692
706
|
|
|
693
707
|
@over
|
|
694
|
-
def transform_vector(
|
|
695
|
-
"""Apply the transform to a vector ``
|
|
708
|
+
def transform_vector(xform: Transformation[Float], vec: Vector[3, Float]) -> Vector[3, Float]:
|
|
709
|
+
"""Apply the transform to a vector ``vec`` treating the homogeneous coordinate as w=0 (rotation only)."""
|
|
696
710
|
...
|
|
697
711
|
|
|
698
712
|
|
|
699
713
|
@over
|
|
700
|
-
def transform_vector(
|
|
701
|
-
"""Apply the transform to a vector ``
|
|
714
|
+
def transform_vector(mat: Matrix[4, 4, Float], vec: Vector[3, Float]) -> Vector[3, Float]:
|
|
715
|
+
"""Apply the transform to a vector ``vec`` treating the homogeneous coordinate as w=0.
|
|
702
716
|
|
|
703
|
-
The transformation is applied treating ``
|
|
704
|
-
note this is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T =
|
|
717
|
+
The transformation is applied treating ``vec`` as a column vector, e.g.: ``y = mat*vec``
|
|
718
|
+
note this is in contrast to some libraries, notably USD, which applies transforms to row vectors, ``y^T = vec^T*mat^T``.
|
|
705
719
|
If the transform is coming from a library that uses row-vectors, then users should transpose the transformation
|
|
706
720
|
matrix before calling this method.
|
|
707
721
|
"""
|
|
@@ -709,13 +723,13 @@ def transform_vector(m: Matrix[4, 4, Scalar], v: Vector[3, Scalar]) -> Vector[3,
|
|
|
709
723
|
|
|
710
724
|
|
|
711
725
|
@over
|
|
712
|
-
def transform_inverse(
|
|
713
|
-
"""Compute the inverse of the transformation ``
|
|
726
|
+
def transform_inverse(xform: Transformation[Float]) -> Transformation[Float]:
|
|
727
|
+
"""Compute the inverse of the transformation ``xform``."""
|
|
714
728
|
...
|
|
715
729
|
|
|
716
730
|
|
|
717
731
|
@over
|
|
718
|
-
def spatial_dot(a: Vector[6, Float], b: Vector[6, Float]) ->
|
|
732
|
+
def spatial_dot(a: Vector[6, Float], b: Vector[6, Float]) -> Float:
|
|
719
733
|
"""Compute the dot product of two 6D screw vectors."""
|
|
720
734
|
...
|
|
721
735
|
|
|
@@ -733,13 +747,13 @@ def spatial_cross_dual(a: Vector[6, Float], b: Vector[6, Float]) -> Vector[6, Fl
|
|
|
733
747
|
|
|
734
748
|
|
|
735
749
|
@over
|
|
736
|
-
def spatial_top(
|
|
750
|
+
def spatial_top(svec: Vector[6, Float]):
|
|
737
751
|
"""Return the top (first) part of a 6D screw vector."""
|
|
738
752
|
...
|
|
739
753
|
|
|
740
754
|
|
|
741
755
|
@over
|
|
742
|
-
def spatial_bottom(
|
|
756
|
+
def spatial_bottom(svec: Vector[6, Float]):
|
|
743
757
|
"""Return the bottom (second) part of a 6D screw vector."""
|
|
744
758
|
...
|
|
745
759
|
|
|
@@ -791,249 +805,6 @@ def mlp(
|
|
|
791
805
|
...
|
|
792
806
|
|
|
793
807
|
|
|
794
|
-
@over
|
|
795
|
-
def bvh_query_aabb(id: uint64, lower: vec3f, upper: vec3f) -> bvh_query_t:
|
|
796
|
-
"""Construct an axis-aligned bounding box query against a BVH object.
|
|
797
|
-
|
|
798
|
-
This query can be used to iterate over all bounds inside a BVH.
|
|
799
|
-
|
|
800
|
-
:param id: The BVH identifier
|
|
801
|
-
:param lower: The lower bound of the bounding box in BVH space
|
|
802
|
-
:param upper: The upper bound of the bounding box in BVH space
|
|
803
|
-
"""
|
|
804
|
-
...
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
@over
|
|
808
|
-
def bvh_query_ray(id: uint64, start: vec3f, dir: vec3f) -> bvh_query_t:
|
|
809
|
-
"""Construct a ray query against a BVH object.
|
|
810
|
-
|
|
811
|
-
This query can be used to iterate over all bounds that intersect the ray.
|
|
812
|
-
|
|
813
|
-
:param id: The BVH identifier
|
|
814
|
-
:param start: The start of the ray in BVH space
|
|
815
|
-
:param dir: The direction of the ray in BVH space
|
|
816
|
-
"""
|
|
817
|
-
...
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
@over
|
|
821
|
-
def bvh_query_next(query: bvh_query_t, index: int32) -> bool:
|
|
822
|
-
"""Move to the next bound returned by the query.
|
|
823
|
-
The index of the current bound is stored in ``index``, returns ``False`` if there are no more overlapping bound.
|
|
824
|
-
"""
|
|
825
|
-
...
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
@over
|
|
829
|
-
def mesh_query_point(id: uint64, point: vec3f, max_dist: float32) -> mesh_query_point_t:
|
|
830
|
-
"""Computes the closest point on the :class:`Mesh` with identifier ``id`` to the given ``point`` in space.
|
|
831
|
-
|
|
832
|
-
Identifies the sign of the distance using additional ray-casts to determine if the point is inside or outside.
|
|
833
|
-
This method is relatively robust, but does increase computational cost.
|
|
834
|
-
See below for additional sign determination methods.
|
|
835
|
-
|
|
836
|
-
:param id: The mesh identifier
|
|
837
|
-
:param point: The point in space to query
|
|
838
|
-
:param max_dist: Mesh faces above this distance will not be considered by the query
|
|
839
|
-
"""
|
|
840
|
-
...
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
@over
|
|
844
|
-
def mesh_query_point_no_sign(id: uint64, point: vec3f, max_dist: float32) -> mesh_query_point_t:
|
|
845
|
-
"""Computes the closest point on the :class:`Mesh` with identifier ``id`` to the given ``point`` in space.
|
|
846
|
-
|
|
847
|
-
This method does not compute the sign of the point (inside/outside) which makes it faster than other point query methods.
|
|
848
|
-
|
|
849
|
-
:param id: The mesh identifier
|
|
850
|
-
:param point: The point in space to query
|
|
851
|
-
:param max_dist: Mesh faces above this distance will not be considered by the query
|
|
852
|
-
"""
|
|
853
|
-
...
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
@over
|
|
857
|
-
def mesh_query_furthest_point_no_sign(id: uint64, point: vec3f, min_dist: float32) -> mesh_query_point_t:
|
|
858
|
-
"""Computes the furthest point on the mesh with identifier `id` to the given point in space.
|
|
859
|
-
|
|
860
|
-
This method does not compute the sign of the point (inside/outside).
|
|
861
|
-
|
|
862
|
-
:param id: The mesh identifier
|
|
863
|
-
:param point: The point in space to query
|
|
864
|
-
:param min_dist: Mesh faces below this distance will not be considered by the query
|
|
865
|
-
"""
|
|
866
|
-
...
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
@over
|
|
870
|
-
def mesh_query_point_sign_normal(id: uint64, point: vec3f, max_dist: float32, epsilon: float32) -> mesh_query_point_t:
|
|
871
|
-
"""Computes the closest point on the :class:`Mesh` with identifier ``id`` to the given ``point`` in space.
|
|
872
|
-
|
|
873
|
-
Identifies the sign of the distance (inside/outside) using the angle-weighted pseudo normal.
|
|
874
|
-
This approach to sign determination is robust for well conditioned meshes that are watertight and non-self intersecting.
|
|
875
|
-
It is also comparatively fast to compute.
|
|
876
|
-
|
|
877
|
-
:param id: The mesh identifier
|
|
878
|
-
:param point: The point in space to query
|
|
879
|
-
:param max_dist: Mesh faces above this distance will not be considered by the query
|
|
880
|
-
:param epsilon: Epsilon treating distance values as equal, when locating the minimum distance vertex/face/edge, as a
|
|
881
|
-
fraction of the average edge length, also for treating closest point as being on edge/vertex default 1e-3
|
|
882
|
-
"""
|
|
883
|
-
...
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
@over
|
|
887
|
-
def mesh_query_point_sign_winding_number(
|
|
888
|
-
id: uint64, point: vec3f, max_dist: float32, accuracy: float32, threshold: float32
|
|
889
|
-
) -> mesh_query_point_t:
|
|
890
|
-
"""Computes the closest point on the :class:`Mesh` with identifier ``id`` to the given point in space.
|
|
891
|
-
|
|
892
|
-
Identifies the sign using the winding number of the mesh relative to the query point. This method of sign determination is robust for poorly conditioned meshes
|
|
893
|
-
and provides a smooth approximation to sign even when the mesh is not watertight. This method is the most robust and accurate of the sign determination meshes
|
|
894
|
-
but also the most expensive.
|
|
895
|
-
|
|
896
|
-
.. note:: The :class:`Mesh` object must be constructed with ``support_winding_number=True`` for this method to return correct results.
|
|
897
|
-
|
|
898
|
-
:param id: The mesh identifier
|
|
899
|
-
:param point: The point in space to query
|
|
900
|
-
:param max_dist: Mesh faces above this distance will not be considered by the query
|
|
901
|
-
:param accuracy: Accuracy for computing the winding number with fast winding number method utilizing second-order dipole approximation, default 2.0
|
|
902
|
-
:param threshold: The threshold of the winding number to be considered inside, default 0.5
|
|
903
|
-
"""
|
|
904
|
-
...
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
@over
|
|
908
|
-
def mesh_query_ray(id: uint64, start: vec3f, dir: vec3f, max_t: float32) -> mesh_query_ray_t:
|
|
909
|
-
"""Computes the closest ray hit on the :class:`Mesh` with identifier ``id``.
|
|
910
|
-
|
|
911
|
-
:param id: The mesh identifier
|
|
912
|
-
:param start: The start point of the ray
|
|
913
|
-
:param dir: The ray direction (should be normalized)
|
|
914
|
-
:param max_t: The maximum distance along the ray to check for intersections
|
|
915
|
-
"""
|
|
916
|
-
...
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
@over
|
|
920
|
-
def mesh_query_aabb(id: uint64, lower: vec3f, upper: vec3f) -> mesh_query_aabb_t:
|
|
921
|
-
"""Construct an axis-aligned bounding box query against a :class:`Mesh`.
|
|
922
|
-
|
|
923
|
-
This query can be used to iterate over all triangles inside a volume.
|
|
924
|
-
|
|
925
|
-
:param id: The mesh identifier
|
|
926
|
-
:param lower: The lower bound of the bounding box in mesh space
|
|
927
|
-
:param upper: The upper bound of the bounding box in mesh space
|
|
928
|
-
"""
|
|
929
|
-
...
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
@over
|
|
933
|
-
def mesh_query_aabb_next(query: mesh_query_aabb_t, index: int32) -> bool:
|
|
934
|
-
"""Move to the next triangle overlapping the query bounding box.
|
|
935
|
-
|
|
936
|
-
The index of the current face is stored in ``index``, returns ``False`` if there are no more overlapping triangles.
|
|
937
|
-
"""
|
|
938
|
-
...
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
@over
|
|
942
|
-
def mesh_eval_position(id: uint64, face: int32, bary_u: float32, bary_v: float32) -> vec3f:
|
|
943
|
-
"""Evaluates the position on the :class:`Mesh` given a face index and barycentric coordinates."""
|
|
944
|
-
...
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
@over
|
|
948
|
-
def mesh_eval_velocity(id: uint64, face: int32, bary_u: float32, bary_v: float32) -> vec3f:
|
|
949
|
-
"""Evaluates the velocity on the :class:`Mesh` given a face index and barycentric coordinates."""
|
|
950
|
-
...
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
@over
|
|
954
|
-
def hash_grid_query(id: uint64, point: vec3f, max_dist: float32) -> hash_grid_query_t:
|
|
955
|
-
"""Construct a point query against a :class:`HashGrid`.
|
|
956
|
-
|
|
957
|
-
This query can be used to iterate over all neighboring point within a fixed radius from the query point.
|
|
958
|
-
"""
|
|
959
|
-
...
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
@over
|
|
963
|
-
def hash_grid_query_next(query: hash_grid_query_t, index: int32) -> bool:
|
|
964
|
-
"""Move to the next point in the hash grid query.
|
|
965
|
-
|
|
966
|
-
The index of the current neighbor is stored in ``index``, returns ``False`` if there are no more neighbors.
|
|
967
|
-
"""
|
|
968
|
-
...
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
@over
|
|
972
|
-
def hash_grid_point_id(id: uint64, index: int32) -> int:
|
|
973
|
-
"""Return the index of a point in the :class:`HashGrid`.
|
|
974
|
-
|
|
975
|
-
This can be used to reorder threads such that grid traversal occurs in a spatially coherent order.
|
|
976
|
-
|
|
977
|
-
Returns -1 if the :class:`HashGrid` has not been reserved.
|
|
978
|
-
"""
|
|
979
|
-
...
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
@over
|
|
983
|
-
def intersect_tri_tri(v0: vec3f, v1: vec3f, v2: vec3f, u0: vec3f, u1: vec3f, u2: vec3f) -> int:
|
|
984
|
-
"""Tests for intersection between two triangles (v0, v1, v2) and (u0, u1, u2) using Moller's method.
|
|
985
|
-
|
|
986
|
-
Returns > 0 if triangles intersect.
|
|
987
|
-
"""
|
|
988
|
-
...
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
@over
|
|
992
|
-
def mesh_get(id: uint64) -> Mesh:
|
|
993
|
-
"""Retrieves the mesh given its index."""
|
|
994
|
-
...
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
@over
|
|
998
|
-
def mesh_eval_face_normal(id: uint64, face: int32) -> vec3f:
|
|
999
|
-
"""Evaluates the face normal the mesh given a face index."""
|
|
1000
|
-
...
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
@over
|
|
1004
|
-
def mesh_get_point(id: uint64, index: int32) -> vec3f:
|
|
1005
|
-
"""Returns the point of the mesh given a index."""
|
|
1006
|
-
...
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
@over
|
|
1010
|
-
def mesh_get_velocity(id: uint64, index: int32) -> vec3f:
|
|
1011
|
-
"""Returns the velocity of the mesh given a index."""
|
|
1012
|
-
...
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
@over
|
|
1016
|
-
def mesh_get_index(id: uint64, index: int32) -> int:
|
|
1017
|
-
"""Returns the point-index of the mesh given a face-vertex index."""
|
|
1018
|
-
...
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
@over
|
|
1022
|
-
def closest_point_edge_edge(p1: vec3f, q1: vec3f, p2: vec3f, q2: vec3f, epsilon: float32) -> vec3f:
|
|
1023
|
-
"""Finds the closest points between two edges.
|
|
1024
|
-
|
|
1025
|
-
Returns barycentric weights to the points on each edge, as well as the closest distance between the edges.
|
|
1026
|
-
|
|
1027
|
-
:param p1: First point of first edge
|
|
1028
|
-
:param q1: Second point of first edge
|
|
1029
|
-
:param p2: First point of second edge
|
|
1030
|
-
:param q2: Second point of second edge
|
|
1031
|
-
:param epsilon: Zero tolerance for determining if points in an edge are degenerate.
|
|
1032
|
-
:param out: vec3 output containing (s,t,d), where `s` in [0,1] is the barycentric weight for the first edge, `t` is the barycentric weight for the second edge, and `d` is the distance between the two edges at these two closest points.
|
|
1033
|
-
"""
|
|
1034
|
-
...
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
808
|
@over
|
|
1038
809
|
def volume_sample_f(id: uint64, uvw: vec3f, sampling_mode: int32) -> float:
|
|
1039
810
|
"""Sample the volume given by ``id`` at the volume local-space point ``uvw``.
|
|
@@ -1170,8 +941,8 @@ def randi(state: uint32) -> int:
|
|
|
1170
941
|
|
|
1171
942
|
|
|
1172
943
|
@over
|
|
1173
|
-
def randi(state: uint32,
|
|
1174
|
-
"""Return a random integer between [
|
|
944
|
+
def randi(state: uint32, low: int32, high: int32) -> int:
|
|
945
|
+
"""Return a random integer between [low, high)."""
|
|
1175
946
|
...
|
|
1176
947
|
|
|
1177
948
|
|
|
@@ -1182,8 +953,8 @@ def randf(state: uint32) -> float:
|
|
|
1182
953
|
|
|
1183
954
|
|
|
1184
955
|
@over
|
|
1185
|
-
def randf(state: uint32,
|
|
1186
|
-
"""Return a random float between [
|
|
956
|
+
def randf(state: uint32, low: float32, high: float32) -> float:
|
|
957
|
+
"""Return a random float between [low, high)."""
|
|
1187
958
|
...
|
|
1188
959
|
|
|
1189
960
|
|
|
@@ -1330,7 +1101,7 @@ def curlnoise(state: uint32, xyzt: vec4f, octaves: uint32, lacunarity: float32,
|
|
|
1330
1101
|
|
|
1331
1102
|
|
|
1332
1103
|
@over
|
|
1333
|
-
def printf():
|
|
1104
|
+
def printf(fmt: str, *args: Any):
|
|
1334
1105
|
"""Allows printing formatted strings using C-style format specifiers."""
|
|
1335
1106
|
...
|
|
1336
1107
|
|
|
@@ -1369,212 +1140,212 @@ def tid() -> Tuple[int, int, int, int]:
|
|
|
1369
1140
|
|
|
1370
1141
|
|
|
1371
1142
|
@over
|
|
1372
|
-
def select(cond: bool,
|
|
1373
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1143
|
+
def select(cond: bool, value_if_false: Any, value_if_true: Any):
|
|
1144
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1374
1145
|
...
|
|
1375
1146
|
|
|
1376
1147
|
|
|
1377
1148
|
@over
|
|
1378
|
-
def select(cond: int8,
|
|
1379
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1149
|
+
def select(cond: int8, value_if_false: Any, value_if_true: Any):
|
|
1150
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1380
1151
|
...
|
|
1381
1152
|
|
|
1382
1153
|
|
|
1383
1154
|
@over
|
|
1384
|
-
def select(cond: uint8,
|
|
1385
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1155
|
+
def select(cond: uint8, value_if_false: Any, value_if_true: Any):
|
|
1156
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1386
1157
|
...
|
|
1387
1158
|
|
|
1388
1159
|
|
|
1389
1160
|
@over
|
|
1390
|
-
def select(cond: int16,
|
|
1391
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1161
|
+
def select(cond: int16, value_if_false: Any, value_if_true: Any):
|
|
1162
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1392
1163
|
...
|
|
1393
1164
|
|
|
1394
1165
|
|
|
1395
1166
|
@over
|
|
1396
|
-
def select(cond: uint16,
|
|
1397
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1167
|
+
def select(cond: uint16, value_if_false: Any, value_if_true: Any):
|
|
1168
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1398
1169
|
...
|
|
1399
1170
|
|
|
1400
1171
|
|
|
1401
1172
|
@over
|
|
1402
|
-
def select(cond: int32,
|
|
1403
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1173
|
+
def select(cond: int32, value_if_false: Any, value_if_true: Any):
|
|
1174
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1404
1175
|
...
|
|
1405
1176
|
|
|
1406
1177
|
|
|
1407
1178
|
@over
|
|
1408
|
-
def select(cond: uint32,
|
|
1409
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1179
|
+
def select(cond: uint32, value_if_false: Any, value_if_true: Any):
|
|
1180
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1410
1181
|
...
|
|
1411
1182
|
|
|
1412
1183
|
|
|
1413
1184
|
@over
|
|
1414
|
-
def select(cond: int64,
|
|
1415
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1185
|
+
def select(cond: int64, value_if_false: Any, value_if_true: Any):
|
|
1186
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1416
1187
|
...
|
|
1417
1188
|
|
|
1418
1189
|
|
|
1419
1190
|
@over
|
|
1420
|
-
def select(cond: uint64,
|
|
1421
|
-
"""Select between two arguments, if ``cond`` is ``False`` then return ``
|
|
1191
|
+
def select(cond: uint64, value_if_false: Any, value_if_true: Any):
|
|
1192
|
+
"""Select between two arguments, if ``cond`` is ``False`` then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1422
1193
|
...
|
|
1423
1194
|
|
|
1424
1195
|
|
|
1425
1196
|
@over
|
|
1426
|
-
def select(arr: Array[Any],
|
|
1427
|
-
"""Select between two arguments, if ``arr`` is null then return ``
|
|
1197
|
+
def select(arr: Array[Any], value_if_false: Any, value_if_true: Any):
|
|
1198
|
+
"""Select between two arguments, if ``arr`` is null then return ``value_if_false``, otherwise return ``value_if_true``"""
|
|
1428
1199
|
...
|
|
1429
1200
|
|
|
1430
1201
|
|
|
1431
1202
|
@over
|
|
1432
|
-
def atomic_add(
|
|
1433
|
-
"""Atomically add ``value`` onto ``
|
|
1203
|
+
def atomic_add(arr: Array[Any], i: int32, value: Any):
|
|
1204
|
+
"""Atomically add ``value`` onto ``arr[i]``."""
|
|
1434
1205
|
...
|
|
1435
1206
|
|
|
1436
1207
|
|
|
1437
1208
|
@over
|
|
1438
|
-
def atomic_add(
|
|
1439
|
-
"""Atomically add ``value`` onto ``
|
|
1209
|
+
def atomic_add(arr: Array[Any], i: int32, j: int32, value: Any):
|
|
1210
|
+
"""Atomically add ``value`` onto ``arr[i,j]``."""
|
|
1440
1211
|
...
|
|
1441
1212
|
|
|
1442
1213
|
|
|
1443
1214
|
@over
|
|
1444
|
-
def atomic_add(
|
|
1445
|
-
"""Atomically add ``value`` onto ``
|
|
1215
|
+
def atomic_add(arr: Array[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1216
|
+
"""Atomically add ``value`` onto ``arr[i,j,k]``."""
|
|
1446
1217
|
...
|
|
1447
1218
|
|
|
1448
1219
|
|
|
1449
1220
|
@over
|
|
1450
|
-
def atomic_add(
|
|
1451
|
-
"""Atomically add ``value`` onto ``
|
|
1221
|
+
def atomic_add(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1222
|
+
"""Atomically add ``value`` onto ``arr[i,j,k,l]``."""
|
|
1452
1223
|
...
|
|
1453
1224
|
|
|
1454
1225
|
|
|
1455
1226
|
@over
|
|
1456
|
-
def atomic_add(
|
|
1457
|
-
"""Atomically add ``value`` onto ``
|
|
1227
|
+
def atomic_add(arr: FabricArray[Any], i: int32, value: Any):
|
|
1228
|
+
"""Atomically add ``value`` onto ``arr[i]``."""
|
|
1458
1229
|
...
|
|
1459
1230
|
|
|
1460
1231
|
|
|
1461
1232
|
@over
|
|
1462
|
-
def atomic_add(
|
|
1463
|
-
"""Atomically add ``value`` onto ``
|
|
1233
|
+
def atomic_add(arr: FabricArray[Any], i: int32, j: int32, value: Any):
|
|
1234
|
+
"""Atomically add ``value`` onto ``arr[i,j]``."""
|
|
1464
1235
|
...
|
|
1465
1236
|
|
|
1466
1237
|
|
|
1467
1238
|
@over
|
|
1468
|
-
def atomic_add(
|
|
1469
|
-
"""Atomically add ``value`` onto ``
|
|
1239
|
+
def atomic_add(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1240
|
+
"""Atomically add ``value`` onto ``arr[i,j,k]``."""
|
|
1470
1241
|
...
|
|
1471
1242
|
|
|
1472
1243
|
|
|
1473
1244
|
@over
|
|
1474
|
-
def atomic_add(
|
|
1475
|
-
"""Atomically add ``value`` onto ``
|
|
1245
|
+
def atomic_add(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1246
|
+
"""Atomically add ``value`` onto ``arr[i,j,k,l]``."""
|
|
1476
1247
|
...
|
|
1477
1248
|
|
|
1478
1249
|
|
|
1479
1250
|
@over
|
|
1480
|
-
def atomic_add(
|
|
1481
|
-
"""Atomically add ``value`` onto ``
|
|
1251
|
+
def atomic_add(arr: IndexedFabricArray[Any], i: int32, value: Any):
|
|
1252
|
+
"""Atomically add ``value`` onto ``arr[i]``."""
|
|
1482
1253
|
...
|
|
1483
1254
|
|
|
1484
1255
|
|
|
1485
1256
|
@over
|
|
1486
|
-
def atomic_add(
|
|
1487
|
-
"""Atomically add ``value`` onto ``
|
|
1257
|
+
def atomic_add(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any):
|
|
1258
|
+
"""Atomically add ``value`` onto ``arr[i,j]``."""
|
|
1488
1259
|
...
|
|
1489
1260
|
|
|
1490
1261
|
|
|
1491
1262
|
@over
|
|
1492
|
-
def atomic_add(
|
|
1493
|
-
"""Atomically add ``value`` onto ``
|
|
1263
|
+
def atomic_add(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1264
|
+
"""Atomically add ``value`` onto ``arr[i,j,k]``."""
|
|
1494
1265
|
...
|
|
1495
1266
|
|
|
1496
1267
|
|
|
1497
1268
|
@over
|
|
1498
|
-
def atomic_add(
|
|
1499
|
-
"""Atomically add ``value`` onto ``
|
|
1269
|
+
def atomic_add(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1270
|
+
"""Atomically add ``value`` onto ``arr[i,j,k,l]``."""
|
|
1500
1271
|
...
|
|
1501
1272
|
|
|
1502
1273
|
|
|
1503
1274
|
@over
|
|
1504
|
-
def atomic_sub(
|
|
1505
|
-
"""Atomically subtract ``value`` onto ``
|
|
1275
|
+
def atomic_sub(arr: Array[Any], i: int32, value: Any):
|
|
1276
|
+
"""Atomically subtract ``value`` onto ``arr[i]``."""
|
|
1506
1277
|
...
|
|
1507
1278
|
|
|
1508
1279
|
|
|
1509
1280
|
@over
|
|
1510
|
-
def atomic_sub(
|
|
1511
|
-
"""Atomically subtract ``value`` onto ``
|
|
1281
|
+
def atomic_sub(arr: Array[Any], i: int32, j: int32, value: Any):
|
|
1282
|
+
"""Atomically subtract ``value`` onto ``arr[i,j]``."""
|
|
1512
1283
|
...
|
|
1513
1284
|
|
|
1514
1285
|
|
|
1515
1286
|
@over
|
|
1516
|
-
def atomic_sub(
|
|
1517
|
-
"""Atomically subtract ``value`` onto ``
|
|
1287
|
+
def atomic_sub(arr: Array[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1288
|
+
"""Atomically subtract ``value`` onto ``arr[i,j,k]``."""
|
|
1518
1289
|
...
|
|
1519
1290
|
|
|
1520
1291
|
|
|
1521
1292
|
@over
|
|
1522
|
-
def atomic_sub(
|
|
1523
|
-
"""Atomically subtract ``value`` onto ``
|
|
1293
|
+
def atomic_sub(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1294
|
+
"""Atomically subtract ``value`` onto ``arr[i,j,k,l]``."""
|
|
1524
1295
|
...
|
|
1525
1296
|
|
|
1526
1297
|
|
|
1527
1298
|
@over
|
|
1528
|
-
def atomic_sub(
|
|
1529
|
-
"""Atomically subtract ``value`` onto ``
|
|
1299
|
+
def atomic_sub(arr: FabricArray[Any], i: int32, value: Any):
|
|
1300
|
+
"""Atomically subtract ``value`` onto ``arr[i]``."""
|
|
1530
1301
|
...
|
|
1531
1302
|
|
|
1532
1303
|
|
|
1533
1304
|
@over
|
|
1534
|
-
def atomic_sub(
|
|
1535
|
-
"""Atomically subtract ``value`` onto ``
|
|
1305
|
+
def atomic_sub(arr: FabricArray[Any], i: int32, j: int32, value: Any):
|
|
1306
|
+
"""Atomically subtract ``value`` onto ``arr[i,j]``."""
|
|
1536
1307
|
...
|
|
1537
1308
|
|
|
1538
1309
|
|
|
1539
1310
|
@over
|
|
1540
|
-
def atomic_sub(
|
|
1541
|
-
"""Atomically subtract ``value`` onto ``
|
|
1311
|
+
def atomic_sub(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1312
|
+
"""Atomically subtract ``value`` onto ``arr[i,j,k]``."""
|
|
1542
1313
|
...
|
|
1543
1314
|
|
|
1544
1315
|
|
|
1545
1316
|
@over
|
|
1546
|
-
def atomic_sub(
|
|
1547
|
-
"""Atomically subtract ``value`` onto ``
|
|
1317
|
+
def atomic_sub(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1318
|
+
"""Atomically subtract ``value`` onto ``arr[i,j,k,l]``."""
|
|
1548
1319
|
...
|
|
1549
1320
|
|
|
1550
1321
|
|
|
1551
1322
|
@over
|
|
1552
|
-
def atomic_sub(
|
|
1553
|
-
"""Atomically subtract ``value`` onto ``
|
|
1323
|
+
def atomic_sub(arr: IndexedFabricArray[Any], i: int32, value: Any):
|
|
1324
|
+
"""Atomically subtract ``value`` onto ``arr[i]``."""
|
|
1554
1325
|
...
|
|
1555
1326
|
|
|
1556
1327
|
|
|
1557
1328
|
@over
|
|
1558
|
-
def atomic_sub(
|
|
1559
|
-
"""Atomically subtract ``value`` onto ``
|
|
1329
|
+
def atomic_sub(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any):
|
|
1330
|
+
"""Atomically subtract ``value`` onto ``arr[i,j]``."""
|
|
1560
1331
|
...
|
|
1561
1332
|
|
|
1562
1333
|
|
|
1563
1334
|
@over
|
|
1564
|
-
def atomic_sub(
|
|
1565
|
-
"""Atomically subtract ``value`` onto ``
|
|
1335
|
+
def atomic_sub(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1336
|
+
"""Atomically subtract ``value`` onto ``arr[i,j,k]``."""
|
|
1566
1337
|
...
|
|
1567
1338
|
|
|
1568
1339
|
|
|
1569
1340
|
@over
|
|
1570
|
-
def atomic_sub(
|
|
1571
|
-
"""Atomically subtract ``value`` onto ``
|
|
1341
|
+
def atomic_sub(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1342
|
+
"""Atomically subtract ``value`` onto ``arr[i,j,k,l]``."""
|
|
1572
1343
|
...
|
|
1573
1344
|
|
|
1574
1345
|
|
|
1575
1346
|
@over
|
|
1576
|
-
def atomic_min(
|
|
1577
|
-
"""Compute the minimum of ``value`` and ``
|
|
1347
|
+
def atomic_min(arr: Array[Any], i: int32, value: Any):
|
|
1348
|
+
"""Compute the minimum of ``value`` and ``arr[i]`` and atomically update the array.
|
|
1578
1349
|
|
|
1579
1350
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1580
1351
|
"""
|
|
@@ -1582,8 +1353,8 @@ def atomic_min(a: Array[Any], i: int32, value: Any):
|
|
|
1582
1353
|
|
|
1583
1354
|
|
|
1584
1355
|
@over
|
|
1585
|
-
def atomic_min(
|
|
1586
|
-
"""Compute the minimum of ``value`` and ``
|
|
1356
|
+
def atomic_min(arr: Array[Any], i: int32, j: int32, value: Any):
|
|
1357
|
+
"""Compute the minimum of ``value`` and ``arr[i,j]`` and atomically update the array.
|
|
1587
1358
|
|
|
1588
1359
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1589
1360
|
"""
|
|
@@ -1591,8 +1362,8 @@ def atomic_min(a: Array[Any], i: int32, j: int32, value: Any):
|
|
|
1591
1362
|
|
|
1592
1363
|
|
|
1593
1364
|
@over
|
|
1594
|
-
def atomic_min(
|
|
1595
|
-
"""Compute the minimum of ``value`` and ``
|
|
1365
|
+
def atomic_min(arr: Array[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1366
|
+
"""Compute the minimum of ``value`` and ``arr[i,j,k]`` and atomically update the array.
|
|
1596
1367
|
|
|
1597
1368
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1598
1369
|
"""
|
|
@@ -1600,8 +1371,8 @@ def atomic_min(a: Array[Any], i: int32, j: int32, k: int32, value: Any):
|
|
|
1600
1371
|
|
|
1601
1372
|
|
|
1602
1373
|
@over
|
|
1603
|
-
def atomic_min(
|
|
1604
|
-
"""Compute the minimum of ``value`` and ``
|
|
1374
|
+
def atomic_min(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1375
|
+
"""Compute the minimum of ``value`` and ``arr[i,j,k,l]`` and atomically update the array.
|
|
1605
1376
|
|
|
1606
1377
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1607
1378
|
"""
|
|
@@ -1609,8 +1380,8 @@ def atomic_min(a: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any
|
|
|
1609
1380
|
|
|
1610
1381
|
|
|
1611
1382
|
@over
|
|
1612
|
-
def atomic_min(
|
|
1613
|
-
"""Compute the minimum of ``value`` and ``
|
|
1383
|
+
def atomic_min(arr: FabricArray[Any], i: int32, value: Any):
|
|
1384
|
+
"""Compute the minimum of ``value`` and ``arr[i]`` and atomically update the array.
|
|
1614
1385
|
|
|
1615
1386
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1616
1387
|
"""
|
|
@@ -1618,8 +1389,8 @@ def atomic_min(a: FabricArray[Any], i: int32, value: Any):
|
|
|
1618
1389
|
|
|
1619
1390
|
|
|
1620
1391
|
@over
|
|
1621
|
-
def atomic_min(
|
|
1622
|
-
"""Compute the minimum of ``value`` and ``
|
|
1392
|
+
def atomic_min(arr: FabricArray[Any], i: int32, j: int32, value: Any):
|
|
1393
|
+
"""Compute the minimum of ``value`` and ``arr[i,j]`` and atomically update the array.
|
|
1623
1394
|
|
|
1624
1395
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1625
1396
|
"""
|
|
@@ -1627,8 +1398,8 @@ def atomic_min(a: FabricArray[Any], i: int32, j: int32, value: Any):
|
|
|
1627
1398
|
|
|
1628
1399
|
|
|
1629
1400
|
@over
|
|
1630
|
-
def atomic_min(
|
|
1631
|
-
"""Compute the minimum of ``value`` and ``
|
|
1401
|
+
def atomic_min(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1402
|
+
"""Compute the minimum of ``value`` and ``arr[i,j,k]`` and atomically update the array.
|
|
1632
1403
|
|
|
1633
1404
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1634
1405
|
"""
|
|
@@ -1636,8 +1407,8 @@ def atomic_min(a: FabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
|
1636
1407
|
|
|
1637
1408
|
|
|
1638
1409
|
@over
|
|
1639
|
-
def atomic_min(
|
|
1640
|
-
"""Compute the minimum of ``value`` and ``
|
|
1410
|
+
def atomic_min(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1411
|
+
"""Compute the minimum of ``value`` and ``arr[i,j,k,l]`` and atomically update the array.
|
|
1641
1412
|
|
|
1642
1413
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1643
1414
|
"""
|
|
@@ -1645,8 +1416,8 @@ def atomic_min(a: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, valu
|
|
|
1645
1416
|
|
|
1646
1417
|
|
|
1647
1418
|
@over
|
|
1648
|
-
def atomic_min(
|
|
1649
|
-
"""Compute the minimum of ``value`` and ``
|
|
1419
|
+
def atomic_min(arr: IndexedFabricArray[Any], i: int32, value: Any):
|
|
1420
|
+
"""Compute the minimum of ``value`` and ``arr[i]`` and atomically update the array.
|
|
1650
1421
|
|
|
1651
1422
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1652
1423
|
"""
|
|
@@ -1654,8 +1425,8 @@ def atomic_min(a: IndexedFabricArray[Any], i: int32, value: Any):
|
|
|
1654
1425
|
|
|
1655
1426
|
|
|
1656
1427
|
@over
|
|
1657
|
-
def atomic_min(
|
|
1658
|
-
"""Compute the minimum of ``value`` and ``
|
|
1428
|
+
def atomic_min(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any):
|
|
1429
|
+
"""Compute the minimum of ``value`` and ``arr[i,j]`` and atomically update the array.
|
|
1659
1430
|
|
|
1660
1431
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1661
1432
|
"""
|
|
@@ -1663,8 +1434,8 @@ def atomic_min(a: IndexedFabricArray[Any], i: int32, j: int32, value: Any):
|
|
|
1663
1434
|
|
|
1664
1435
|
|
|
1665
1436
|
@over
|
|
1666
|
-
def atomic_min(
|
|
1667
|
-
"""Compute the minimum of ``value`` and ``
|
|
1437
|
+
def atomic_min(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1438
|
+
"""Compute the minimum of ``value`` and ``arr[i,j,k]`` and atomically update the array.
|
|
1668
1439
|
|
|
1669
1440
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1670
1441
|
"""
|
|
@@ -1672,8 +1443,8 @@ def atomic_min(a: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value:
|
|
|
1672
1443
|
|
|
1673
1444
|
|
|
1674
1445
|
@over
|
|
1675
|
-
def atomic_min(
|
|
1676
|
-
"""Compute the minimum of ``value`` and ``
|
|
1446
|
+
def atomic_min(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1447
|
+
"""Compute the minimum of ``value`` and ``arr[i,j,k,l]`` and atomically update the array.
|
|
1677
1448
|
|
|
1678
1449
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1679
1450
|
"""
|
|
@@ -1681,8 +1452,8 @@ def atomic_min(a: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int3
|
|
|
1681
1452
|
|
|
1682
1453
|
|
|
1683
1454
|
@over
|
|
1684
|
-
def atomic_max(
|
|
1685
|
-
"""Compute the maximum of ``value`` and ``
|
|
1455
|
+
def atomic_max(arr: Array[Any], i: int32, value: Any):
|
|
1456
|
+
"""Compute the maximum of ``value`` and ``arr[i]`` and atomically update the array.
|
|
1686
1457
|
|
|
1687
1458
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1688
1459
|
"""
|
|
@@ -1690,8 +1461,8 @@ def atomic_max(a: Array[Any], i: int32, value: Any):
|
|
|
1690
1461
|
|
|
1691
1462
|
|
|
1692
1463
|
@over
|
|
1693
|
-
def atomic_max(
|
|
1694
|
-
"""Compute the maximum of ``value`` and ``
|
|
1464
|
+
def atomic_max(arr: Array[Any], i: int32, j: int32, value: Any):
|
|
1465
|
+
"""Compute the maximum of ``value`` and ``arr[i,j]`` and atomically update the array.
|
|
1695
1466
|
|
|
1696
1467
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1697
1468
|
"""
|
|
@@ -1699,8 +1470,8 @@ def atomic_max(a: Array[Any], i: int32, j: int32, value: Any):
|
|
|
1699
1470
|
|
|
1700
1471
|
|
|
1701
1472
|
@over
|
|
1702
|
-
def atomic_max(
|
|
1703
|
-
"""Compute the maximum of ``value`` and ``
|
|
1473
|
+
def atomic_max(arr: Array[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1474
|
+
"""Compute the maximum of ``value`` and ``arr[i,j,k]`` and atomically update the array.
|
|
1704
1475
|
|
|
1705
1476
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1706
1477
|
"""
|
|
@@ -1708,8 +1479,8 @@ def atomic_max(a: Array[Any], i: int32, j: int32, k: int32, value: Any):
|
|
|
1708
1479
|
|
|
1709
1480
|
|
|
1710
1481
|
@over
|
|
1711
|
-
def atomic_max(
|
|
1712
|
-
"""Compute the maximum of ``value`` and ``
|
|
1482
|
+
def atomic_max(arr: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1483
|
+
"""Compute the maximum of ``value`` and ``arr[i,j,k,l]`` and atomically update the array.
|
|
1713
1484
|
|
|
1714
1485
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1715
1486
|
"""
|
|
@@ -1717,8 +1488,8 @@ def atomic_max(a: Array[Any], i: int32, j: int32, k: int32, l: int32, value: Any
|
|
|
1717
1488
|
|
|
1718
1489
|
|
|
1719
1490
|
@over
|
|
1720
|
-
def atomic_max(
|
|
1721
|
-
"""Compute the maximum of ``value`` and ``
|
|
1491
|
+
def atomic_max(arr: FabricArray[Any], i: int32, value: Any):
|
|
1492
|
+
"""Compute the maximum of ``value`` and ``arr[i]`` and atomically update the array.
|
|
1722
1493
|
|
|
1723
1494
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1724
1495
|
"""
|
|
@@ -1726,8 +1497,8 @@ def atomic_max(a: FabricArray[Any], i: int32, value: Any):
|
|
|
1726
1497
|
|
|
1727
1498
|
|
|
1728
1499
|
@over
|
|
1729
|
-
def atomic_max(
|
|
1730
|
-
"""Compute the maximum of ``value`` and ``
|
|
1500
|
+
def atomic_max(arr: FabricArray[Any], i: int32, j: int32, value: Any):
|
|
1501
|
+
"""Compute the maximum of ``value`` and ``arr[i,j]`` and atomically update the array.
|
|
1731
1502
|
|
|
1732
1503
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1733
1504
|
"""
|
|
@@ -1735,8 +1506,8 @@ def atomic_max(a: FabricArray[Any], i: int32, j: int32, value: Any):
|
|
|
1735
1506
|
|
|
1736
1507
|
|
|
1737
1508
|
@over
|
|
1738
|
-
def atomic_max(
|
|
1739
|
-
"""Compute the maximum of ``value`` and ``
|
|
1509
|
+
def atomic_max(arr: FabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1510
|
+
"""Compute the maximum of ``value`` and ``arr[i,j,k]`` and atomically update the array.
|
|
1740
1511
|
|
|
1741
1512
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1742
1513
|
"""
|
|
@@ -1744,8 +1515,8 @@ def atomic_max(a: FabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
|
1744
1515
|
|
|
1745
1516
|
|
|
1746
1517
|
@over
|
|
1747
|
-
def atomic_max(
|
|
1748
|
-
"""Compute the maximum of ``value`` and ``
|
|
1518
|
+
def atomic_max(arr: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1519
|
+
"""Compute the maximum of ``value`` and ``arr[i,j,k,l]`` and atomically update the array.
|
|
1749
1520
|
|
|
1750
1521
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1751
1522
|
"""
|
|
@@ -1753,8 +1524,8 @@ def atomic_max(a: FabricArray[Any], i: int32, j: int32, k: int32, l: int32, valu
|
|
|
1753
1524
|
|
|
1754
1525
|
|
|
1755
1526
|
@over
|
|
1756
|
-
def atomic_max(
|
|
1757
|
-
"""Compute the maximum of ``value`` and ``
|
|
1527
|
+
def atomic_max(arr: IndexedFabricArray[Any], i: int32, value: Any):
|
|
1528
|
+
"""Compute the maximum of ``value`` and ``arr[i]`` and atomically update the array.
|
|
1758
1529
|
|
|
1759
1530
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1760
1531
|
"""
|
|
@@ -1762,8 +1533,8 @@ def atomic_max(a: IndexedFabricArray[Any], i: int32, value: Any):
|
|
|
1762
1533
|
|
|
1763
1534
|
|
|
1764
1535
|
@over
|
|
1765
|
-
def atomic_max(
|
|
1766
|
-
"""Compute the maximum of ``value`` and ``
|
|
1536
|
+
def atomic_max(arr: IndexedFabricArray[Any], i: int32, j: int32, value: Any):
|
|
1537
|
+
"""Compute the maximum of ``value`` and ``arr[i,j]`` and atomically update the array.
|
|
1767
1538
|
|
|
1768
1539
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1769
1540
|
"""
|
|
@@ -1771,8 +1542,8 @@ def atomic_max(a: IndexedFabricArray[Any], i: int32, j: int32, value: Any):
|
|
|
1771
1542
|
|
|
1772
1543
|
|
|
1773
1544
|
@over
|
|
1774
|
-
def atomic_max(
|
|
1775
|
-
"""Compute the maximum of ``value`` and ``
|
|
1545
|
+
def atomic_max(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value: Any):
|
|
1546
|
+
"""Compute the maximum of ``value`` and ``arr[i,j,k]`` and atomically update the array.
|
|
1776
1547
|
|
|
1777
1548
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1778
1549
|
"""
|
|
@@ -1780,8 +1551,8 @@ def atomic_max(a: IndexedFabricArray[Any], i: int32, j: int32, k: int32, value:
|
|
|
1780
1551
|
|
|
1781
1552
|
|
|
1782
1553
|
@over
|
|
1783
|
-
def atomic_max(
|
|
1784
|
-
"""Compute the maximum of ``value`` and ``
|
|
1554
|
+
def atomic_max(arr: IndexedFabricArray[Any], i: int32, j: int32, k: int32, l: int32, value: Any):
|
|
1555
|
+
"""Compute the maximum of ``value`` and ``arr[i,j,k,l]`` and atomically update the array.
|
|
1785
1556
|
|
|
1786
1557
|
.. note:: The operation is only atomic on a per-component basis for vectors and matrices.
|
|
1787
1558
|
"""
|
|
@@ -1819,22 +1590,22 @@ def lerp(a: Transformation[Float], b: Transformation[Float], t: Float) -> Transf
|
|
|
1819
1590
|
|
|
1820
1591
|
|
|
1821
1592
|
@over
|
|
1822
|
-
def smoothstep(
|
|
1823
|
-
"""Smoothly interpolate between two values ``
|
|
1593
|
+
def smoothstep(a: Float, b: Float, x: Float) -> Float:
|
|
1594
|
+
"""Smoothly interpolate between two values ``a`` and ``b`` using a factor ``x``,
|
|
1824
1595
|
and return a result between 0 and 1 using a cubic Hermite interpolation after clamping.
|
|
1825
1596
|
"""
|
|
1826
1597
|
...
|
|
1827
1598
|
|
|
1828
1599
|
|
|
1829
1600
|
@over
|
|
1830
|
-
def expect_near(
|
|
1831
|
-
"""Prints an error to stdout if ``
|
|
1601
|
+
def expect_near(a: Float, b: Float, tolerance: Float):
|
|
1602
|
+
"""Prints an error to stdout if ``a`` and ``b`` are not closer than tolerance in magnitude"""
|
|
1832
1603
|
...
|
|
1833
1604
|
|
|
1834
1605
|
|
|
1835
1606
|
@over
|
|
1836
|
-
def expect_near(
|
|
1837
|
-
"""Prints an error to stdout if any element of ``
|
|
1607
|
+
def expect_near(a: vec3f, b: vec3f, tolerance: float32):
|
|
1608
|
+
"""Prints an error to stdout if any element of ``a`` and ``b`` are not closer than tolerance in magnitude"""
|
|
1838
1609
|
...
|
|
1839
1610
|
|
|
1840
1611
|
|
|
@@ -1851,235 +1622,235 @@ def lower_bound(arr: Array[Scalar], arr_begin: int32, arr_end: int32, value: Sca
|
|
|
1851
1622
|
|
|
1852
1623
|
|
|
1853
1624
|
@over
|
|
1854
|
-
def add(
|
|
1625
|
+
def add(a: Scalar, b: Scalar) -> Scalar:
|
|
1855
1626
|
""" """
|
|
1856
1627
|
...
|
|
1857
1628
|
|
|
1858
1629
|
|
|
1859
1630
|
@over
|
|
1860
|
-
def add(
|
|
1631
|
+
def add(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
1861
1632
|
""" """
|
|
1862
1633
|
...
|
|
1863
1634
|
|
|
1864
1635
|
|
|
1865
1636
|
@over
|
|
1866
|
-
def add(
|
|
1637
|
+
def add(a: Quaternion[Scalar], b: Quaternion[Scalar]) -> Quaternion[Scalar]:
|
|
1867
1638
|
""" """
|
|
1868
1639
|
...
|
|
1869
1640
|
|
|
1870
1641
|
|
|
1871
1642
|
@over
|
|
1872
|
-
def add(
|
|
1643
|
+
def add(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
1873
1644
|
""" """
|
|
1874
1645
|
...
|
|
1875
1646
|
|
|
1876
1647
|
|
|
1877
1648
|
@over
|
|
1878
|
-
def add(
|
|
1649
|
+
def add(a: Transformation[Scalar], b: Transformation[Scalar]) -> Transformation[Scalar]:
|
|
1879
1650
|
""" """
|
|
1880
1651
|
...
|
|
1881
1652
|
|
|
1882
1653
|
|
|
1883
1654
|
@over
|
|
1884
|
-
def sub(
|
|
1655
|
+
def sub(a: Scalar, b: Scalar) -> Scalar:
|
|
1885
1656
|
""" """
|
|
1886
1657
|
...
|
|
1887
1658
|
|
|
1888
1659
|
|
|
1889
1660
|
@over
|
|
1890
|
-
def sub(
|
|
1661
|
+
def sub(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
1891
1662
|
""" """
|
|
1892
1663
|
...
|
|
1893
1664
|
|
|
1894
1665
|
|
|
1895
1666
|
@over
|
|
1896
|
-
def sub(
|
|
1667
|
+
def sub(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
1897
1668
|
""" """
|
|
1898
1669
|
...
|
|
1899
1670
|
|
|
1900
1671
|
|
|
1901
1672
|
@over
|
|
1902
|
-
def sub(
|
|
1673
|
+
def sub(a: Quaternion[Scalar], b: Quaternion[Scalar]) -> Quaternion[Scalar]:
|
|
1903
1674
|
""" """
|
|
1904
1675
|
...
|
|
1905
1676
|
|
|
1906
1677
|
|
|
1907
1678
|
@over
|
|
1908
|
-
def sub(
|
|
1679
|
+
def sub(a: Transformation[Scalar], b: Transformation[Scalar]) -> Transformation[Scalar]:
|
|
1909
1680
|
""" """
|
|
1910
1681
|
...
|
|
1911
1682
|
|
|
1912
1683
|
|
|
1913
1684
|
@over
|
|
1914
|
-
def bit_and(
|
|
1685
|
+
def bit_and(a: Int, b: Int) -> Int:
|
|
1915
1686
|
""" """
|
|
1916
1687
|
...
|
|
1917
1688
|
|
|
1918
1689
|
|
|
1919
1690
|
@over
|
|
1920
|
-
def bit_or(
|
|
1691
|
+
def bit_or(a: Int, b: Int) -> Int:
|
|
1921
1692
|
""" """
|
|
1922
1693
|
...
|
|
1923
1694
|
|
|
1924
1695
|
|
|
1925
1696
|
@over
|
|
1926
|
-
def bit_xor(
|
|
1697
|
+
def bit_xor(a: Int, b: Int) -> Int:
|
|
1927
1698
|
""" """
|
|
1928
1699
|
...
|
|
1929
1700
|
|
|
1930
1701
|
|
|
1931
1702
|
@over
|
|
1932
|
-
def lshift(
|
|
1703
|
+
def lshift(a: Int, b: Int) -> Int:
|
|
1933
1704
|
""" """
|
|
1934
1705
|
...
|
|
1935
1706
|
|
|
1936
1707
|
|
|
1937
1708
|
@over
|
|
1938
|
-
def rshift(
|
|
1709
|
+
def rshift(a: Int, b: Int) -> Int:
|
|
1939
1710
|
""" """
|
|
1940
1711
|
...
|
|
1941
1712
|
|
|
1942
1713
|
|
|
1943
1714
|
@over
|
|
1944
|
-
def invert(
|
|
1715
|
+
def invert(a: Int) -> Int:
|
|
1945
1716
|
""" """
|
|
1946
1717
|
...
|
|
1947
1718
|
|
|
1948
1719
|
|
|
1949
1720
|
@over
|
|
1950
|
-
def mul(
|
|
1721
|
+
def mul(a: Scalar, b: Scalar) -> Scalar:
|
|
1951
1722
|
""" """
|
|
1952
1723
|
...
|
|
1953
1724
|
|
|
1954
1725
|
|
|
1955
1726
|
@over
|
|
1956
|
-
def mul(
|
|
1727
|
+
def mul(a: Vector[Any, Scalar], b: Scalar) -> Vector[Any, Scalar]:
|
|
1957
1728
|
""" """
|
|
1958
1729
|
...
|
|
1959
1730
|
|
|
1960
1731
|
|
|
1961
1732
|
@over
|
|
1962
|
-
def mul(
|
|
1733
|
+
def mul(a: Scalar, b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
1963
1734
|
""" """
|
|
1964
1735
|
...
|
|
1965
1736
|
|
|
1966
1737
|
|
|
1967
1738
|
@over
|
|
1968
|
-
def mul(
|
|
1739
|
+
def mul(a: Quaternion[Scalar], b: Scalar) -> Quaternion[Scalar]:
|
|
1969
1740
|
""" """
|
|
1970
1741
|
...
|
|
1971
1742
|
|
|
1972
1743
|
|
|
1973
1744
|
@over
|
|
1974
|
-
def mul(
|
|
1745
|
+
def mul(a: Scalar, b: Quaternion[Scalar]) -> Quaternion[Scalar]:
|
|
1975
1746
|
""" """
|
|
1976
1747
|
...
|
|
1977
1748
|
|
|
1978
1749
|
|
|
1979
1750
|
@over
|
|
1980
|
-
def mul(
|
|
1751
|
+
def mul(a: Quaternion[Scalar], b: Quaternion[Scalar]) -> Quaternion[Scalar]:
|
|
1981
1752
|
""" """
|
|
1982
1753
|
...
|
|
1983
1754
|
|
|
1984
1755
|
|
|
1985
1756
|
@over
|
|
1986
|
-
def mul(
|
|
1757
|
+
def mul(a: Scalar, b: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
1987
1758
|
""" """
|
|
1988
1759
|
...
|
|
1989
1760
|
|
|
1990
1761
|
|
|
1991
1762
|
@over
|
|
1992
|
-
def mul(
|
|
1763
|
+
def mul(a: Matrix[Any, Any, Scalar], b: Scalar) -> Matrix[Any, Any, Scalar]:
|
|
1993
1764
|
""" """
|
|
1994
1765
|
...
|
|
1995
1766
|
|
|
1996
1767
|
|
|
1997
1768
|
@over
|
|
1998
|
-
def mul(
|
|
1769
|
+
def mul(a: Matrix[Any, Any, Scalar], b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
1999
1770
|
""" """
|
|
2000
1771
|
...
|
|
2001
1772
|
|
|
2002
1773
|
|
|
2003
1774
|
@over
|
|
2004
|
-
def mul(
|
|
1775
|
+
def mul(a: Vector[Any, Scalar], b: Matrix[Any, Any, Scalar]) -> Vector[Any, Scalar]:
|
|
2005
1776
|
""" """
|
|
2006
1777
|
...
|
|
2007
1778
|
|
|
2008
1779
|
|
|
2009
1780
|
@over
|
|
2010
|
-
def mul(
|
|
1781
|
+
def mul(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]):
|
|
2011
1782
|
""" """
|
|
2012
1783
|
...
|
|
2013
1784
|
|
|
2014
1785
|
|
|
2015
1786
|
@over
|
|
2016
|
-
def mul(
|
|
1787
|
+
def mul(a: Transformation[Scalar], b: Transformation[Scalar]) -> Transformation[Scalar]:
|
|
2017
1788
|
""" """
|
|
2018
1789
|
...
|
|
2019
1790
|
|
|
2020
1791
|
|
|
2021
1792
|
@over
|
|
2022
|
-
def mul(
|
|
1793
|
+
def mul(a: Scalar, b: Transformation[Scalar]) -> Transformation[Scalar]:
|
|
2023
1794
|
""" """
|
|
2024
1795
|
...
|
|
2025
1796
|
|
|
2026
1797
|
|
|
2027
1798
|
@over
|
|
2028
|
-
def mul(
|
|
1799
|
+
def mul(a: Transformation[Scalar], b: Scalar) -> Transformation[Scalar]:
|
|
2029
1800
|
""" """
|
|
2030
1801
|
...
|
|
2031
1802
|
|
|
2032
1803
|
|
|
2033
1804
|
@over
|
|
2034
|
-
def mod(
|
|
1805
|
+
def mod(a: Scalar, b: Scalar) -> Scalar:
|
|
2035
1806
|
""" """
|
|
2036
1807
|
...
|
|
2037
1808
|
|
|
2038
1809
|
|
|
2039
1810
|
@over
|
|
2040
|
-
def div(
|
|
1811
|
+
def div(a: Scalar, b: Scalar) -> Scalar:
|
|
2041
1812
|
""" """
|
|
2042
1813
|
...
|
|
2043
1814
|
|
|
2044
1815
|
|
|
2045
1816
|
@over
|
|
2046
|
-
def div(
|
|
1817
|
+
def div(a: Vector[Any, Scalar], b: Scalar) -> Vector[Any, Scalar]:
|
|
2047
1818
|
""" """
|
|
2048
1819
|
...
|
|
2049
1820
|
|
|
2050
1821
|
|
|
2051
1822
|
@over
|
|
2052
|
-
def div(
|
|
1823
|
+
def div(a: Scalar, b: Vector[Any, Scalar]) -> Vector[Any, Scalar]:
|
|
2053
1824
|
""" """
|
|
2054
1825
|
...
|
|
2055
1826
|
|
|
2056
1827
|
|
|
2057
1828
|
@over
|
|
2058
|
-
def div(
|
|
1829
|
+
def div(a: Matrix[Any, Any, Scalar], b: Scalar) -> Matrix[Any, Any, Scalar]:
|
|
2059
1830
|
""" """
|
|
2060
1831
|
...
|
|
2061
1832
|
|
|
2062
1833
|
|
|
2063
1834
|
@over
|
|
2064
|
-
def div(
|
|
1835
|
+
def div(a: Scalar, b: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
2065
1836
|
""" """
|
|
2066
1837
|
...
|
|
2067
1838
|
|
|
2068
1839
|
|
|
2069
1840
|
@over
|
|
2070
|
-
def div(
|
|
1841
|
+
def div(a: Quaternion[Scalar], b: Scalar) -> Quaternion[Scalar]:
|
|
2071
1842
|
""" """
|
|
2072
1843
|
...
|
|
2073
1844
|
|
|
2074
1845
|
|
|
2075
1846
|
@over
|
|
2076
|
-
def div(
|
|
1847
|
+
def div(a: Scalar, b: Quaternion[Scalar]) -> Quaternion[Scalar]:
|
|
2077
1848
|
""" """
|
|
2078
1849
|
...
|
|
2079
1850
|
|
|
2080
1851
|
|
|
2081
1852
|
@over
|
|
2082
|
-
def floordiv(
|
|
1853
|
+
def floordiv(a: Scalar, b: Scalar) -> Scalar:
|
|
2083
1854
|
""" """
|
|
2084
1855
|
...
|
|
2085
1856
|
|
|
@@ -2133,55 +1904,55 @@ def neg(x: Matrix[Any, Any, Scalar]) -> Matrix[Any, Any, Scalar]:
|
|
|
2133
1904
|
|
|
2134
1905
|
|
|
2135
1906
|
@over
|
|
2136
|
-
def unot(
|
|
1907
|
+
def unot(a: bool) -> bool:
|
|
2137
1908
|
""" """
|
|
2138
1909
|
...
|
|
2139
1910
|
|
|
2140
1911
|
|
|
2141
1912
|
@over
|
|
2142
|
-
def unot(
|
|
1913
|
+
def unot(a: int8) -> bool:
|
|
2143
1914
|
""" """
|
|
2144
1915
|
...
|
|
2145
1916
|
|
|
2146
1917
|
|
|
2147
1918
|
@over
|
|
2148
|
-
def unot(
|
|
1919
|
+
def unot(a: uint8) -> bool:
|
|
2149
1920
|
""" """
|
|
2150
1921
|
...
|
|
2151
1922
|
|
|
2152
1923
|
|
|
2153
1924
|
@over
|
|
2154
|
-
def unot(
|
|
1925
|
+
def unot(a: int16) -> bool:
|
|
2155
1926
|
""" """
|
|
2156
1927
|
...
|
|
2157
1928
|
|
|
2158
1929
|
|
|
2159
1930
|
@over
|
|
2160
|
-
def unot(
|
|
1931
|
+
def unot(a: uint16) -> bool:
|
|
2161
1932
|
""" """
|
|
2162
1933
|
...
|
|
2163
1934
|
|
|
2164
1935
|
|
|
2165
1936
|
@over
|
|
2166
|
-
def unot(
|
|
1937
|
+
def unot(a: int32) -> bool:
|
|
2167
1938
|
""" """
|
|
2168
1939
|
...
|
|
2169
1940
|
|
|
2170
1941
|
|
|
2171
1942
|
@over
|
|
2172
|
-
def unot(
|
|
1943
|
+
def unot(a: uint32) -> bool:
|
|
2173
1944
|
""" """
|
|
2174
1945
|
...
|
|
2175
1946
|
|
|
2176
1947
|
|
|
2177
1948
|
@over
|
|
2178
|
-
def unot(
|
|
1949
|
+
def unot(a: int64) -> bool:
|
|
2179
1950
|
""" """
|
|
2180
1951
|
...
|
|
2181
1952
|
|
|
2182
1953
|
|
|
2183
1954
|
@over
|
|
2184
|
-
def unot(
|
|
1955
|
+
def unot(a: uint64) -> bool:
|
|
2185
1956
|
""" """
|
|
2186
1957
|
...
|
|
2187
1958
|
|