î
hÐR\  ã               @   s5  d  d l  m Z m Z y d d l Z Wn$ e k
 rL d d l Z e Z Yn Xd Z d d „  Z Gd d „  d e ƒ Z	 d d	 „  Z
 d
 d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z i  Z xP e e ƒ  j ƒ  ƒ D]9 \ Z Z e d d … d k rå e e e d d … <qå qå Wi  d d „ Z d S)é   )ÚImageÚ_imagingmathé    Nc             C   s   t  |  t ƒ p t  |  t ƒ S)N)Ú
isinstanceÚintÚfloat)Úv© r	   úB/var/www/dbchiro/venv/lib/python3.4/site-packages/PIL/ImageMath.pyÚ_isconstant   s    r   c               @   sí  e  Z d  Z d Z d d „  Z d d „  Z d d d d „ Z d	 d
 „  Z e e	 k r` e Z
 [ n  d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d  „  Z d! d" „  Z d# d$ „  Z d% d& „  Z d' d( „  Z e e	 k r5e Z e Z [ [ n  d) d* „  Z d+ d, „  Z d- d. „  Z d/ d0 „  Z d1 d2 „  Z  d3 d4 „  Z! d5 d6 „  Z" d7 d8 „  Z# d9 d: „  Z$ d; d< „  Z% d= d> „  Z& d? d@ „  Z' dA dB „  Z( dC dD „  Z) dE dF „  Z* d S)GÚ_Operandz4Wraps an image operand, providing standard operatorsc             C   s   | |  _  d  S)N)Úim)Úselfr   r	   r	   r
   Ú__init__$   s    z_Operand.__init__c             C   s·   t  | t ƒ rc | j j d k r1 | j j d ƒ S| j j d k rJ | j St d | j j ƒ ‚ nP t | ƒ rš |  j j d k rš t j d |  j j	 | ƒ St j d |  j j	 | ƒ Sd  S)	NÚ1ÚLÚIÚFzunsupported mode: %s)r   r   )r   r   )r   r   r   )
r   r   r   ÚmodeÚconvertÚ
ValueErrorr   r   ÚnewÚsize)r   Úim1r	   r	   r
   Z__fixup'   s    z_Operand.__fixupNc             C   s“  |  j  | ƒ } | d  k r« t j | p- | j | j d  ƒ } | j ƒ  y t t | d | j ƒ } Wn" t k
 rˆ t	 d | ƒ ‚ Yn Xt j
 | | j j | j j ƒ nÞ|  j  | ƒ } | j | j k r2| j d k rí | j d ƒ } n  | j d k r| j d ƒ } n  | j | j k r2t d ƒ ‚ q2n  | j | j k rét | j d | j d ƒ t | j d | j d ƒ f } | j | k r£| j d | ƒ } n  | j | k rÈ| j d | ƒ } n  t j | pÚ| j | d  ƒ } n! t j | pû| j | j d  ƒ } | j ƒ  | j ƒ  y t t | d | j ƒ } Wn" t k
 r`t	 d | ƒ ‚ Yn Xt j | | j j | j j | j j ƒ t | ƒ S)	NÚ_zbad operand type for '%s'r   zmode mismatchr   r   )r   r   )r   r   )Ú_Operand__fixupr   r   r   r   ÚloadÚgetattrr   ÚAttributeErrorÚ	TypeErrorZunopr   Úidr   r   ÚminZcropZbinopr   )r   Úopr   Zim2r   Úoutr   r	   r	   r
   Úapply8   sD    !
" !!

(z_Operand.applyc             C   s   |  j  j ƒ  d  k	 S)N)r   Zgetbbox)r   r	   r	   r
   Ú__bool__c   s    z_Operand.__bool__c             C   s   |  j  d |  ƒ S)NÚabs)r$   )r   r	   r	   r
   Ú__abs__l   s    z_Operand.__abs__c             C   s   |  S)Nr	   )r   r	   r	   r
   Ú__pos__o   s    z_Operand.__pos__c             C   s   |  j  d |  ƒ S)NÚneg)r$   )r   r	   r	   r
   Ú__neg__r   s    z_Operand.__neg__c             C   s   |  j  d |  | ƒ S)NÚadd)r$   )r   Úotherr	   r	   r
   Ú__add__v   s    z_Operand.__add__c             C   s   |  j  d | |  ƒ S)Nr+   )r$   )r   r,   r	   r	   r
   Ú__radd__y   s    z_Operand.__radd__c             C   s   |  j  d |  | ƒ S)NÚsub)r$   )r   r,   r	   r	   r
   Ú__sub__|   s    z_Operand.__sub__c             C   s   |  j  d | |  ƒ S)Nr/   )r$   )r   r,   r	   r	   r
   Ú__rsub__   s    z_Operand.__rsub__c             C   s   |  j  d |  | ƒ S)NÚmul)r$   )r   r,   r	   r	   r
   Ú__mul__‚   s    z_Operand.__mul__c             C   s   |  j  d | |  ƒ S)Nr2   )r$   )r   r,   r	   r	   r
   Ú__rmul__…   s    z_Operand.__rmul__c             C   s   |  j  d |  | ƒ S)NÚdiv)r$   )r   r,   r	   r	   r
   Ú__truediv__ˆ   s    z_Operand.__truediv__c             C   s   |  j  d | |  ƒ S)Nr5   )r$   )r   r,   r	   r	   r
   Ú__rtruediv__‹   s    z_Operand.__rtruediv__c             C   s   |  j  d |  | ƒ S)NÚmod)r$   )r   r,   r	   r	   r
   Ú__mod__Ž   s    z_Operand.__mod__c             C   s   |  j  d | |  ƒ S)Nr8   )r$   )r   r,   r	   r	   r
   Ú__rmod__‘   s    z_Operand.__rmod__c             C   s   |  j  d |  | ƒ S)NÚpow)r$   )r   r,   r	   r	   r
   Ú__pow__”   s    z_Operand.__pow__c             C   s   |  j  d | |  ƒ S)Nr;   )r$   )r   r,   r	   r	   r
   Ú__rpow__—   s    z_Operand.__rpow__c             C   s   |  j  d |  ƒ S)NÚinvert)r$   )r   r	   r	   r
   Ú
__invert__¢   s    z_Operand.__invert__c             C   s   |  j  d |  | ƒ S)NÚand)r$   )r   r,   r	   r	   r
   Ú__and__¥   s    z_Operand.__and__c             C   s   |  j  d | |  ƒ S)Nr@   )r$   )r   r,   r	   r	   r
   Ú__rand__¨   s    z_Operand.__rand__c             C   s   |  j  d |  | ƒ S)NÚor)r$   )r   r,   r	   r	   r
   Ú__or__«   s    z_Operand.__or__c             C   s   |  j  d | |  ƒ S)NrC   )r$   )r   r,   r	   r	   r
   Ú__ror__®   s    z_Operand.__ror__c             C   s   |  j  d |  | ƒ S)NÚxor)r$   )r   r,   r	   r	   r
   Ú__xor__±   s    z_Operand.__xor__c             C   s   |  j  d | |  ƒ S)NrF   )r$   )r   r,   r	   r	   r
   Ú__rxor__´   s    z_Operand.__rxor__c             C   s   |  j  d |  | ƒ S)NÚlshift)r$   )r   r,   r	   r	   r
   Ú
__lshift__·   s    z_Operand.__lshift__c             C   s   |  j  d |  | ƒ S)NÚrshift)r$   )r   r,   r	   r	   r
   Ú
__rshift__º   s    z_Operand.__rshift__c             C   s   |  j  d |  | ƒ S)NÚeq)r$   )r   r,   r	   r	   r
   Ú__eq__¾   s    z_Operand.__eq__c             C   s   |  j  d |  | ƒ S)NÚne)r$   )r   r,   r	   r	   r
   Ú__ne__Á   s    z_Operand.__ne__c             C   s   |  j  d |  | ƒ S)NÚlt)r$   )r   r,   r	   r	   r
   Ú__lt__Ä   s    z_Operand.__lt__c             C   s   |  j  d |  | ƒ S)NÚle)r$   )r   r,   r	   r	   r
   Ú__le__Ç   s    z_Operand.__le__c             C   s   |  j  d |  | ƒ S)NÚgt)r$   )r   r,   r	   r	   r
   Ú__gt__Ê   s    z_Operand.__gt__c             C   s   |  j  d |  | ƒ S)NÚge)r$   )r   r,   r	   r	   r
   Ú__ge__Í   s    z_Operand.__ge__)+Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r%   ÚbytesÚstrZ__nonzero__r'   r(   r*   r-   r.   r0   r1   r3   r4   r6   r7   r9   r:   r<   r=   Z__div__Z__rdiv__r?   rA   rB   rD   rE   rG   rH   rJ   rL   rN   rP   rR   rT   rV   rX   r	   r	   r	   r
   r   !   sV   +r   c             C   s   t  |  j j d ƒ ƒ S)Nr   )r   r   r   )r   r	   r	   r
   Úimagemath_intÒ   s    r_   c             C   s   t  |  j j d ƒ ƒ S)Nr   )r   r   r   )r   r	   r	   r
   Úimagemath_floatÖ   s    r`   c             C   s   |  j  d |  | d d ƒS)NrM   r   r   )r$   )r   r,   r	   r	   r
   Úimagemath_equalÛ   s    ra   c             C   s   |  j  d |  | d d ƒS)NrO   r   r   )r$   )r   r,   r	   r	   r
   Úimagemath_notequalß   s    rb   c             C   s   |  j  d |  | ƒ S)Nr!   )r$   )r   r,   r	   r	   r
   Úimagemath_minã   s    rc   c             C   s   |  j  d |  | ƒ S)NÚmax)r$   )r   r,   r	   r	   r
   Úimagemath_maxç   s    re   c             C   s   t  |  j j | ƒ ƒ S)N)r   r   r   )r   r   r	   r	   r
   Úimagemath_convertë   s    rf   é
   Z
imagemath_c             K   s¥   t  j ƒ  } | j | ƒ | j | ƒ xB t | j ƒ  ƒ D]. \ } } t | d ƒ r9 t | ƒ | | <q9 q9 Wt j |  | ƒ } y | j	 SWn t
 k
 r  | SYn Xd S)aÝ  
    Evaluates an image expression.

    :param expression: A string containing a Python-style expression.
    :param options: Values to add to the evaluation context.  You
                    can either use a dictionary, or one or more keyword
                    arguments.
    :return: The evaluated expression. This is usually an image object, but can
             also be an integer, a floating point value, or a pixel tuple,
             depending on the expression.
    r   N)ÚopsÚcopyÚupdateÚlistÚitemsÚhasattrr   ÚbuiltinsÚevalr   r   )Z
expressionÚ_dictÚkwÚargsÚkr   r#   r	   r	   r
   ro   ô   s    ro   )Ú r   r   rn   ÚImportErrorÚ__builtin__ÚVERBOSEr   Úobjectr   r_   r`   ra   rb   rc   re   rf   rh   rk   Úglobalsrl   rs   r   ro   r	   r	   r	   r
   Ú<module>   s(   ±"