Metadata-Version: 2.1
Name: pyrotation
Version: 0.0.2
Summary: A package to handle rotation in 3D space with pytorch and numpy
Project-URL: Homepage, https://github.com/fzhiheng/pyrotation.git
Author-email: fzhiheng <fzhazr@sjtu.edu.cn>
Maintainer-email: fzhiheng <fzhazr@sjtu.edu.cn>
License-File: LICENSE
Keywords: SE3,SO3,axis-angle,euler,lie algebra,numpy,pytorch,quaternion,rotation,se3,so3
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Dist: numpy
Requires-Dist: plum-dispatch
Requires-Dist: torch
Description-Content-Type: text/markdown

# pyrotation
Interconversion of Euler angles, axis angles, quaternions, and rotation matrix.
Supports `numpy.ndarray` and `torch.Tensor`, and uses `plum-dispatch` to decorate functions of the same name.
In addition, it supports **arbitrary** shapes.

## Installation
```bash
pip install pyrotation
```

## conversion
we use `plum-dispatch` to decorate functions of the same name, so you can use `pyrotation.conversion` to convert between different representations.
We support `numpy.ndarray` and `torch.Tensor`, and the input can be of arbitrary shape.


|      | quaternion | matrix                 | euler_angle | axis_angle |
| ---- | ---------- |------------------------| ----------- | ---------- |
| quaternion | - | `quaternion_from_matrix` | `quaternion_from_euler_angle` | `quaternion_from_axis_angle` |
| matrix | `matrix_from_quaternion` | - | `matrix_from_euler_angle` | `matrix_from_axis_angle` |
| euler_angle | `euler_angle_from_quaternion` | `euler_angle_from_matrix` | - | `euler_angle_from_axis_angle` |
| axis_angle | `axis_angle_from_quaternion` | `axis_angle_from_matrix` | `axis_angle_from_euler_angle` | - |
 
```python
import torch
from pyrotation.conversion import quaternion_from_matrix, euler_angle_from_matrix

# convert a 10x3x3 rotation matrix to a quaternion
R = torch.rand(10, 3, 3)
quat = quaternion_from_matrix(R)
euler_angle = euler_angle_from_matrix(R)

print(quat.shape) # torch.Size([10, 4])
print(euler_angle.shape) # torch.Size([10, 3])
```

We also support conversions between `so3` and `SO3`, `se3` and `SE3`. You can use `SO3_from_so3` and `SE3_from_se3` to convert `so3` and `se3` to `SO3` and `SE3`, 
respectively. Similarly, you can use `so3_from_SO3` and `se3_from_SE3` to convert `SO3` and `SE3` to `so3` and `se3`, respectively.
