内核参考#

标量类型#

class warp.int8[source]#
class warp.uint8[source]#
class warp.int16[source]#
class warp.uint16[source]#
class warp.int32[source]#
class warp.uint32[source]#
class warp.int64[source]#
class warp.uint64[source]#
class warp.float16[source]#
class warp.float32[source]#
class warp.float64[source]#
class warp.bool[source]#

向量类型#

class warp.vec2b[source]#
class warp.vec2ub[source]#
class warp.vec2s[source]#
class warp.vec2us[source]#
class warp.vec2i[source]#
class warp.vec2ui[source]#
class warp.vec2l[source]#
class warp.vec2ul[source]#
class warp.vec2h[source]#
class warp.vec2f[source]#
class warp.vec2d[source]#
class warp.vec3b[source]#
class warp.vec3ub[source]#
class warp.vec3s[source]#
class warp.vec3us[source]#
class warp.vec3i[source]#
class warp.vec3ui[source]#
class warp.vec3l[source]#
class warp.vec3ul[source]#
class warp.vec3h[source]#
class warp.vec3f[source]#
class warp.vec3d[source]#
class warp.vec4b[source]#
class warp.vec4ub[source]#
class warp.vec4s[source]#
class warp.vec4us[source]#
class warp.vec4i[source]#
class warp.vec4ui[source]#
class warp.vec4l[source]#
class warp.vec4ul[source]#
class warp.vec4h[source]#
class warp.vec4f[source]#
class warp.vec4d[source]#
class warp.mat22h[source]#
class warp.mat22f[source]#
class warp.mat22d[source]#
class warp.mat33h[source]#
class warp.mat33f[source]#
class warp.mat33d[source]#
class warp.mat44h[source]#
class warp.mat44f[source]#
class warp.mat44d[source]#
class warp.quath[source]#
class warp.quatf[source]#
class warp.quatd[source]#
class warp.transformh[source]#
class warp.transformf[source]#
class warp.transformd[source]#
class warp.spatial_vectorh[source]#
class warp.spatial_vectorf[source]#
class warp.spatial_vectord[source]#
class warp.spatial_matrixh[source]#
class warp.spatial_matrixf[source]#
class warp.spatial_matrixd[source]#

泛型类型#

class warp.Int#
class warp.Float#
class warp.Scalar#
class warp.Vector#
class warp.Matrix#
class warp.Quaternion#
class warp.Transformation#
class warp.Array#

标量数学#

warp.min(a: Scalar, b: Scalar) Scalar#

返回两个标量的最小值。

warp.min(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]

返回两个向量的逐元素最小值。

warp.min(a: Vector[Any, Scalar]) Scalar

返回向量 a 的最小元素。

warp.max(a: Scalar, b: Scalar) Scalar#

返回两个标量的最大值。

warp.max(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]

返回两个向量的逐元素最大值。

warp.max(a: Vector[Any, Scalar]) Scalar

返回向量 a 的最大元素。

warp.clamp(x: Scalar, low: Scalar, high: Scalar) Scalar#

x 的值限制在 [low, high] 范围内。

warp.abs(x: Scalar) Scalar#

返回 x 的绝对值。

warp.abs(x: Vector[Any, Scalar]) Vector[Any, Scalar]

返回 x 中元素的绝对值。

warp.sign(x: Scalar) Scalar#

如果 x < 0,返回 -1,否则返回 1。

warp.sign(x: Vector[Any, Scalar]) Scalar

对于 x 中的负数元素返回 -1,否则返回 1。

warp.step(x: Scalar) Scalar#

如果 x < 0.0 返回 1.0,否则返回 0.0。

warp.nonzero(x: Scalar) Scalar#

如果 x 不等于零返回 1.0,否则返回 0.0。

warp.sin(x: Float) Float#

返回 x 的正弦值(以弧度为单位)。

warp.cos(x: Float) Float#

返回 x 的余弦值(以弧度为单位)。

warp.acos(x: Float) Float#

返回 x 的反余弦值(以弧度为单位)。输入会自动限制在 [-1.0, 1.0] 范围内。

warp.asin(x: Float) Float#

返回 x 的反正弦值(以弧度为单位)。输入会自动限制在 [-1.0, 1.0] 范围内。

warp.sqrt(x: Float) Float#

返回 x 的平方根,其中 x 为正数。

warp.cbrt(x: Float) Float#

返回 x 的立方根。

warp.tan(x: Float) Float#

返回 x 的正切值(以弧度为单位)。

warp.atan(x: Float) Float#

返回 x 的反正切值(以弧度为单位)。

warp.atan2(y: Float, x: Float) Float#

返回点 (x, y) 的双参数反正切 atan2 值(以弧度为单位)。

warp.sinh(x: Float) Float#

返回 x 的双曲正弦值。

warp.cosh(x: Float) Float#

返回 x 的双曲余弦值。

warp.tanh(x: Float) Float#

返回 x 的双曲正切值。

warp.degrees(x: Float) Float#

x 从弧度转换为角度。

warp.radians(x: Float) Float#

x 从角度转换为弧度。

warp.log(x: Float) Float#

返回 x 的自然对数(e 为底),其中 x 为正数。

warp.log2(x: Float) Float#

返回 x 的二进制对数(2 为底),其中 x 为正数。

warp.log10(x: Float) Float#

返回 x 的常用对数(10 为底),其中 x 为正数。

warp.exp(x: Float) Float#

返回指数函数 \(e^x\) 的值。

warp.pow(x: Float, y: Float) Float#

返回 xy 次幂的结果。

warp.round(x: Float) Float#

返回最接近 x 的整数值,将小数部分为 0.5 的情况四舍五入到远离零的方向。

这是口语中最直观的四舍五入形式,但可能比 warp.rint() 等其他选项慢。与 numpy.round() 不同,后者与 numpy.rint() 的行为相同。

warp.rint(x: Float) Float#

返回最接近 x 的整数值,将小数部分为 0.5 的情况四舍五入到最接近的偶数。

通常比 warp.round() 更快。等同于 numpy.rint()

warp.trunc(x: Float) Float#

返回比 x 更接近零的最近整数。

换句话说,它丢弃 x 的小数部分。它类似于将 float(int(a)) 强制转换,但在 x 在 [-0.0, -1.0) 范围内时保留负号。等同于 numpy.trunc()numpy.fix()

warp.floor(x: Float) Float#

返回小于或等于 x 的最大整数。

warp.ceil(x: Float) Float#

返回大于或等于 x 的最小整数。

warp.frac(x: Float) Float#

获取 x 的小数部分。

换句话说,它丢弃 x 的整数部分,等同于 x - trunc(x)

warp.isfinite(a: Scalar) bool#

如果 a 是有限数则返回 True,否则返回 False

warp.isfinite(a: Vector[Any, Scalar]) bool

如果向量 a 的所有元素都是有限的则返回 True,否则返回 False

warp.isfinite(a: Quaternion[Scalar]) bool

如果四元数 a 的所有元素都是有限的则返回 True,否则返回 False

warp.isfinite(a: Matrix[Any, Any, Scalar]) bool

如果矩阵 a 的所有元素都是有限的则返回 True,否则返回 False

warp.isnan(a: Scalar) bool#

如果 a 是 NaN 则返回 True,否则返回 False

warp.isnan(a: Vector[Any, Scalar]) bool

如果向量 a 的任一元素是 NaN 则返回 True,否则返回 False

warp.isnan(a: Quaternion[Scalar]) bool

如果四元数 a 的任一元素是 NaN 则返回 True,否则返回 False

warp.isnan(a: Matrix[Any, Any, Scalar]) bool

如果矩阵 a 的任一元素是 NaN 则返回 True,否则返回 False

warp.isinf(a: Scalar) bool#

如果 a 是正无穷或负无穷则返回 True,否则返回 False

warp.isinf(a: Vector[Any, Scalar]) bool

如果向量 a 的任一元素是正无穷或负无穷则返回 True,否则返回 False

warp.isinf(a: Quaternion[Scalar]) bool

如果四元数 a 的任一元素是正无穷或负无穷则返回 True,否则返回 False

warp.isinf(a: Matrix[Any, Any, Scalar]) bool

如果矩阵 a 的任一元素是正无穷或负无穷则返回 True,否则返回 False

向量数学#

warp.dot(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) Scalar#

计算两个向量的点积。

warp.dot(a: Quaternion[Float], b: Quaternion[Float]) Float

计算两个四元数的点积。

warp.ddot(a: Matrix[Any, Any, Scalar], b: Matrix[Any, Any, Scalar]) Scalar#

计算两个矩阵的双点积。

warp.argmin(a: Vector[Any, Scalar]) uint32#

返回向量 a 中最小元素的索引。[1]

warp.argmax(a: Vector[Any, Scalar]) uint32#

返回向量 a 中最大元素的索引。[1]

warp.outer(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Matrix[Any, Any, Scalar]#

计算两个向量的外积 a*b^T

warp.cross(a: Vector[3, Scalar], b: Vector[3, Scalar]) Vector[3, Scalar]#

计算两个 3D 向量的叉积。

warp.skew(vec: Vector[3, Scalar]) Matrix[3, 3, Scalar]#

计算 3D 向量 vec 的斜对称 3x3 矩阵。

warp.length(a: Vector[Any, Float]) Float#

计算浮点向量 a 的长度。

warp.length(a: Quaternion[Float]) Float

计算四元数 a 的长度。

warp.length_sq(a: Vector[Any, Scalar]) Scalar#

计算向量 a 的平方长度。

warp.length_sq(a: Quaternion[Scalar]) Scalar

计算四元数 a 的平方长度。

warp.normalize(a: Vector[Any, Float]) Vector[Any, Float]#

计算 a 的归一化值。如果 length(a) 为 0,则返回零向量。

warp.normalize(a: Quaternion[Float]) Quaternion[Float]

计算 a 的归一化值。如果 length(a) 为 0,则返回零四元数。

warp.transpose(a: Matrix[Any, Any, Scalar]) Matrix[Any, Any, Scalar]#

返回矩阵 a 的转置。

warp.inverse(a: Matrix[2, 2, Float]) Matrix[Any, Any, Float]#

返回 2x2 矩阵 a 的逆矩阵。

warp.inverse(a: Matrix[3, 3, Float]) Matrix[Any, Any, Float]

返回 3x3 矩阵 a 的逆矩阵。

warp.inverse(a: Matrix[4, 4, Float]) Matrix[Any, Any, Float]

返回 4x4 矩阵 a 的逆矩阵。

warp.determinant(a: Matrix[2, 2, Float]) Float#

返回 2x2 矩阵 a 的行列式。

warp.determinant(a: Matrix[3, 3, Float]) Float

返回 3x3 矩阵 a 的行列式。

warp.determinant(a: Matrix[4, 4, Float]) Float

返回 4x4 矩阵 a 的行列式。

warp.trace(a: Matrix[Any, Any, Scalar]) Scalar#

返回矩阵 a 的迹。

warp.diag(vec: Vector[Any, Scalar]) Matrix[Any, Any, Scalar]#

返回一个矩阵,其对角线元素是向量 vec 的分量。

warp.get_diag(mat: Matrix[Any, Any, Scalar]) Vector[Any, Scalar]#

返回一个向量,其中包含方阵 mat 的对角线元素。

warp.cw_mul(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]#

对两个向量进行逐分量乘法。

warp.cw_mul(
a: Matrix[Any, Any, Scalar],
b: Matrix[Any, Any, Scalar],
) Matrix[Any, Any, Scalar]

对两个矩阵进行逐分量乘法。

warp.cw_div(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]#

对两个向量进行逐分量除法。

warp.cw_div(
a: Matrix[Any, Any, Scalar],
b: Matrix[Any, Any, Scalar],
) Matrix[Any, Any, Scalar]

对两个矩阵进行逐分量除法。

warp.vector(
*args: Scalar,
length: int32,
dtype: Scalar,
) Vector[Any, Scalar]#

构建一个指定长度和 dtype 的向量。

warp.matrix(
pos: Vector[3, Float],
rot: Quaternion[Float],
scale: Vector[3, Float],
dtype: Float,
) Matrix[4, 4, Float]#

构建一个 4x4 变换矩阵,该矩阵在应用于列向量时,按照 Translation(pos)*Rotation(rot)*Scaling(scale) 的顺序应用变换,即:y = (TRS)*x

warp.matrix(
*args: Scalar,
shape: Tuple[int, int],
dtype: Scalar,
) Matrix[Any, Any, Scalar]

构建一个矩阵。如果未给定位置参数 arg_types,则矩阵将被零初始化。

warp.matrix_from_cols(*args: Vector[Any, Scalar]) Matrix[Any, Any, Scalar]#

从列向量构建一个矩阵。

warp.matrix_from_rows(*args: Vector[Any, Scalar]) Matrix[Any, Any, Scalar]#

从行向量构建一个矩阵。

warp.identity(n: int32, dtype: Scalar) Matrix[Any, Any, Scalar]#

创建一个 shape=(n,n) 的单位矩阵,其类型由 dtype 指定。

warp.svd3(
A: Matrix[3, 3, Float],
U: Matrix[3, 3, Float],
sigma: Vector[3, Float],
V: Matrix[3, 3, Scalar],
) None#

计算 3x3 矩阵 A 的 SVD。奇异值在 sigma 中返回,左和右基向量在 UV 中返回。

warp.svd2(
A: Matrix[2, 2, Float],
U: Matrix[2, 2, Float],
sigma: Vector[2, Float],
V: Matrix[2, 2, Scalar],
) None#

计算 2x2 矩阵 A 的 SVD。奇异值在 sigma 中返回,左和右基向量在 UV 中返回。

warp.qr3(
A: Matrix[3, 3, Float],
Q: Matrix[3, 3, Float],
R: Matrix[3, 3, Float],
) None#

计算 3x3 矩阵 A 的 QR 分解。正交矩阵在 Q 中返回,上三角矩阵在 R 中返回。

warp.eig3(
A: Matrix[3, 3, Float],
Q: Matrix[3, 3, Float],
d: Vector[3, Float],
) None#

计算 3x3 矩阵 A 的特征分解。特征向量作为 Q 的列返回,而对应的特征值在 d 中返回。

warp.math.norm_l1(v)#

计算向量 v 的 L1 范数。

\[\|v\|_1 = \sum_i |v_i|\]
参数:

v (Vector[Any,Float]) – 要计算 L1 范数的向量。

返回:

向量的 L1 范数。

返回类型:

float

warp.math.norm_l2(v)#

计算向量 v 的 L2 范数。

\[\|v\|_2 = \sqrt{\sum_i v_i^2}\]
参数:

v (Vector[Any,Float]) – 要计算 L2 范数的向量。

返回:

向量的 L2 范数。

返回类型:

float

warp.math.norm_huber(v, delta=1.0)#

计算向量 v 在给定 delta 下的 Huber 范数。

\[\begin{split}H(v) = \begin{cases} \frac{1}{2} \|v\|^2 & \text{if } \|v\| \leq \delta \\ \delta(\|v\| - \frac{1}{2}\delta) & \text{otherwise} \end{cases}\end{split}\]
../_images/norm_huber.svg
参数:
  • v (Vector[Any,Float]) – 要计算 Huber 范数的向量。

  • delta (float) – 阈值,默认为 1.0。

返回:

向量的 Huber 范数。

返回类型:

float

warp.math.norm_pseudo_huber(v, delta=1.0)#

计算向量 v 在给定 delta 下的“伪”Huber 范数。

\[H^\prime(v) = \delta \sqrt{1 + \frac{\|v\|^2}{\delta^2}}\]
../_images/norm_pseudo_huber.svg
参数:
  • v (Vector[Any,Float]) – 要计算 Huber 范数的向量。

  • delta (float) – 阈值,默认为 1.0。

返回:

向量的 Huber 范数。

返回类型:

float

warp.math.smooth_normalize(v, delta=1.0)#

使用伪 Huber 范数归一化向量。

请参阅 norm_pseudo_huber()

\[\frac{v}{H^\prime(v)}\]
参数:
  • v (Vector[Any,Float]) – 要归一化的向量。

  • delta (float) – 阈值,默认为 1.0。

返回:

归一化后的向量。

返回类型:

Vector[Any,Float]

四元数数学#

warp.quaternion(dtype: Float) Quaternion[Float]#

构造一个零初始化的四元数。四元数按 [ix, iy, iz, r] 排布,其中 ix, iy, iz 是虚部,r 是实部。

warp.quaternion(
x: Float,
y: Float,
z: Float,
w: Float,
dtype: Scalar,
) Quaternion[Float]

使用提供的分量创建四元数(类型从分量类型推断)。

warp.quaternion(
ijk: Vector[3, Float],
real: Float,
dtype: Float,
) Quaternion[Float]

使用提供的向量/标量创建四元数(类型从标量类型推断)。

warp.quaternion(quat: Quaternion[Float], dtype: Float) Quaternion[Float]

从另一个不同 dtype 的四元数构造一个 dtype 类型的四元数。

warp.quat_identity(dtype: Float) quatf#

构造一个单位四元数,其虚部为零,实部为 1.0。

warp.quat_from_axis_angle(
axis: Vector[3, 3, Float],
angle: Float,
) Quaternion[Float]#

构造一个表示绕给定轴旋转 angle 弧度的四元数。

warp.quat_to_axis_angle(
quat: Quaternion[Float],
axis: Vector[3, 3, Float],
angle: Float,
) None#

提取四元数表示的旋转轴和弧度角。

warp.quat_from_matrix(mat: Matrix[3, 3, Float]) Quaternion[Float]#

从 3x3 矩阵构造四元数。

如果矩阵不是纯旋转,而是例如包含缩放或剪切,则结果未定义。

warp.quat_from_matrix(mat: Matrix[4, 4, Float]) Quaternion[Float]

从 4x4 矩阵构造四元数。

如果矩阵的左上角 3x3 块不是纯旋转,而是例如包含缩放或剪切,则结果未定义。

warp.quat_rpy(roll: Float, pitch: Float, yaw: Float) Quaternion[Float]#

构造一个表示组合滚转 (z)、俯仰 (x)、偏航 (y) 弧度旋转的四元数。

warp.quat_inverse(quat: Quaternion[Float]) Quaternion[Float]#

计算四元数共轭。

warp.quat_rotate(
quat: Quaternion[Float],
vec: Vector[3, Float],
) Vector[3, Float]#

使用四元数旋转向量。

warp.quat_rotate_inv(
quat: Quaternion[Float],
vec: Vector[3, Float],
) Vector[3, Float]#

使用四元数的逆旋转向量。

warp.quat_slerp(
a: Quaternion[Float],
b: Quaternion[Float],
t: Float,
) Quaternion[Float]#

在两个四元数之间进行球面线性插值。

warp.quat_to_matrix(quat: Quaternion[Float]) Matrix[3, 3, Float]#

将四元数转换为 3x3 旋转矩阵。

变换#

warp.transformation(
pos: Vector[3, Float],
rot: Quaternion[Float],
dtype: Float,
) Transformation[Float]#

构造一个刚体变换,其包含平移部分 pos 和旋转 rot

warp.transform_identity(dtype: Float) transformf#

构造一个单位变换,其平移为零,旋转为单位旋转。

warp.transform_get_translation(
xform: Transformation[Float],
) Vector[3, Float]#

返回变换 xform 的平移部分。

warp.transform_get_rotation(
xform: Transformation[Float],
) Quaternion[Float]#

返回变换 xform 的旋转部分。

warp.transform_multiply(
a: Transformation[Float],
b: Transformation[Float],
) Transformation[Float]#

将两个刚体变换相乘。

warp.transform_point(
xform: Transformation[Float],
point: Vector[3, Float],
) Vector[3, Float]#

将变换应用于点 point,将齐次坐标视为 w=1(包含平移和旋转)。

warp.transform_point(
mat: Matrix[4, 4, Float],
point: Vector[3, Float],
) Vector[3, Float]

将变换应用于点 point,将齐次坐标视为 w=1。

应用变换时将 point 视为列向量,例如:y = mat*point

这与某些库(特别是 USD)不同,后者将变换应用于行向量,y^T = point^T*mat^T。如果变换来自使用行向量的库,则用户在调用此方法之前应转置变换矩阵。

warp.transform_vector(
xform: Transformation[Float],
vec: Vector[3, Float],
) Vector[3, Float]#

将变换应用于向量 vec,将齐次坐标视为 w=0(仅旋转)。

warp.transform_vector(
mat: Matrix[4, 4, Float],
vec: Vector[3, Float],
) Vector[3, Float]

将变换应用于向量 vec,将齐次坐标视为 w=0。

应用变换时将 vec 视为列向量,例如:y = mat*vec

这与某些库(特别是 USD)不同,后者将变换应用于行向量,y^T = vec^T*mat^T。如果变换来自使用行向量的库,则用户在调用此方法之前应转置变换矩阵。

warp.transform_inverse(
xform: Transformation[Float],
) Transformation[Float]#

计算变换 xform 的逆。

warp.math.transform_from_matrix(mat)#

从 4x4 矩阵构造一个变换。

参数:

mat (Matrix[4, 4, Float]) – 要转换的矩阵。

返回:

变换。

返回类型:

Transformation[Float]

warp.math.transform_to_matrix(xform)#

将变换转换为 4x4 矩阵。

参数:

xform (Transformation[Float]) – 要转换的变换。

返回:

矩阵。

返回类型:

Matrix[4, 4, Float]

空间数学#

warp.spatial_vector(dtype: Float) Vector[6, Float][source]#

零初始化一个 6D 螺旋向量。

warp.spatial_vector(
w: Vector[3, Float],
v: Vector[3, Float],
dtype: Float,
) Vector[6, Float][source]

从两个 3D 向量构造一个 6D 螺旋向量。

warp.spatial_vector(
wx: Float,
wy: Float,
wz: Float,
vx: Float,
vy: Float,
vz: Float,
dtype: Float,
) Vector[6, Float][source]

从六个值构造一个 6D 螺旋向量。

warp.spatial_adjoint(
r: Matrix[3, 3, Float],
s: Matrix[3, 3, Float],
) Matrix[6, 6, Float]#

从两个 3x3 对角块构造一个 6x6 空间惯性矩阵。

warp.spatial_dot(a: Vector[6, Float], b: Vector[6, Float]) Float#

计算两个 6D 螺旋向量的点积。

warp.spatial_cross(
a: Vector[6, Float],
b: Vector[6, Float],
) Vector[6, Float]#

计算两个 6D 螺旋向量的叉积。

warp.spatial_cross_dual(
a: Vector[6, Float],
b: Vector[6, Float],
) Vector[6, Float]#

计算两个 6D 螺旋向量的对偶叉积。

warp.spatial_top(svec: Vector[6, Float]) Vector[3, Float]#

返回 6D 螺旋向量的顶部(第一部分)。

warp.spatial_bottom(svec: Vector[6, Float]) Vector[3, Float]#

返回 6D 螺旋向量的底部(第二部分)。

warp.spatial_jacobian(
S: Array[Vector[6, Float]],
joint_parents: Array[int32],
joint_qd_start: Array[int32],
joint_start: int32,
joint_count: int32,
J_start: int32,
J_out: Array[Float],
) None#
warp.spatial_mass(
I_s: Array[Matrix[6, 6, Float]],
joint_start: int32,
joint_count: int32,
M_start: int32,
M: Array[Float],
) None#

Tile 原语#

warp.tile_zeros(shape: Tuple[int, ...], dtype: Any, storage: str) Tile#

分配一个零初始化的 Tile。

参数:
  • shape – 输出 Tile 的形状

  • dtype – 输出 Tile 元素的 数据类型(默认为 float)

  • storage – Tile 的存储位置:"register"(默认为寄存器)或 "shared"(用于共享内存)。

返回:

一个具有指定形状和数据类型的零初始化 Tile [1]

warp.tile_ones(shape: Tuple[int, ...], dtype: Any, storage: str) Tile#

分配一个一初始化的 Tile。

参数:
  • shape – 输出 Tile 的形状

  • dtype – 输出 Tile 元素的 数据类型

  • storage – Tile 的存储位置:"register"(默认为寄存器)或 "shared"(用于共享内存)。

返回:

一个具有指定形状和数据类型的一初始化 Tile [1]

warp.tile_arange(*args: Scalar, dtype: Any, storage: str) Tile#

生成一个具有线性间隔元素的 Tile。

参数:
  • args

    可变长度的位置参数,解释为

    • (stop,):生成从 0stop - 1 的值

    • (start, stop):生成从 startstop - 1 的值

    • (start, stop, step):以指定的步长生成从 startstop - 1 的值

  • dtype – 输出 Tile 元素的 数据类型(可选,默认为:float

  • storage – Tile 的存储位置:"register"(默认为寄存器)或 "shared"(用于共享内存)。

返回:

一个 shape=(n) 的 Tile,其中包含指定数据类型的线性间隔元素 [1]

warp.tile_load(
a: Array[Any],
shape: Tuple[int, ...],
offset: Tuple[int, ...],
storage: str,
) Array[Scalar]#

从全局内存数组加载一个 Tile。

此方法将利用块中的所有线程协作地从全局内存加载一个 Tile。

参数:
  • a – 全局内存中的源数组

  • shape – 要加载的 Tile 的形状,必须与 a 具有相同的维度数

  • offset – 在源数组中开始读取的偏移量(可选)

  • storage – Tile 的存储位置:"register"(默认为寄存器)或 "shared"(用于共享内存)。

返回:

一个具有指定形状且数据类型与源数组相同的 Tile

warp.tile_store(a: Array[Any], t: Tile, offset: Tuple[int, ...]) None#

将 Tile 存储到全局内存数组。

此方法将利用块中的所有线程协作地将 Tile 存储到全局内存。

参数:
  • a – 全局内存中的目标数组

  • t – 要存储数据的源 Tile,必须与目标数组具有相同的数据类型和维度数

  • offset – 目标数组中的偏移量(可选)

warp.tile_atomic_add(
a: Array[Any],
t: Tile,
offset: Tuple[int, ...],
) Tile#

将一个 1D Tile 原子地添加到数组 a 中,每个元素都将原子更新。

参数:
  • a – 全局内存中的数组,应与输入 Tile 具有相同的 dtype

  • t – 要添加到目标数组的源 Tile

  • offset – 目标数组中的偏移量(可选)

返回:

一个与源 Tile 具有相同维度和数据类型的 Tile,其中包含目标元素的原始值

warp.tile_view(
t: Tile,
offset: Tuple[int, ...],
shape: Tuple[int, ...],
) Tile#

返回给定 Tile [offset, offset+shape] 的切片,如果未指定 shape,则将从未指定的 offset 维度推断。

参数:
  • t – 从中提取子范围的输入 Tile

  • offset – 源 Tile 中的偏移量

  • shape – 返回切片的形状

返回:

一个 Tile,其维度由指定的 shape 或剩余的源 Tile 维度给出 [1]

warp.tile_assign(dst: Tile, src: Tile, offset: Tuple[int, ...]) None#

将一个 tile 赋值给目标 tile 的一个子区域。

参数:
  • dst – 要赋值的目标 tile

  • src – 要从中读取值的源 tile

  • offset – 在目标 tile 中写入的偏移量

warp.tile(x: Any) Tile#

从每个线程的内核值构造一个新的 tile。

此函数将使用标量内核代码计算的值转换为 tile 表示形式,以便输入到集体操作中。

  • 如果输入值是标量,则生成的 tile 具有 shape=(block_dim,)

  • 如果输入值是向量,则生成的 tile 具有 shape=(length(vector), block_dim)

参数:

x – 每个线程的局部值,例如标量、向量或矩阵。

返回:

一个 tile,其第一个维度根据值类型长度而定,第二个维度等于 block_dim

此示例展示如何从线程变量创建线性序列。

@wp.kernel
def compute():
    i = wp.tid()
    t = wp.tile(i*2)
    print(t)

wp.launch(compute, dim=16, inputs=[], block_dim=16)

打印结果

[0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30] = tile(shape=(16), storage=register)
warp.untile(a: Tile) Scalar#

将 tile 转换回每个线程的值。

此函数将块范围的 tile 转换回每个线程的值。

  • 如果输入 tile 是 1D 的,则生成的值将是每个线程的标量。

  • 如果输入 tile 是 2D 的,则生成的值将是每个线程长度为 M 的向量。

参数:

a – 维度为 shape=(M, block_dim) 的 tile。

返回:

每个线程一个值,数据类型与 tile 相同。

此示例展示如何从线程变量创建线性序列。

@wp.kernel
def compute():
    i = wp.tid()

    # create block-wide tile
    t = wp.tile(i)*2

    # convert back to per-thread values
    s = wp.untile(t)

    print(s)

wp.launch(compute, dim=16, inputs=[], block_dim=16)

打印结果

0
2
4
6
8
...
warp.tile_transpose(a: Tile) Tile#

转置 tile。

对于共享内存 tile,此操作将与输入 tile 别名。寄存器 tile 将首先传输到共享内存,然后进行转置。

参数:

a – 要转置的 tile,其维度为 shape=(M,N)

返回:

维度为 shape=(N,M) 的 tile。

warp.tile_broadcast(a: Tile, shape: Tuple[int, ...]) Tile#

广播 tile。

将输入 tile a 广播到目标 shape。广播遵循 NumPy 广播规则。

参数:
  • a – 要广播的 tile。

  • shape – 广播到的 shape。

返回:

具有广播 shape 的 tile。

warp.tile_sum(a: Tile) Tile#

使用块中的所有线程协作计算 tile 元素的总和。

参数:

a – 要计算总和的 tile。

返回:

一个包含总和的单元素 tile。

示例

@wp.kernel
def compute():

    t = wp.tile_ones(dtype=float, shape=(16, 16))
    s = wp.tile_sum(t)

    print(s)

wp.launch_tiled(compute, dim=[1], inputs=[], block_dim=64)

打印结果

[256] = tile(shape=(1), storage=register)
warp.tile_min(a: Tile) Tile#

使用块中的所有线程协作计算 tile 元素的最小值。

参数:

a – 要计算最小值的 tile。

返回:

一个包含最小值的单元素 tile。

示例

@wp.kernel
def compute():

    t = wp.tile_arange(64, 128)
    s = wp.tile_min(t)

    print(s)


wp.launch_tiled(compute, dim=[1], inputs=[], block_dim=64)

打印结果

[64] = tile(shape=(1), storage=register)
warp.tile_max(a: Tile) Tile#

使用块中的所有线程协作计算 tile 元素的最大值。

参数:

a – 要计算最大值的 tile。

返回:

一个包含最大值的单元素 tile。

示例

@wp.kernel
def compute():

    t = wp.tile_arange(64, 128)
    s = wp.tile_max(t)

    print(s)

wp.launch_tiled(compute, dim=[1], inputs=[], block_dim=64)

打印结果

[127] = tile(shape=(1), storage=register)
warp.tile_reduce(op: Callable, a: Tile) Tile#

在 tile 上应用自定义归约(reduction)运算符。

此函数使用提供的运算符在 tile 上协作执行归约。

参数:
  • op – 一个可调用函数,接受两个参数并返回一个参数,可以是用户函数或内置函数。

  • a – 输入 tile,运算符(或其重载之一)必须能够接受 tile 的数据类型。

返回:

一个单元素 tile,其数据类型与输入 tile 相同。

示例

@wp.kernel
def factorial():

    t = wp.tile_arange(1, 10, dtype=int)
    s = wp.tile_reduce(wp.mul, t)

    print(s)

wp.launch_tiled(factorial, dim=[1], inputs=[], block_dim=16)

打印结果

[362880] = tile(shape=(1), storage=register)
warp.tile_map(op: Callable, a: Tile) Tile#

在 tile 上应用一元函数。

此函数使用块中的所有线程协作地将一元函数应用于 tile 的每个元素。

参数:
  • op – 一个可调用函数,接受一个参数并返回一个参数,可以是用户函数或内置函数。

  • a – 输入 tile,运算符(或其重载之一)必须能够接受 tile 的数据类型。

返回:

一个 tile,其维度和数据类型与输入 tile 相同。

示例

@wp.kernel
def compute():

    t = wp.tile_arange(0.0, 1.0, 0.1, dtype=float)
    s = wp.tile_map(wp.sin, t)

    print(s)

wp.launch_tiled(compute, dim=[1], inputs=[], block_dim=16)

打印结果

[0 0.0998334 0.198669 0.29552 0.389418 0.479426 0.564642 0.644218 0.717356 0.783327] = tile(shape=(10), storage=register)
warp.tile_map(op: Callable, a: Tile, b: Tile) Tile

在 tile 上应用二元函数。

此函数使用块中的所有线程协作地将二元函数应用于 tile 的每个元素。两个输入 tile 必须具有相同的维度和数据类型。

参数:
  • op – 一个可调用函数,接受两个相同类型的参数并返回一个相同类型的参数,可以是用户函数或内置函数。

  • a – 第一个输入 tile,运算符(或其重载之一)必须能够接受 tile 的 dtype。

  • b – 第二个输入 tile,运算符(或其重载之一)必须能够接受 tile 的 dtype。

返回:

一个 tile,其维度和数据类型与输入 tile 相同。

示例

@wp.kernel
def compute():

    a = wp.tile_arange(0.0, 1.0, 0.1, dtype=float)
    b = wp.tile_ones(shape=10, dtype=float)

    s = wp.tile_map(wp.add, a, b)

    print(s)

wp.launch_tiled(compute, dim=[1], inputs=[], block_dim=16)

打印结果

[1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9] = tile(shape=(10), storage=register)
warp.tile_diag_add(a: Tile, d: Tile) Tile#

将一个方阵与表示为 1D tile 的对角矩阵“d”相加。

warp.tile_matmul(a: Tile, b: Tile, out: Tile) Tile#

计算矩阵乘积并累加 out += a*b

支持的数据类型包括
  • fp16, fp32, fp64 (实数)

  • vec2h, vec2f, vec2d (复数)

所有输入和输出 tile 必须具有相同的数据类型。必要时,tile 数据将自动迁移到共享内存,并在可用时使用 TensorCore 操作。

参数:
  • a – 维度为 shape=(M, K) 的 tile。

  • b – 维度为 shape=(K, N) 的 tile。

  • out – 维度为 shape=(M, N) 的 tile。

warp.tile_matmul(a: Tile, b: Tile) Tile

计算矩阵乘积 out = a*b

支持的数据类型包括
  • fp16, fp32, fp64 (实数)

  • vec2h, vec2f, vec2d (复数)

两个输入 tile 必须具有相同的数据类型。必要时,tile 数据将自动迁移到共享内存,并在可用时使用 TensorCore 操作。

参数:
  • a – 维度为 shape=(M, K) 的 tile。

  • b – 维度为 shape=(K, N) 的 tile。

返回:

维度为 shape=(M, N) 的 tile。

warp.tile_fft(inout: Tile) Tile#

计算 2D 数据 tile 沿第二维的正向 FFT。

此函数协作地就地计算数据 tile 的正向 FFT,将每行单独处理。

请注意,目前尚不支持计算伴随(adjoint)。

支持的数据类型包括
  • vec2f, vec2d

参数:

inout – 输入/输出 tile。

warp.tile_ifft(inout: Tile) Tile#

计算 2D 数据 tile 沿第二维的逆向 FFT。

此函数协作地就地计算数据 tile 的逆向 FFT,将每行单独处理。

请注意,目前尚不支持计算伴随(adjoint)。

支持的数据类型包括
  • vec2f, vec2d

参数:

inout – 输入/输出 tile。

warp.tile_cholesky(A: Tile) Tile#

计算矩阵 A 的 Cholesky 分解 L。L 是下三角矩阵,满足 LL^T = A。

请注意,目前尚不支持计算伴随(adjoint)。

支持的数据类型包括
  • float32

  • float64

参数:

A – 一个方形、对称正定矩阵。

返回 L:

一个方形、下三角矩阵,满足 LL^T = A。

warp.tile_cholesky_solve(L: Tile, x: Tile) None#

已知 L 满足 LL^T = A,求解 Ax = y 中的 x。

请注意,目前尚不支持计算伴随(adjoint)。

支持的数据类型包括
  • float32

  • float64

参数:
  • L – 一个方形、下三角矩阵,满足 LL^T = A。

  • x – 一个长度为 M 的 1D tile。

返回 y:

一个长度为 M 的 1D tile,满足 LL^T y = x。

实用工具#

warp.mlp(
weights: Array[float32],
bias: Array[float32],
activation: Callable,
index: int32,
x: Array[float32],
out: Array[float32],
) None#

计算一个多层感知器 (MLP) 层,形式为:out = act(weights*x + bias)

自 1.6 版本起已废弃:请改用tile 原语

参数:
  • weights – 层的网络权重,维度为 (m, n)

  • bias – 一个数组,维度为 (n)

  • activation – 一个 wp.func 函数,接受一个标量 float 作为输入并返回一个标量 float 作为输出。

  • index – 要处理的批次项索引,通常每个线程处理批次中的一个项,此时 index 应为 wp.tid()

  • x – 特征矩阵,维度为 (n, b)

  • out – 网络输出,维度为 (m, b)

注意:

与 PyTorch 等其他一些框架相比,特征矩阵和输出矩阵是转置的。所有矩阵都假定存储在展平的行主序内存布局中(NumPy 默认)。

warp.reversed(range: range_t) range_t#

返回反转顺序的 range。

warp.printf(fmt: str, *args: Any) None#

允许使用 C 风格的格式说明符打印格式化字符串。

warp.print(value: Any) None#

将变量打印到标准输出。

warp.breakpoint() None#

调试器断点。

warp.tid() int#

返回 1D 内核启动的当前线程索引。

请注意,这是线程的全局索引,范围为 [0, dim),其中 dim 是传递给内核启动的参数。

用户定义的 Warp 函数中不能调用此函数。

warp.tid() Tuple[int, int]

返回 2D 内核启动的当前线程索引。

使用 i,j = wp.tid() 语法获取内核线程网格内的坐标。

用户定义的 Warp 函数中不能调用此函数。

warp.tid() Tuple[int, int, int]

返回 3D 内核启动的当前线程索引。

使用 i,j,k = wp.tid() 语法获取内核线程网格内的坐标。

用户定义的 Warp 函数中不能调用此函数。

warp.tid() Tuple[int, int, int, int]

返回 4D 内核启动的当前线程索引。

使用 i,j,k,l = wp.tid() 语法获取内核线程网格内的坐标。

用户定义的 Warp 函数中不能调用此函数。

warp.select(cond: bool, value_if_false: Any, value_if_true: Any) Any#

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: int8, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: uint8, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: int16, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: uint16, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: int32, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: uint32, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: int64, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(cond: uint64, value_if_false: Any, value_if_true: Any) Any

在两个参数中选择,如果 condFalse,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本起已废弃:请改用 where() 函数,其参数顺序更直观:where(cond, value_if_true, value_if_false)

warp.select(
arr: Array[Any],
value_if_false: Any,
value_if_true: Any,
) Any

在两个参数之间进行选择,如果 arr 为 null,则返回 value_if_false,否则返回 value_if_true

自 1.7 版本弃用: 改用 where() 函数,它的参数顺序更直观:where(arr, value_if_true, value_if_false)

warp.where(cond: bool, value_if_true: Any, value_if_false: Any) Any#

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: int8, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: uint8, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: int16, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: uint16, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: int32, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: uint32, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: int64, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(cond: uint64, value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 condTrue,则返回 value_if_true,否则返回 value_if_false

warp.where(arr: Array[Any], value_if_true: Any, value_if_false: Any) Any

在两个参数之间进行选择,如果 arr 不为 null,则返回 value_if_true,否则返回 value_if_false

warp.atomic_add(arr: Array[Any], i: Int, value: Any) Any#

原子地将 value 加到 arr[i] 上并返回旧值。

warp.atomic_add(arr: Array[Any], i: Int, j: Int, value: Any) Any

原子地将 value 加到 arr[i,j] 上并返回旧值。

warp.atomic_add(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) Any

原子地将 value 加到 arr[i,j,k] 上并返回旧值。

warp.atomic_add(
arr: Array[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

原子地将 value 加到 arr[i,j,k,l] 上并返回旧值。

warp.atomic_add(arr: FabricArray[Any], i: Int, value: Any) Any

原子地将 value 加到 arr[i] 上并返回旧值。

warp.atomic_add(arr: FabricArray[Any], i: Int, j: Int, value: Any) Any

原子地将 value 加到 arr[i,j] 上并返回旧值。

warp.atomic_add(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

原子地将 value 加到 arr[i,j,k] 上并返回旧值。

warp.atomic_add(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

原子地将 value 加到 arr[i,j,k,l] 上并返回旧值。

warp.atomic_add(arr: IndexedFabricArray[Any], i: Int, value: Any) Any

原子地将 value 加到 arr[i] 上并返回旧值。

warp.atomic_add(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
value: Any,
) Any

原子地将 value 加到 arr[i,j] 上并返回旧值。

warp.atomic_add(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

原子地将 value 加到 arr[i,j,k] 上并返回旧值。

warp.atomic_add(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

原子地将 value 加到 arr[i,j,k,l] 上并返回旧值。

warp.atomic_sub(arr: Array[Any], i: Int, value: Any) Any#

原子地从 arr[i] 中减去 value 并返回旧值。

warp.atomic_sub(arr: Array[Any], i: Int, j: Int, value: Any) Any

原子地从 arr[i,j] 中减去 value 并返回旧值。

warp.atomic_sub(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) Any

原子地从 arr[i,j,k] 中减去 value 并返回旧值。

warp.atomic_sub(
arr: Array[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

原子地从 arr[i,j,k,l] 中减去 value 并返回旧值。

warp.atomic_sub(arr: FabricArray[Any], i: Int, value: Any) Any

原子地从 arr[i] 中减去 value 并返回旧值。

warp.atomic_sub(arr: FabricArray[Any], i: Int, j: Int, value: Any) Any

原子地从 arr[i,j] 中减去 value 并返回旧值。

warp.atomic_sub(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

原子地从 arr[i,j,k] 中减去 value 并返回旧值。

warp.atomic_sub(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

原子地从 arr[i,j,k,l] 中减去 value 并返回旧值。

warp.atomic_sub(arr: IndexedFabricArray[Any], i: Int, value: Any) Any

原子地从 arr[i] 中减去 value 并返回旧值。

warp.atomic_sub(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
value: Any,
) Any

原子地从 arr[i,j] 中减去 value 并返回旧值。

warp.atomic_sub(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

原子地从 arr[i,j,k] 中减去 value 并返回旧值。

warp.atomic_sub(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

原子地从 arr[i,j,k,l] 中减去 value 并返回旧值。

warp.atomic_min(arr: Array[Any], i: Int, value: Any) Any#

计算 valuearr[i] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(arr: Array[Any], i: Int, j: Int, value: Any) Any

计算 valuearr[i,j] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) Any

计算 valuearr[i,j,k] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(
arr: Array[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

计算 valuearr[i,j,k,l] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(arr: FabricArray[Any], i: Int, value: Any) Any

计算 valuearr[i] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(arr: FabricArray[Any], i: Int, j: Int, value: Any) Any

计算 valuearr[i,j] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

计算 valuearr[i,j,k] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

计算 valuearr[i,j,k,l] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(arr: IndexedFabricArray[Any], i: Int, value: Any) Any

计算 valuearr[i] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
value: Any,
) Any

计算 valuearr[i,j] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

计算 valuearr[i,j,k] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_min(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

计算 valuearr[i,j,k,l] 的最小值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(arr: Array[Any], i: Int, value: Any) Any#

计算 valuearr[i] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(arr: Array[Any], i: Int, j: Int, value: Any) Any

计算 valuearr[i,j] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(arr: Array[Any], i: Int, j: Int, k: Int, value: Any) Any

计算 valuearr[i,j,k] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(
arr: Array[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

计算 valuearr[i,j,k,l] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(arr: FabricArray[Any], i: Int, value: Any) Any

计算 valuearr[i] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(arr: FabricArray[Any], i: Int, j: Int, value: Any) Any

计算 valuearr[i,j] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

计算 valuearr[i,j,k] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(
arr: FabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

计算 valuearr[i,j,k,l] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(arr: IndexedFabricArray[Any], i: Int, value: Any) Any

计算 valuearr[i] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
value: Any,
) Any

计算 valuearr[i,j] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
value: Any,
) Any

计算 valuearr[i,j,k] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.atomic_max(
arr: IndexedFabricArray[Any],
i: Int,
j: Int,
k: Int,
l: Int,
value: Any,
) Any

计算 valuearr[i,j,k,l] 的最大值,原子地更新数组,并返回旧值。

该操作对于向量和矩阵而言仅在每个分量上是原子操作。

warp.lerp(a: Float, b: Float, t: Float) Float#

使用因子 t 对两个值 ab 进行线性插值,计算公式为 a*(1-t) + b*t

warp.lerp(
a: Vector[Any, Float],
b: Vector[Any, Float],
t: Float,
) Vector[Any, Float]

使用因子 t 对两个值 ab 进行线性插值,计算公式为 a*(1-t) + b*t

warp.lerp(
a: Matrix[Any, Any, Float],
b: Matrix[Any, Any, Float],
t: Float,
) Matrix[Any, Any, Float]

使用因子 t 对两个值 ab 进行线性插值,计算公式为 a*(1-t) + b*t

warp.lerp(
a: Quaternion[Float],
b: Quaternion[Float],
t: Float,
) Quaternion[Float]

使用因子 t 对两个值 ab 进行线性插值,计算公式为 a*(1-t) + b*t

warp.lerp(
a: Transformation[Float],
b: Transformation[Float],
t: Float,
) Transformation[Float]

使用因子 t 对两个值 ab 进行线性插值,计算公式为 a*(1-t) + b*t

warp.smoothstep(a: Float, b: Float, x: Float) Float#

使用因子 x 在两个值 ab 之间进行平滑插值,并在钳位后使用三次 Hermite 插值返回一个介于 0 和 1 之间的结果。

warp.expect_near(a: Float, b: Float, tolerance: Float) None#

如果 ab 的大小差超过容差,则向标准输出打印错误。

warp.expect_near(
a: Vector[Any, Float],
b: Vector[Any, Float],
tolerance: Float,
) None

如果 ab 的任何元素的大小差超过容差,则向标准输出打印错误。

warp.expect_near(
a: Quaternion[Float],
b: Quaternion[Float],
tolerance: Float,
) None

如果 ab 的任何元素的大小差超过容差,则向标准输出打印错误。

warp.expect_near(
a: Matrix[Any, Any, Float],
b: Matrix[Any, Any, Float],
tolerance: Float,
) None

如果 ab 的任何元素的大小差超过容差,则向标准输出打印错误。

warp.len(a: Vector[Any, Scalar]) int#

返回向量中的元素数量。

warp.len(a: Quaternion[Scalar]) int

返回四元数中的元素数量。

warp.len(a: Matrix[Any, Any, Scalar]) int

返回矩阵中的行数。

warp.len(a: Transformation[Float]) int

返回变换中的元素数量。

warp.len(a: Array[Any]) int

返回数组第一维的大小。

warp.len(a: Tile) int

返回 tile 中的行数。

几何体#

warp.BvhQuery[source]#

bvh_query_t 的别名

warp.bvh_query_aabb(id: uint64, low: vec3f, high: vec3f) bvh_query_t#

针对 BVH 对象构造一个轴对齐包围盒查询。

此查询可用于遍历 BVH 内的所有边界。

参数:
  • id – BVH 标识符

  • low – 包围盒在 BVH 空间中的下限

  • high – 包围盒在 BVH 空间中的上限

warp.bvh_query_ray(id: uint64, start: vec3f, dir: vec3f) bvh_query_t#

针对 BVH 对象构造一个射线查询。

此查询可用于遍历与射线相交的所有边界。

参数:
  • id – BVH 标识符

  • start – 射线在 BVH 空间中的起点

  • dir – 射线在 BVH 空间中的方向

warp.bvh_query_next(query: bvh_query_t, index: int32) bool#

移动到查询返回的下一个边界。当前边界的索引存储在 index 中,如果没有更多重叠边界则返回 False

warp.MeshQueryPoint[source]#

mesh_query_point_t 的别名

warp.mesh_query_point(
id: uint64,
point: vec3f,
max_dist: float32,
) mesh_query_point_t#

计算具有标识符 idMesh 上离给定空间 point 最近的点。

使用额外的射线投射来确定点在内部还是外部,从而识别距离的符号。这种方法相对健壮,但会增加计算成本。有关其他符号确定方法,请参见下文。

参数:
  • id – 网格标识符

  • point – 要查询的空间中的点

  • max_dist – 距离大于此值的网格面不会被查询考虑

warp.mesh_query_point_no_sign(
id: uint64,
point: vec3f,
max_dist: float32,
) mesh_query_point_t#

计算具有标识符 idMesh 上离给定空间 point 最近的点。

此方法不计算点的符号(内部/外部),因此比其他点查询方法更快。

参数:
  • id – 网格标识符

  • point – 要查询的空间中的点

  • max_dist – 距离大于此值的网格面不会被查询考虑

warp.mesh_query_furthest_point_no_sign(
id: uint64,
point: vec3f,
min_dist: float32,
) mesh_query_point_t#

计算具有标识符 id 的网格上离给定空间点最远的点。

此方法不计算点的符号(内部/外部)。

参数:
  • id – 网格标识符

  • point – 要查询的空间中的点

  • min_dist – 距离小于此值的网格面不会被查询考虑

warp.mesh_query_point_sign_normal(
id: uint64,
point: vec3f,
max_dist: float32,
epsilon: float32,
) mesh_query_point_t#

计算具有标识符 idMesh 上离给定空间 point 最近的点。

使用角度加权伪法向量识别距离的符号(内部/外部)。这种符号确定方法对于条件良好、密闭且不自相交的网格是稳健的。它的计算速度也相对较快。

参数:
  • id – 网格标识符

  • point – 要查询的空间中的点

  • max_dist – 距离大于此值的网格面不会被查询考虑

  • epsilon – 在定位最小距离顶点/面/边时,将距离值视为相等的 epsilon,以平均边长的分数表示,也用于将最近点视为在边/顶点上,默认为 1e-3

warp.mesh_query_point_sign_winding_number(
id: uint64,
point: vec3f,
max_dist: float32,
accuracy: float32,
threshold: float32,
) mesh_query_point_t#

计算具有标识符 idMesh 上离给定空间点最近的点。

使用网格相对于查询点的缠绕数来识别符号。这种符号确定方法对于条件不佳的网格是稳健的,即使网格不密闭,也能提供平滑的符号近似。这种方法是所有符号确定网格方法中最稳健、最准确的,但也是最昂贵的。

注意

必须将 Mesh 对象构建时设置 support_winding_number=True,此方法才能返回正确结果。

参数:
  • id – 网格标识符

  • point – 要查询的空间中的点

  • max_dist – 距离大于此值的网格面不会被查询考虑

  • accuracy – 使用利用二阶偶极子近似的快速缠绕数方法计算缠绕数的精度,默认为 2.0

  • threshold – 被视为在内部的缠绕数阈值,默认为 0.5

warp.MeshQueryRay[source]#

mesh_query_ray_t 的别名

warp.mesh_query_ray(
id: uint64,
start: vec3f,
dir: vec3f,
max_t: float32,
) mesh_query_ray_t#

计算与标识符为 idMesh 最接近的射线命中点。

参数:
  • id – 网格标识符

  • start – 射线的起始点

  • dir – 射线方向(应归一化)

  • max_t – 沿射线检查相交点的最大距离

warp.MeshQueryAABB[source]#

mesh_query_aabb_t 的别名

warp.mesh_query_aabb(
id: uint64,
low: vec3f,
high: vec3f,
) mesh_query_aabb_t#

构造针对 Mesh 的轴对齐包围盒查询。

此查询可用于遍历体积内的所有三角形。

参数:
  • id – 网格标识符

  • low – 网格空间中包围盒的下界

  • high – 网格空间中包围盒的上界

warp.mesh_query_aabb_next(query: mesh_query_aabb_t, index: int32) bool#

移动到与查询包围盒重叠的下一个三角形。

当前面的索引存储在 index 中,如果没有更多重叠的三角形,则返回 False

warp.mesh_eval_position(
id: uint64,
face: int32,
bary_u: float32,
bary_v: float32,
) vec3f#

给定面索引和重心坐标,评估 Mesh 上的位置。

warp.mesh_eval_velocity(
id: uint64,
face: int32,
bary_u: float32,
bary_v: float32,
) vec3f#

给定面索引和重心坐标,评估 Mesh 上的速度。

warp.HashGridQuery[source]#

hash_grid_query_t 的别名

warp.hash_grid_query(
id: uint64,
point: vec3f,
max_dist: float32,
) hash_grid_query_t#

构造针对 HashGrid 的点查询。

此查询可用于迭代查询点固定半径内的所有相邻点。

warp.hash_grid_query_next(query: hash_grid_query_t, index: int32) bool#

移动到哈希网格查询中的下一个点。

当前邻居的索引存储在 index 中,如果没有更多邻居,则返回 False

warp.hash_grid_point_id(id: uint64, index: int32) int#

返回 HashGrid 中一个点的索引。

这可用于重新排序线程,以便网格遍历以空间一致的顺序发生。

如果 HashGrid 尚未保留,则返回 -1。

warp.intersect_tri_tri(
v0: vec3f,
v1: vec3f,
v2: vec3f,
u0: vec3f,
u1: vec3f,
u2: vec3f,
) int#

使用 Moller 方法测试两个三角形 (v0, v1, v2) 和 (u0, u1, u2) 之间的相交性。

如果三角形相交,则返回 > 0。

warp.mesh_get(id: uint64) Mesh#

给定网格索引,检索网格。 [1]

warp.mesh_eval_face_normal(id: uint64, face: int32) vec3f#

给定面索引,评估网格的面法线。

warp.mesh_get_point(id: uint64, index: int32) vec3f#

给定索引,返回网格的点。

warp.mesh_get_velocity(id: uint64, index: int32) vec3f#

给定索引,返回网格的速度。

warp.mesh_get_index(id: uint64, index: int32) int#

给定面顶点索引,返回网格的点索引。

warp.closest_point_edge_edge(
p1: vec3f,
q1: vec3f,
p2: vec3f,
q2: vec3f,
epsilon: float32,
) vec3f#

查找两条边之间的最近点。

返回每条边上点的重心权重,以及两条边在这些最近点之间的最近距离。

参数:
  • p1 – 第一条边的第一个点

  • q1 – 第一条边的第二个点

  • p2 – 第二条边的第一个点

  • q2 – 第二条边的第二个点

  • epsilon – 用于确定一条边中的点是否退化的零容差。

  • out – 包含 (s,t,d) 的 vec3 输出,其中 s 在 [0,1] 中是第一条边的重心权重,t 是第二条边的重心权重,d 是这两条边在这些最近点之间的距离。

体积#

warp.volume_sample(
id: uint64,
uvw: vec3f,
sampling_mode: int32,
dtype: Any,
) Any#

在体积局部空间点 uvw 处,采样由 id 给定的类型为 dtype 的体积。

插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR

warp.volume_sample_grad(
id: uint64,
uvw: vec3f,
sampling_mode: int32,
grad: Any,
dtype: Any,
) Any#

在体积局部空间点 uvw 处,采样由 id 给定的体积及其梯度。

插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR

warp.volume_lookup(
id: uint64,
i: int32,
j: int32,
k: int32,
dtype: Any,
) Any#

返回坐标为 ijk 的体素的值,适用于类型为 dtype 的体积。

如果此索引处的体素不存在,此函数将返回背景值。

warp.volume_store(
id: uint64,
i: int32,
j: int32,
k: int32,
value: Any,
) None#

在坐标为 ijk 的体素处存储 value

warp.volume_sample_f(id: uint64, uvw: vec3f, sampling_mode: int32) float#

在体积局部空间点 uvw 处,采样由 id 给定的体积。

插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR

warp.volume_sample_grad_f(
id: uint64,
uvw: vec3f,
sampling_mode: int32,
grad: vec3f,
) float#

在体积局部空间点 uvw 处,采样由 id 给定的体积及其梯度。

插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR

warp.volume_lookup_f(id: uint64, i: int32, j: int32, k: int32) float#

返回坐标为 ijk 的体素的值。

如果此索引处的体素不存在,此函数将返回背景值

warp.volume_store_f(
id: uint64,
i: int32,
j: int32,
k: int32,
value: float32,
) None#

在坐标为 ijk 的体素处存储 value

warp.volume_sample_v(id: uint64, uvw: vec3f, sampling_mode: int32) vec3f#

在体积局部空间点 uvw 处,采样由 id 给定的向量体积。

插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR

warp.volume_lookup_v(id: uint64, i: int32, j: int32, k: int32) vec3f#

返回坐标为 ijk 的体素的向量值。

如果此索引处的体素不存在,此函数将返回背景值。

warp.volume_store_v(
id: uint64,
i: int32,
j: int32,
k: int32,
value: vec3f,
) None#

在坐标为 ijk 的体素处存储 value

warp.volume_sample_i(id: uint64, uvw: vec3f) int#

在体积局部空间点 uvw 处,采样由 id 给定的 int32 体积。

warp.volume_lookup_i(id: uint64, i: int32, j: int32, k: int32) int#

返回坐标为 ijk 的体素的 int32 值。

如果此索引处的体素不存在,此函数将返回背景值。

warp.volume_store_i(
id: uint64,
i: int32,
j: int32,
k: int32,
value: int32,
) None#

在坐标为 ijk 的体素处存储 value

warp.volume_sample_index(
id: uint64,
uvw: vec3f,
sampling_mode: int32,
voxel_data: Array[Any],
background: Any,
) Any#

在体积局部空间点 uvw 处,采样由 id 给定的体积。

已分配体素的值从 voxel_data 数组中读取,background 用作不存在体素的值。插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR。此函数适用于索引网格和经典体积。

warp.volume_sample_grad_index(
id: uint64,
uvw: vec3f,
sampling_mode: int32,
voxel_data: Array[Any],
background: Any,
grad: Any,
) Any#

在体积局部空间点 uvw 处,采样由 id 给定的体积及其梯度。

已分配体素的值从 voxel_data 数组中读取,background 用作不存在体素的值。插值应为 warp.Volume.CLOSESTwp.Volume.LINEAR。此函数适用于索引网格和经典体积。

warp.volume_lookup_index(id: uint64, i: int32, j: int32, k: int32) int32#

返回与坐标为 i, j, k 的体素关联的索引。

如果此索引处的体素不存在,则此函数返回 -1。此函数适用于索引网格和经典体素。

warp.volume_index_to_world(id: uint64, uvw: vec3f) vec3f#

根据体素的固有仿射变换,将体素索引空间中定义的点 uvw 转换为世界空间。

warp.volume_world_to_index(id: uint64, xyz: vec3f) vec3f#

根据体素的固有仿射变换,将体素世界空间中定义的点 xyz 转换为体素的索引空间。

warp.volume_index_to_world_dir(id: uint64, uvw: vec3f) vec3f#

根据体素的固有仿射变换,将体素索引空间中定义的点 uvw 转换为世界空间。

warp.volume_world_to_index_dir(id: uint64, xyz: vec3f) vec3f#

根据体素的固有仿射变换,将体素世界空间中定义的方向 xyz 转换为体素的索引空间。

随机数#

warp.rand_init(seed: int32) uint32#

根据用户定义的种子初始化一个新的随机数生成器。返回一个表示 RNG 状态的 32 位整数。

warp.rand_init(seed: int32, offset: int32) uint32

根据用户定义的种子和偏移量初始化一个新的随机数生成器。

这个替代构造函数在并行程序中很有用,其中整个核函数应该共享一个种子,但每个线程应该生成不相关的数值。在这种情况下,用法应为 r = rand_init(seed, tid)

warp.randi(state: uint32) int#

返回范围 [-2^31, 2^31) 内的随机整数。

warp.randi(state: uint32, low: int32, high: int32) int

返回范围 [low, high) 内的随机整数。

warp.randu(state: uint32) uint32#

返回范围 [0, 2^32) 内的随机无符号整数。

warp.randu(state: uint32, low: uint32, high: uint32) uint32

返回范围 [low, high) 内的随机无符号整数。

warp.randf(state: uint32) float#

返回范围 [0.0, 1.0) 内的随机浮点数。

warp.randf(state: uint32, low: float32, high: float32) float

返回范围 [low, high) 内的随机浮点数。

warp.randn(state: uint32) float#

从均值为 0、方差为 1 的正态(高斯)分布中采样。

warp.sample_cdf(state: uint32, cdf: Array[float32]) int#

逆变换采样累积分布函数。

warp.sample_triangle(state: uint32) vec2f#

均匀地采样一个三角形。返回采样点的重心坐标。

warp.sample_unit_ring(state: uint32) vec2f#

均匀地采样 xy 平面中的环。

warp.sample_unit_disk(state: uint32) vec2f#

均匀地采样 xy 平面中的圆盘。

warp.sample_unit_sphere_surface(state: uint32) vec3f#

均匀地采样单位球体表面。

warp.sample_unit_sphere(state: uint32) vec3f#

均匀地采样单位球体(内部)。

warp.sample_unit_hemisphere_surface(state: uint32) vec3f#

均匀地采样单位半球体表面。

warp.sample_unit_hemisphere(state: uint32) vec3f#

均匀地采样单位半球体(内部)。

warp.sample_unit_square(state: uint32) vec2f#

均匀地采样单位正方形。

warp.sample_unit_cube(state: uint32) vec3f#

均匀地采样单位立方体。

warp.poisson(state: uint32, lam: float32) uint32#

从泊松分布生成随机样本。

参数:
  • state – RNG 状态

  • lam – 分布的期望值

warp.noise(state: uint32, x: float32) float#

1D 非周期性 Perlin 风格噪声。

warp.noise(state: uint32, xy: vec2f) float

2D 非周期性 Perlin 风格噪声。

warp.noise(state: uint32, xyz: vec3f) float

3D 非周期性 Perlin 风格噪声。

warp.noise(state: uint32, xyzt: vec4f) float

4D 非周期性 Perlin 风格噪声。

warp.pnoise(state: uint32, x: float32, px: int32) float#

1D 周期性 Perlin 风格噪声。

warp.pnoise(state: uint32, xy: vec2f, px: int32, py: int32) float

2D 周期性 Perlin 风格噪声。

warp.pnoise(
state: uint32,
xyz: vec3f,
px: int32,
py: int32,
pz: int32,
) float

3D 周期性 Perlin 风格噪声。

warp.pnoise(
state: uint32,
xyzt: vec4f,
px: int32,
py: int32,
pz: int32,
pt: int32,
) float

4D 周期性 Perlin 风格噪声。

warp.curlnoise(
state: uint32,
xy: vec2f,
octaves: uint32,
lacunarity: float32,
gain: float32,
) vec2f#

基于 Perlin 噪声函数梯度构建的无散度向量场。[1]

warp.curlnoise(
state: uint32,
xyz: vec3f,
octaves: uint32,
lacunarity: float32,
gain: float32,
) vec3f

基于三个 Perlin 噪声函数的旋度构建的无散度向量场。[1]

warp.curlnoise(
state: uint32,
xyzt: vec4f,
octaves: uint32,
lacunarity: float32,
gain: float32,
) vec3f

基于三个 Perlin 噪声函数的旋度构建的无散度向量场。[1]

其他#

warp.lower_bound(arr: Array[Scalar], value: Scalar) int#

在排序数组 arr 中搜索大于或等于 value 的最接近元素。

warp.lower_bound(
arr: Array[Scalar],
arr_begin: int32,
arr_end: int32,
value: Scalar,
) int

在排序数组 arr 的范围 [arr_begin, arr_end) 中搜索大于或等于 value 的最接近元素。

warp.bit_and(a: Int, b: Int) Int#
warp.bit_or(a: Int, b: Int) Int#
warp.bit_xor(a: Int, b: Int) Int#
warp.lshift(a: Int, b: Int) Int#
warp.rshift(a: Int, b: Int) Int#
warp.invert(a: Int) Int#

运算符#

warp.add(a: Scalar, b: Scalar) Scalar#
warp.add(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]
warp.add(
a: Quaternion[Scalar],
b: Quaternion[Scalar],
) Quaternion[Scalar]
warp.add(
a: Matrix[Any, Any, Scalar],
b: Matrix[Any, Any, Scalar],
) Matrix[Any, Any, Scalar]
warp.add(
a: Transformation[Scalar],
b: Transformation[Scalar],
) Transformation[Scalar]
warp.add(a: Tile, b: Tile) Tile

将两个 tile 的每个元素相加

warp.sub(a: Scalar, b: Scalar) Scalar#
warp.sub(
a: Vector[Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]
warp.sub(
a: Matrix[Any, Any, Scalar],
b: Matrix[Any, Any, Scalar],
) Matrix[Any, Any, Scalar]
warp.sub(
a: Quaternion[Scalar],
b: Quaternion[Scalar],
) Quaternion[Scalar]
warp.sub(
a: Transformation[Scalar],
b: Transformation[Scalar],
) Transformation[Scalar]
warp.sub(a: Tile, b: Tile) Tile

从 a 中减去 b 的每个元素

warp.mul(a: Scalar, b: Scalar) Scalar#
warp.mul(a: Vector[Any, Scalar], b: Scalar) Vector[Any, Scalar]
warp.mul(a: Scalar, b: Vector[Any, Scalar]) Vector[Any, Scalar]
warp.mul(a: Quaternion[Scalar], b: Scalar) Quaternion[Scalar]
warp.mul(a: Scalar, b: Quaternion[Scalar]) Quaternion[Scalar]
warp.mul(
a: Quaternion[Scalar],
b: Quaternion[Scalar],
) Quaternion[Scalar]
warp.mul(a: Scalar, b: Matrix[Any, Any, Scalar]) Matrix[Any, Any, Scalar]
warp.mul(a: Matrix[Any, Any, Scalar], b: Scalar) Matrix[Any, Any, Scalar]
warp.mul(
a: Matrix[Any, Any, Scalar],
b: Vector[Any, Scalar],
) Vector[Any, Scalar]
warp.mul(
a: Vector[Any, Scalar],
b: Matrix[Any, Any, Scalar],
) Vector[Any, Scalar]
warp.mul(
a: Matrix[Any, Any, Scalar],
b: Matrix[Any, Any, Scalar],
) Matrix[Any, Any, Scalar]
warp.mul(
a: Transformation[Scalar],
b: Transformation[Scalar],
) Transformation[Scalar]
warp.mul(a: Transformation[Scalar], b: Scalar) Transformation[Scalar]
warp.mul(a: Scalar, b: Transformation[Scalar]) Transformation[Scalar]
warp.mul(x: Tile, y: Scalar) Tile

将 tile 的每个元素乘以一个标量

warp.mul(x: Scalar, y: Tile) Tile

将 tile 的每个元素乘以一个标量

warp.mod(a: Scalar, b: Scalar) Scalar#

使用截断除法的模运算。

warp.mod(a: Vector[Any, Scalar], b: Vector[Any, Scalar]) Scalar

使用截断除法的模运算。

warp.div(a: Scalar, b: Scalar) Scalar#
warp.div(a: Vector[Any, Scalar], b: Scalar) Vector[Any, Scalar]
warp.div(a: Scalar, b: Vector[Any, Scalar]) Vector[Any, Scalar]
warp.div(a: Matrix[Any, Any, Scalar], b: Scalar) Matrix[Any, Any, Scalar]
warp.div(a: Scalar, b: Matrix[Any, Any, Scalar]) Matrix[Any, Any, Scalar]
warp.div(a: Quaternion[Scalar], b: Scalar) Quaternion[Scalar]
warp.div(a: Scalar, b: Quaternion[Scalar]) Quaternion[Scalar]
warp.floordiv(a: Scalar, b: Scalar) Scalar#
warp.pos(x: Scalar) Scalar#
warp.pos(x: Vector[Any, Scalar]) Vector[Any, Scalar]
warp.pos(x: Quaternion[Scalar]) Quaternion[Scalar]
warp.pos(x: Matrix[Any, Any, Scalar]) Matrix[Any, Any, Scalar]
warp.neg(x: Scalar) Scalar#
warp.neg(x: Vector[Any, Scalar]) Vector[Any, Scalar]
warp.neg(x: Quaternion[Scalar]) Quaternion[Scalar]
warp.neg(x: Matrix[Any, Any, Scalar]) Matrix[Any, Any, Scalar]
warp.neg(x: Tile) Tile

对tile中的每个元素取反

warp.unot(a: bool) bool#
warp.unot(a: int8) bool
warp.unot(a: uint8) bool
warp.unot(a: int16) bool
warp.unot(a: uint16) bool
warp.unot(a: int32) bool
warp.unot(a: uint32) bool
warp.unot(a: int64) bool
warp.unot(a: uint64) bool
warp.unot(a: Array[Any]) bool

代码生成#

warp.static(expr: Any) Any[source]#

评估一个静态 Python 表达式并将其替换为其结果。

更多详细信息请参阅代码生成指南

内部表达式只能引用定义包含该表达式的 Warp 内核或函数的当前作用域中可用的变量,包括常量变量和在实现函数或内核的当前闭包中捕获的变量。表达式的返回类型必须是 Warp 函数、字符串或在 Warp 内核和函数中支持的类型(目前不包括 Warp 数组,因为它们无法在 Warp 内核中创建)。

脚注