mindchemistry.e3.o3.Irreps
- class mindchemistry.e3.o3.Irreps(irreps=None)[源代码]
O(3)的不可约表示的直和。这个类不包含任何数据,它是一个描述表示的结构。它通常用作库的其他类的参数,以定义函数的输入和输出表示。
- 参数:
irreps (Union[str, Irrep, Irreps, List[Tuple[int]]]) - 表示不可约表示的直和的字符串。
- 异常:
ValueError - 如果 irreps 无法转换为 Irreps。
ValueError - 如果 irreps 的 mul 部分为负。
TypeError - 如果 irreps 的 mul 部分不是 int 类型。
- 支持平台:
Ascend
样例:
>>> from mindchemistry.e3.o3 import Irreps >>> x = Irreps([(100, (0, 1)), (50, (1, 1))]) 100x0e+50x1e >>> x.dim 250 >>> Irreps("100x0e+50x1e+0x2e") 100x0e+50x1e+0x2e >>> Irreps("100x0e+50x1e+0x2e").lmax 1 >>> Irrep("2e") in Irreps("0e+2e") True >>> Irreps(), Irreps("") (, ) >>> Irreps('2x1o+1x0o') * Irreps('2x1o+1x0e') 4x0e+1x0o+2x1o+4x1e+2x1e+4x2e
- count(ir)[源代码]
计算该"ir"的多重性。
- 参数:
ir (Irrep) - 不可约表示。
- 返回:
int,该"ir"的多重性总数。
样例:
>>> Irreps("1o + 3x2e").count("2e") 3
- decompose(v, batch=False)[源代码]
通过 Irreps 对向量进行分解。
- 参数:
v (Tensor) - 要分解的向量。
batch (bool) - 是否重塑结果,使其至少有一个批次维度。默认值:
False
。
- 返回:
Tensors 列表,通过 Irreps 分解后的向量。
- 异常:
TypeError - 如果 v 不是 Tensor。
ValueError - 如果向量 v 的长度与 Irreps 的维度不匹配。
样例:
>>> import mindspore as ms >>> input = ms.Tensor([1, 2, 3]) >>> m = Irreps("1o").decompose(input) >>> print(m) [Tensor(shape=[1,3], dtype=Int64, value= [[1,2,3]])]
- filter(keep=None, drop=None)[源代码]
通过 keep 或 drop 过滤 Irreps。
- 参数:
keep (Union[str, Irrep, Irreps, List[str, Irrep]]) - 要保留的 irrep 列表。默认值:
None
。drop (Union[str, Irrep, Irreps, List[str, Irrep]]) - 要删除的 irrep 列表。默认值:
None
。
- 返回:
Irreps,过滤后的 irreps。
- 异常:
ValueError - 如果 keep 和 drop 都不为 None。
样例:
>>> Irreps("1o + 2e").filter(keep="1o") 1x1o >>> Irreps("1o + 2e").filter(drop="1o") 1x2e
- randn(*size, normalization='component')[源代码]
随机张量。
- 参数:
size (List[int]) - 输出张量的大小,需要包含一个'-1'。
normalization (str) - {'component','norm'},规一化方法的类型。
- 返回:
张量,形状为"size",其中"-1"被"self.dim"代替。
样例:
>>> Irreps("5x0e + 10x1o").randn(5, -1, 5, normalization='norm').shape (5, 35, 5)
- remove_zero_multiplicities()[源代码]
删除任何多重性为零的Irreps。
- 返回:
Irreps。
样例:
>>> Irreps("4x0e + 0x1o + 2x3e").remove_zero_multiplicities() 4x0e+2x3e
- simplify()[源代码]
简化Irreps的表示。
- 返回:
Irreps
样例:
>>> Irreps("1e + 1e + 0e").simplify() 2x1e+1x0e >>> Irreps("1e + 1e + 0e + 1e").simplify() 2x1e+1x0e+1x1e
- sort()[源代码]
按度数对表示进行递增排序。
- 返回:
irreps (Irreps) - 排序后的 Irreps。
p (tuple[int]) - 置换顺序 p[old_index] = new_index。
inv (tuple[int]) - 反转排列顺序 p[new_index] = old_index。
样例:
>>> Irreps("1e + 0e + 1e").sort().irreps 1x0e+1x1e+1x1e >>> Irreps("2o + 1e + 0e + 1e").sort().p (3, 1, 0, 2) >>> Irreps("2o + 1e + 0e + 1e").sort().inv (2, 1, 3, 0)
- static spherical_harmonics(lmax, p=- 1)[源代码]
球面谐波的表示。
- 参数:
lmax (int) - l 的最大值。
p (int) - {1, -1},表示的奇偶性。
- 返回:
Irreps,表示 \((Y^0, Y^1, \dots, Y^{\mathrm{lmax}})\)。
样例:
>>> Irreps.spherical_harmonics(3) 1x0e+1x1o+1x2e+1x3o >>> Irreps.spherical_harmonics(4, p=1) 1x0e+1x1e+1x2e+1x3e+1x4e
- wigD_from_angles(alpha, beta, gamma, k=None)
从欧拉角计算 O(3) 的 Wigner D 矩阵表示。
- 参数:
alpha (Union[Tensor[float32], List[float], Tuple[float], ndarray[np.float32], float]) - 围绕Y轴旋转 \(\alpha\),作用于第三维。
beta (Union[Tensor[float32], List[float], Tuple[float], ndarray[np.float32], float]) - 围绕X轴旋转 \(\beta\),作用于第二维。
gamma (Union[Tensor[float32], List[float], Tuple[float], ndarray[np.float32], float]) - 围绕Y轴旋转 \(\gamma\),作用于第一维。
k (Union[None, Tensor[float32], List[float], Tuple[float], ndarray[np.float32], float]) - 应用奇偶校验的次数。默认值:
None
。
- 返回:
O(3)的张量表示wigner D矩阵。形状为 \((..., 2l+1, 2l+1)\) 的张量。
样例:
>>> m = Irreps("1o").wigD_from_angles(0, 0 ,0, 1) >>> print(m) [[-1, 0, 0], [ 0, -1, 0], [ 0, 0, -1]]
- wigD_from_matrix(R)
从旋转矩阵中得到 O(3) 的 Wigner D 矩阵表示。
- 参数:
R (Tensor) - 旋转矩阵。形状为 \((..., 3, 3)\) 的张量。
- 返回:
O(3)的张量表示wigner D矩阵。形状为 \((..., 2l+1, 2l+1)\) 的张量。
- 异常:
TypeError - 如果 R 不是张量。
样例:
>>> m = Irreps("1o").wigD_from_matrix(-ops.eye(3)) >>> print(m) [[-1, 0, 0], [ 0, -1, 0], [ 0, 0, -1]]