
 X*                 @   s?  d  d l  m Z d  d l  m Z y d  d l Z Wn$ e k
 rV 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)_imagingmathNc             C   s   t  |  t  p t  |  t  S)N)
isinstanceintfloat)v r   J/home/ubuntu/projects/ifolica/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   )_Operand__fixupr   r   r   r   loadgetattrr   AttributeError	TypeErrorZunopr   idr   r   minZcropZbinopr   )r   opr   Zim2r   outr   r   r   r	   apply9   sD    !
" !!

(z_Operand.applyc             C   s   |  j  j   d  k	 S)N)r   Zgetbbox)r   r   r   r	   __bool__d   s    z_Operand.__bool__c             C   s   |  j  d |   S)Nabs)r$   )r   r   r   r	   __abs__m   s    z_Operand.__abs__c             C   s   |  S)Nr   )r   r   r   r	   __pos__p   s    z_Operand.__pos__c             C   s   |  j  d |   S)Nneg)r$   )r   r   r   r	   __neg__s   s    z_Operand.__neg__c             C   s   |  j  d |  |  S)Nadd)r$   )r   otherr   r   r	   __add__w   s    z_Operand.__add__c             C   s   |  j  d | |   S)Nr+   )r$   )r   r,   r   r   r	   __radd__z   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   )ZPILr   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*   "