o
    e¦ŽjÀ  ã                   @   s¶   d dl Z ddlmZmZ d Zdd„ ZG dd„ dƒZdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zi Zeeƒ  ¡ ƒD ]\ZZedd… dkrReeedd… < q>i fdd„ZdS )é    Né   )ÚImageÚ_imagingmathc                 C   s   t | ttfƒS ©N)Ú
isinstanceÚintÚfloat)Úv© r
   ú//usr/lib/python3/dist-packages/PIL/ImageMath.pyÚ_isconstant   ó   r   c                   @   s"  e Zd ZdZdd„ Zdd„ ZdGd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d%d&„ Zd'd(„ 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 r   )Úim)Úselfr   r
   r
   r   Ú__init__    s   
z_Operand.__init__c                 C   s~   t |tƒr#|jjdv r|j d¡S |jjdv r|jS td|jj› �ƒ‚t|ƒr6| jjdv r6t d| jj	|¡S t d| jj	|¡S )N)Ú1ÚLÚI)r   ÚFzunsupported mode: )r   r   r   r   )
r   r   r   ÚmodeÚconvertÚ
ValueErrorr   r   ÚnewÚsize)r   Úim1r
   r
   r   Ú__fixup#   s   
z_Operand.__fixupNc              
   C   sð  |   |¡}|d u rIt |p|j|jd ¡}| ¡  ztt|d |j ƒ}W n ty9 } z	t	d|› d�ƒ|‚d }~ww t 
||jj|jj¡ t|ƒS |   |¡}|j|jkrr|jdkr^| d¡}|jdkrh| d¡}|j|jkrrtdƒ‚|j|jkr±t|jd |jd ƒt|jd |jd ƒf}|j|krš| d| ¡}|j|kr¦| d| ¡}t |p¬|j|d ¡}nt |p·|j|jd ¡}| ¡  | ¡  ztt|d |j ƒ}W n tyå } z	t	d|› d�ƒ|‚d }~ww t ||jj|jj|jj¡ t|ƒS )	NÚ_zbad operand type for 'ú'r   zmode mismatchr   r   )r   r   )Ú_Operand__fixupr   r   r   r   ÚloadÚgetattrr   ÚAttributeErrorÚ	TypeErrorÚunopr   Úidr   r   ÚminÚcropÚbinopr   )r   Úopr   Úim2r   ÚoutÚer   r
   r
   r   Úapply4   sL   
€ÿ
æ



,

€ÿz_Operand.applyc                 C   s   | j  ¡ d uS r   )r   Úgetbbox©r   r
   r
   r   Ú__bool__^   s   z_Operand.__bool__c                 C   ó   |   d| ¡S )NÚabs©r-   r/   r
   r
   r   Ú__abs__b   ó   z_Operand.__abs__c                 C   s   | S r   r
   r/   r
   r
   r   Ú__pos__e   s   z_Operand.__pos__c                 C   r1   )NÚnegr3   r/   r
   r
   r   Ú__neg__h   r5   z_Operand.__neg__c                 C   ó   |   d| |¡S ©NÚaddr3   ©r   Úotherr
   r
   r   Ú__add__l   r   z_Operand.__add__c                 C   ó   |   d|| ¡S r:   r3   r<   r
   r
   r   Ú__radd__o   r   z_Operand.__radd__c                 C   r9   ©NÚsubr3   r<   r
   r
   r   Ú__sub__r   r   z_Operand.__sub__c                 C   r?   rA   r3   r<   r
   r
   r   Ú__rsub__u   r   z_Operand.__rsub__c                 C   r9   ©NÚmulr3   r<   r
   r
   r   Ú__mul__x   r   z_Operand.__mul__c                 C   r?   rE   r3   r<   r
   r
   r   Ú__rmul__{   r   z_Operand.__rmul__c                 C   r9   ©NÚdivr3   r<   r
   r
   r   Ú__truediv__~   r   z_Operand.__truediv__c                 C   r?   rI   r3   r<   r
   r
   r   Ú__rtruediv__�   r   z_Operand.__rtruediv__c                 C   r9   ©NÚmodr3   r<   r
   r
   r   Ú__mod__„   r   z_Operand.__mod__c                 C   r?   rM   r3   r<   r
   r
   r   Ú__rmod__‡   r   z_Operand.__rmod__c                 C   r9   ©NÚpowr3   r<   r
   r
   r   Ú__pow__Š   r   z_Operand.__pow__c                 C   r?   rQ   r3   r<   r
   r
   r   Ú__rpow__�   r   z_Operand.__rpow__c                 C   r1   )NÚinvertr3   r/   r
   r
   r   Ú
__invert__‘   r5   z_Operand.__invert__c                 C   r9   ©NÚandr3   r<   r
   r
   r   Ú__and__”   r   z_Operand.__and__c                 C   r?   rW   r3   r<   r
   r
   r   Ú__rand__—   r   z_Operand.__rand__c                 C   r9   ©NÚorr3   r<   r
   r
   r   Ú__or__š   r   z_Operand.__or__c                 C   r?   r[   r3   r<   r
   r
   r   Ú__ror__�   r   z_Operand.__ror__c                 C   r9   ©NÚxorr3   r<   r
   r
   r   Ú__xor__    r   z_Operand.__xor__c                 C   r?   r_   r3   r<   r
   r
   r   Ú__rxor__£   r   z_Operand.__rxor__c                 C   r9   )NÚlshiftr3   r<   r
   r
   r   Ú
__lshift__¦   r   z_Operand.__lshift__c                 C   r9   )NÚrshiftr3   r<   r
   r
   r   Ú
__rshift__©   r   z_Operand.__rshift__c                 C   r9   )NÚeqr3   r<   r
   r
   r   Ú__eq__­   r   z_Operand.__eq__c                 C   r9   )NÚner3   r<   r
   r
   r   Ú__ne__°   r   z_Operand.__ne__c                 C   r9   )NÚltr3   r<   r
   r
   r   Ú__lt__³   r   z_Operand.__lt__c                 C   r9   )NÚler3   r<   r
   r
   r   Ú__le__¶   r   z_Operand.__le__c                 C   r9   )NÚgtr3   r<   r
   r
   r   Ú__gt__¹   r   z_Operand.__gt__c                 C   r9   )NÚger3   r<   r
   r
   r   Ú__ge__¼   r   z_Operand.__ge__)NN)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r-   r0   r4   r6   r8   r>   r@   rC   rD   rG   rH   rK   rL   rO   rP   rS   rT   rV   rY   rZ   r]   r^   ra   rb   rd   rf   rh   rj   rl   rn   rp   rr   r
   r
   r
   r   r      sH    
*r   c                 C   ó   t | j d¡ƒS )Nr   ©r   r   r   r/   r
   r
   r   Úimagemath_intÁ   ó   ry   c                 C   rw   )Nr   rx   r/   r
   r
   r   Úimagemath_floatÅ   rz   r{   c                 C   ó   | j d| |dd�S )Nrg   r   ©r   r3   r<   r
   r
   r   Úimagemath_equalÊ   ó   r~   c                 C   r|   )Nri   r   r}   r3   r<   r
   r
   r   Úimagemath_notequalÎ   r   r€   c                 C   r9   )Nr&   r3   r<   r
   r
   r   Úimagemath_minÒ   r   r�   c                 C   r9   )NÚmaxr3   r<   r
   r
   r   Úimagemath_maxÖ   r   rƒ   c                 C   s   t | j |¡ƒS r   rx   )r   r   r
   r
   r   Úimagemath_convertÚ   rz   r„   é
   Ú
imagemath_c                    sæ   t  ¡ ‰ t| ¡ ƒt| ¡ ƒ D ]}d|v stt|ƒr%d|› d�}t|ƒ‚qˆ  |¡ ˆ  |¡ tˆ  ¡ ƒD ]\}}t|dƒrEt	|ƒˆ |< q6t
| ddƒ‰‡ ‡‡fdd„‰ˆˆƒ t | d	d
tiiˆ ¡}z|jW S  tyr   | Y S w )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   ú' not allowedr   z<string>Úevalc                    sT   | j D ]}t|ƒtˆƒkrˆ|ƒ q| jD ]}|ˆ vr'|dkr'td|› d�ƒ‚qd S )Nr2   r   rˆ   )Ú	co_constsÚtypeÚco_namesr   )ÚcodeÚconstÚname©ÚargsÚcompiled_codeÚscanr
   r   r“      s   
€
€þzeval.<locals>.scanÚ
__builtinsr2   )ÚopsÚcopyÚlistÚkeysÚhasattrÚbuiltinsr   ÚupdateÚitemsr   Úcompiler‰   r2   r   r"   )Ú
expressionÚ_dictÚkwÚkÚmsgr	   r+   r
   r�   r   r‰   ä   s*   þ


€	ÿr‰   )rš   Ú r   r   ÚVERBOSEr   r   ry   r{   r~   r€   r�   rƒ   r„   r•   r—   Úglobalsrœ   r¡   r	   r‰   r
   r
   r
   r   Ú<module>   s&    %€