3
	jQc                 @   s   d dl mZmZ yddlZW n  ek
r<   ddlZeZY nX dZdd ZG d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x:ee j D ](\ZZedd dkreeedd < qW i fddZdS )   )Image_imagingmath    Nc             C   s   t | tpt | tS )N)
isinstanceintfloat)v r	   //usr/lib/python3/dist-packages/PIL/ImageMath.py_isconstant   s    r   c               @   sD  e Zd ZdZdd Zdd ZdGddZd	d
 Zee	kr<e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d'd( Zee	kreZeZ[[d)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Z d3d4 Z!d5d6 Z"d7d8 Z#d9d: Z$d;d< Z%d=d> Z&d?d@ Z'dAdB Z(dCdD Z)dEdF Z*dS )H_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rF|jjdkr"|jjdS |jjdkr4|jS td|jj n8t|rl| jjdkrltjd| jj	|S tjd| jj	|S d 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rtj|p|j|jd }|j  ytt|d |j }W n  tk
rh   t	d| Y nX tj
||jj|jj nX| j |}|j|jkr|jdkr|jd}|jdkr|jd}|j|jkrtd|j|jkr\t|jd |jd t|jd |jd f}|j|kr*|jd| }|j|krD|jd| }tj|pR|j|d }ntj|pj|j|jd }|j  |j  ytt|d |j }W n" tk
r   t	d| Y nX t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__)NN)+__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                s   t j   j|  j| x.t j D ]\}}t|dr*t| |< q*W t| dd fdd tj	| ddt
ii }y|jS  tk
r   |S X d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   z<string>evalc                sX   x&| j D ]}t|tkr| qW x*| jD ] }| kr0|dkr0td| q0W d S )Nr&   z'%s' not allowed)	co_conststypeco_namesr   )codeZconstname)argscompiled_codescanr	   r
   rp     s    zeval.<locals>.scanZ
__builtinsr&   N)opscopyupdatelistitemshasattrr   compilebuiltinsrh   r&   r   r   )Z
expressionZ_dictkwkr   r#   r	   )rn   ro   rp   r
   rh      s    


	rh   ) r   r   rx   ImportErrorZ__builtin__VERBOSEr   objectr   r_   r`   ra   rb   rc   re   rf   rq   rt   globalsru   rz   r   rh   r	   r	   r	   r
   <module>   s*   
 2