# Opyrators
Opyrators is a lightweight python package that represents many-body fermion- and spin-operators as strings.

For example, the fermionic string "012003" stands for
a 6-site operator formed by a creation operator on site 2, an annihilation operator on site 3, a density operator on site 6 and identity operators on the rest. [See the encodings below](#encodings).

In this representation, operator manipulations such as addition and multiplication are easily implemented. Super useful if you want to quickly compute commutators (and/or use this for research projects). [See the example below](#example).

## Installation
```python
pip install opyrators
```

## Example
Here is a quick example showing some of the basic features of fermionic opyrators.

```python
# Import the fermion operators.
from fermions import operator

# The operator takes a dictionary as input, with its key-value pairs being
# the operator string and its coefficient.
A = operator({"112233":1.3})
B = operator({"221133":0.34})
C = A * B - B * A

# The output of the print operation shows that this complex
# operator consists of 6 terms, but is fully diagonal.
print(C)
# Term 0: 330033 0.442
# Term 1: 330333 -0.442
# Term 2: 333033 -0.442
# Term 3: 003333 -0.442
# Term 4: 033333 0.442
# Term 5: 303333 0.442

# As another example, here is an operator describing the hopping terms on a
# 3-site periodic lattice.
J = operator({"120":1, "012":1, "201":1})
J = J + J.conj()
```

## Encodings
### Fermions
For particles, the encoding works as follows:
* 0 = Identity operator
* 1 = Creation operator
* 2 = Annihilation operator
* 3 = Density operator

### Spins
For spin-1/2 operators, the encoding works as follows:
* 0 = Identity operator
* 1 = Pauli-X operator
* 2 = Pauli-Y operator
* 3 = Pauli-Z operator

An operator with X on site 2, Y on site 4 and Z on site 5, in a system of 8 sites, hence would be "01023000".
