ó
¡¼™\c           @   s§   d  Z  d d l m Z d d l m Z d d l m Z m Z m Z d d l m	 Z	 d d d g Z
 d e f d	 „  ƒ  YZ d e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d S(   s   Fermionic quantum operators.iÿÿÿÿ(   t   Integer(   t   Operator(   t   HilbertSpacet   Kett   Bra(   t   KroneckerDeltat	   FermionOpt   FermionFockKett   FermionFockBrac           B   sŒ   e  Z d  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   s"  A fermionic operator that satisfies {c, Dagger(c)} == 1.

    Parameters
    ==========

    name : str
        A string that labels the fermionic mode.

    annihilation : bool
        A bool that indicates if the fermionic operator is an annihilation
        (True, default value) or creation operator (False)

    Examples
    ========

    >>> from sympy.physics.quantum import Dagger, AntiCommutator
    >>> from sympy.physics.quantum.fermion import FermionOp
    >>> c = FermionOp("c")
    >>> AntiCommutator(c, Dagger(c)).doit()
    1
    c         C   s   |  j  d S(   Ni    (   t   args(   t   self(    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   name&   s    c         C   s   t  |  j d ƒ S(   Ni   (   t   boolR	   (   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   is_annihilation*   s    c         C   s
   d t  f S(   Nt   c(   t   True(   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   default_args.   s    c         O   s   t  | ƒ d k r% t d | ƒ ‚ n  t  | ƒ d k rP | d t d ƒ f } n  t  | ƒ d k r | d t | d ƒ f } n  t j |  | Œ S(   Ni   i   s"   1 or 2 parameters expected, got %si    (   i   i   (   t   lent
   ValueErrorR    R   t   __new__(   t   clsR	   t   hints(    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR   2   s    c         K   s$   d | k r  | d r  t  d ƒ Sd  S(   Nt   independenti    (   R    t   None(   R
   t   otherR   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _eval_commutator_FermionOp>   s    
c         K   sX   |  j  | j  k r2 |  j rT | j rT t d ƒ Sn" d | k rT | d rT d |  | Sd  S(   Ni   R   i   (   R   R   R    R   (   R
   R   R   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _eval_anticommutator_FermionOpE   s    c         K   s   d |  | S(   Ni   (    (   R
   R   R   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _eval_anticommutator_BosonOpQ   s    c         K   s
   t  d ƒ S(   Ni    (   R    (   R
   R   R   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _eval_commutator_BosonOpU   s    c         C   s   t  t |  j ƒ |  j ƒ S(   N(   R   t   strR   R   (   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _eval_adjointX   s    c         G   s/   |  j  r d t |  j ƒ Sd t |  j ƒ Sd  S(   Ns   {%s}s   {{%s}^\dagger}(   R   R   R   (   R
   t   printerR	   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _print_contents_latex[   s    	c         G   s/   |  j  r d t |  j ƒ Sd t |  j ƒ Sd  S(   Ns   %ss
   Dagger(%s)(   R   R   R   (   R
   R   R	   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _print_contentsa   s    	c         G   sH   d d l  m } | j |  j d | Œ } |  j r6 | S| | d ƒ Sd  S(   Niÿÿÿÿ(   t
   prettyFormi    u   â€ (   t    sympy.printing.pretty.stringpictR"   t   _printR	   R   (   R
   R   R	   R"   t   pform(    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _print_contents_prettyg   s
    	(   t   __name__t
   __module__t   __doc__t   propertyR   R   t   classmethodR   R   R   R   R   R   R   R    R!   R&   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR      s   								c           B   sV   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z	 d „  Z
 RS(   sx   Fock state ket for a fermionic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c         C   s+   | d k r t  d ƒ ‚ n  t j |  | ƒ S(   Ni    i   s   n must be 0 or 1(   i    i   (   R   R   R   (   R   t   n(    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR   {   s    c         C   s   |  j  d S(   Ni    (   t   label(   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR,   €   s    c         C   s   t  S(   N(   R   (   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt
   dual_class„   s    c         C   s   t  ƒ  S(   N(   R   (   R   R-   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _eval_hilbert_spaceˆ   s    c         K   s   t  |  j | j ƒ S(   N(   R   R,   (   R
   t   braR   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt!   _eval_innerproduct_FermionFockBraŒ   s    c         K   sV   | j  r/ |  j d k r" t d ƒ St d ƒ Sn# |  j d k rH t d ƒ St d ƒ Sd  S(   Ni   i    (   R   R,   R   R    (   R
   t   opt   options(    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   _apply_operator_FermionOp   s    	

(   R'   R(   R)   R   R*   R,   R+   R.   R/   R1   R4   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR   p   s   			c           B   s5   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   sx   Fock state bra for a fermionic mode.

    Parameters
    ==========

    n : Number
        The Fock state number.

    c         C   s+   | d k r t  d ƒ ‚ n  t j |  | ƒ S(   Ni    i   s   n must be 0 or 1(   i    i   (   R   R   R   (   R   R,   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR   §   s    c         C   s   |  j  d S(   Ni    (   R-   (   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR,   ¬   s    c         C   s   t  S(   N(   R   (   R
   (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR.   °   s    (   R'   R(   R)   R   R*   R,   R+   R.   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyR   œ   s   		N(   R)   t   sympyR    t   sympy.physics.quantumR   R   R   R   t(   sympy.functions.special.tensor_functionsR   t   __all__R   R   R   (    (    (    s<   lib/python2.7/site-packages/sympy/physics/quantum/fermion.pyt   <module>   s   	`,