# Irreducible representations

This page is a beginner introduction to the main object of `e3nn`

library: `e3nn.o3.Irreps`

.
All the core component of `e3nn`

can be found in `e3nn.o3`

.
`o3`

stands for the group of 3d orthogonal matrices, which is equivalently the group of rotation and inversion.

```
from e3nn.o3 import Irreps
```

An instance of `e3nn.o3.Irreps`

describe how some data behave under rotation.
The mathematical description of irreps can be found in the API Irreps.

```
irreps = Irreps("1o")
irreps
```

```
1x1o
```

`irreps`

does not contain any data. Under the hood it is simply a tuple of made of other tuples and ints.

```
# Tuple[Tuple[int, Tuple[int, int]]]
# ((multiplicity, (l, p)), ...)
print(len(irreps))
mul_ir = irreps[0] # a tuple
print(mul_ir)
print(len(mul_ir))
mul = mul_ir[0] # an int
ir = mul_ir[1] # another tuple
print(mul)
print(ir)
# print(len(ir)) ir is a tuple of 2 ints but __len__ has been disabled since it is always 2
l = ir[0]
p = ir[1]
print(l, p)
```

```
1
1x1o
2
1
1o
1 -1
```

Our `irreps`

means “transforms like a vector”.
`irreps`

is able to provide the matrix to transform the data under a rotation

```
import torch
t = torch.tensor
# show the transformation matrix corresponding to the inversion
irreps.D_from_angles(alpha=t(0.0), beta=t(0.0), gamma=t(0.0), k=t(1))
```

```
tensor([[-1., -0., -0.],
[-0., -1., -0.],
[-0., -0., -1.]])
```

```
# a small rotation around the y axis
irreps.D_from_angles(alpha=t(0.1), beta=t(0.0), gamma=t(0.0), k=t(0))
```

```
tensor([[ 0.9950, 0.0000, 0.0998],
[ 0.0000, 1.0000, 0.0000],
[-0.0998, 0.0000, 0.9950]])
```

In this example

```
irreps = Irreps("7x0e + 3x0o + 5x1o + 5x2o")
```

the `irreps`

tell us how 7 scalars, 3 pseudoscalars, 5 vectors and 5 odd representation of `l=2`

transforms.
They all transforms independently, this can be seen by visualizing the matrix

```
from e3nn import o3
rot = -o3.rand_matrix()
D = irreps.D_from_matrix(rot)
import matplotlib.pyplot as plt
plt.imshow(D, cmap='bwr', vmin=-1, vmax=1);
```