RepArray#
- class cuequivariance_jax.RepArray(
- reps: dict[int, Rep] | Rep | Irreps | str | dict[int, Irreps] | dict[int, str],
- array: Array,
- layout: IrrepsLayout | None = None,
一个用
cue.Rep
字典装饰的jax.Array
,用于在群表示下变换的轴。示例
您可以通过为每个轴指定
cue.Rep
来创建一个cuex.RepArray
>>> cuex.RepArray({0: cue.SO3(1), 1: cue.SO3(1)}, jnp.eye(3)) {0: 1, 1: 1} [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
默认情况下,不是
cue.Rep
的参数将自动转换为cue.IrrepsAndLayout
>>> with cue.assume(cue.SO3, cue.ir_mul): ... x = cuex.RepArray({0: "1", 1: "2"}, jnp.ones((3, 5))) >>> x {0: 1, 1: 2} [[1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.]] >>> x.rep(0).irreps, x.rep(0).layout (1, (irrep,mul))
IrrepsArray
IrrepsArray
只是RepArray
的一个特例,其中最后一个轴是cue.IrrepsAndLayout
>>> x = cuex.RepArray( ... cue.Irreps("SO3", "2x0"), jnp.zeros((3, 2)), cue.ir_mul ... ) >>> x {1: 2x0} [[0. 0.] [0. 0.] [0. 0.]]
>>> x.is_irreps_array() True
您可以使用默认的群和布局
>>> with cue.assume(cue.SO3, cue.ir_mul): ... cuex.RepArray("2x0", jnp.array([1.0, 2.0])) {0: 2x0} [1. 2.]
算术
支持基本的算术运算,只要它们是等变的
>>> with cue.assume(cue.SO3, cue.ir_mul): ... x = cuex.RepArray("2x0", jnp.array([1.0, 2.0])) ... y = cuex.RepArray("2x0", jnp.array([3.0, 4.0])) ... x + y {0: 2x0} [4. 6.]
>>> 3.0 * x {0: 2x0} [3. 6.]
- is_irreps_array() bool #
检查 RepArray 是否是
IrrepsArray
。IrrepsArray
是一个 RepArray,其中最后一个轴是一个 IrrepsAndLayout。
- property irreps: Irreps#
返回
IrrepsArray
的 Irreps。注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- property layout: IrrepsLayout#
返回
IrrepsArray
的布局。注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- property slice_by_mul: _MulIndexSliceHelper#
返回关于重数的切片。
示例
>>> x = cuex.RepArray( ... cue.Irreps("SO3", "2x0 + 1"), ... jnp.array([1.0, 2.0, 0.0, 0.0, 0.0]), ... cue.ir_mul ... ) >>> x.slice_by_mul[1:4] {0: 0+1} [2. 0. 0. 0.]
注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- transform(
- v: Array,
根据表示变换数组。
- 参数:
v – 角度向量。
示例
>>> x = cuex.RepArray( ... {0: cue.SO3(1), 1: cue.SO3(1)}, jnp.ones((3, 3)) ... ) >>> x {0: 1, 1: 1} [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] >>> x.transform(jnp.array([np.pi, 0.0, 0.0])).array.round(1) Array([[ 1., -1., -1.], [-1., 1., 1.], [-1., 1., 1.]]...)
- property segments: list[Array]#
将数组分割成段。
示例
>>> x = cuex.RepArray( ... cue.Irreps("SO3", "2x0 + 1"), jnp.array([1.0, 2.0, 0.0, 0.0, 0.0]), ... cue.ir_mul ... ) >>> x.segments [Array(...), Array(...)]
注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- filter(
- *,
- keep: str | Sequence[Irrep] | Callable[[MulIrrep], bool] | None = None,
- drop: str | Sequence[Irrep] | Callable[[MulIrrep], bool] | None = None,
- mask: Sequence[bool] | None = None,
过滤 irreps。
- 参数:
keep – 要保留的 Irreps。
drop – 要丢弃的 Irreps。
mask – 用于保留段的布尔掩码。
axis – 要过滤的轴。
示例
>>> x = cuex.RepArray( ... cue.Irreps("SO3", "2x0 + 1"), ... jnp.array([1.0, 2.0, 0.0, 0.0, 0.0]), cue.ir_mul ... ) >>> x.filter(keep="0") {0: 2x0} [1. 2.] >>> x.filter(drop="0") {0: 1} [0. 0. 0.] >>> x.filter(mask=[True, False]) {0: 2x0} [1. 2.]
注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- sort() RepArray #
排序 irreps。
示例
>>> x = cuex.RepArray( ... cue.Irreps("SO3", "1 + 2x0"), ... jnp.array([1.0, 1.0, 1.0, 2.0, 3.0]), cue.ir_mul ... ) >>> x.sort() {0: 2x0+1} [2. 3. 1. 1. 1.]
注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- regroup() RepArray #
清理 irreps。
示例
>>> x = cuex.RepArray( ... cue.Irreps("SO3", "0 + 1 + 0"), jnp.array([0., 1., 2., 3., -1.]), ... cue.ir_mul ... ) >>> x.regroup() {0: 2x0+1} [ 0. -1. 1. 2. 3.]
注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- change_layout(
- layout: IrrepsLayout,
更改
IrrepsArray
的布局。注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。
- move_axis_to_mul(
- axis: int,
将轴移动到重数。
注意
此方法仅适用于
IrrepsArray
。 请参阅is_irreps_array
。