qop

manipulation on second quantization operators

MIT License

Downloads
281
Stars
3
Committers
1

QOP

Make quantum operators and algebras native in python

Behold, the power of qop.

  • Boson
from qop.boson import *
assert (b0.D*b0)**3 == b0.D*b0+3*b0.D**2*b0**2+b0.D**3*b0**3
  • Fermion
from qop.fermion import *
assert (c0.D*c0)**3 == c0.D*c0
  • Hardcore Boson
from qop.hardcoreboson import *
assert (hb0.D*hb0)**2 ==hb0.D*hb0
assert hb0*hb1 == hb1*hb0
  • Spin
from qop.spin import *
assert s0.x*s0.y == 1j/2*s0.z
assert s0.z*s1.x == -2j*s1.x*s0.x*s0.y
  • Grassmann numbers
from qop.grassmann import *
assert (1+g(0)*g(1))**2 == 1+2*g(0)*g(1)
  • Quaternion numbers
from qop.quaternion import *
assert (1-qi)/(1-qj) == 0.5*(1-qi+qj-qk)
  • Symbols
from qop.symbol import *
a = Symbol("a")
assert np.conj(2+a).evaluate({"a": 1j}) == 2-1j
  • Quantum states
from qop.fermion import *
from qop.state import *
assert Sf("1").D | c1.D * c1 | c1.D | Sf() == 1.0

And mix all, we have

U = Symbol("U")
assert Sf("12").D | U * (np.array([c1.D, c2.D]) @ np.array([c1, c2])) ** 2 | Sf("12") == 4 * U

Or einsum with opt_einsum

from qop.base import *
from qop.symbol import *
from opt_einsum import contract
a,b,c,d = Symbols("abcd")
simplify(contract("ijk,i->jk", d*np.ones([3,3,3]), np.array([a,b,c]), backend="qop"))

See more examples in tests.