'Performs the action of a creation operator.
If below fermi we try to remove a hole,
if above fermi we try to create a particle.
if general index p we return Kronecker(p,i)*self
where i is a new symbol with restriction above or below.
>>> from sympy import Symbol
>>> from sympy.physics.secondquant import FKet
>>> a = Symbol(\'a\', above_fermi=True)
>>> i = Symbol(\'i\', below_fermi=True)
>>> p = Symbol(\'p\')
>>> FKet([]).up(a)
FockStateFermionKet((a,))
A creator acting on vacuum below fermi vanishes
>>> FKet([]).up(i)
0'

def up(self, i):

    present = (i in self.args[0])
    if self._only_above_fermi(i):
        if present:
            return S.Zero
        else:
            return self._add_orbit(i)
    elif self._only_below_fermi(i):
        if present:
            return self._remove_orbit(i)
        else:
            return S.Zero
    elif present:
        hole = Dummy('i', below_fermi=True)
        return (KroneckerDelta(i, hole) * self._remove_orbit(i))
    else:
        particle = Dummy('a', above_fermi=True)
        return (KroneckerDelta(i, particle) * self._add_orbit(i))
