Metadata-Version: 2.1
Name: opyrators
Version: 1.0.0
Summary: Manipulate quantum many-body operators
Home-page: https://github.com/everthemore/opyrators
Author: Evert van Nieuwenburg
Author-email: evert.v.nieuwenburg@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=2.7
Description-Content-Type: text/markdown
Requires-Dist: numpy

# 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".


