a
    ¦¾de½  ã                   @   s²   d dl Z ddlmZm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rxeeedd… < qxi fdd„ZdS )é    Né   )ÚImageÚ_imagingmathc                 C   s   t | ttfƒS ©N)Ú
isinstanceÚintÚfloat)Úv© r
   úF/var/www/sistema_ama/venv/lib/python3.9/site-packages/PIL/ImageMath.pyÚ_isconstant   s    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ƒrL|jjdv r"|j d¡S |jjdv r4|jS d|jj› �}t|ƒ‚n8t|ƒrr| jjdv rrt d| jj	|¡S t d| jj	|¡S d S )N)Ú1ÚLÚI)r   ÚFzunsupported mode: )r   r   r   r   )
r   r   r   ÚmodeÚconvertÚ
ValueErrorr   r   ÚnewÚsize)r   Úim1Úmsgr
   r
   r   Z__fixup!   s    

z_Operand.__fixupNc           	   
   C   sì  |   |¡}|d u ržt |p|j|jd ¡}| ¡  ztt|d |j ƒ}W n: ty‚ } z"d|› d�}t	|ƒ|‚W Y d }~n
d }~0 0 t 
||jj|jj¡ �nF|   |¡}|j|jkrÜ|jdkrÈ| d¡}|jdkrÜ| d¡}|j|jk�rJt|jd |jd ƒt|jd |jd ƒf}|j|k�r0| d| ¡}|j|k�rJ| d| ¡}t |�pX|j|jd ¡}| ¡  | ¡  ztt|d |j ƒ}W n< t�yÆ } z"d|› d�}t	|ƒ|‚W Y d }~n
d }~0 0 t ||jj|jj|jj¡ t|ƒS )NÚ_zbad operand type for 'ú'r   r   r   )r   r   )Ú_Operand__fixupr   r   r   r   ÚloadÚgetattrr   ÚAttributeErrorÚ	TypeErrorÚunopr   Úidr   ÚminZcropÚbinopr   )	r   Úopr   Zim2r   ÚoutÚer   r   r
   r
   r   Úapply3   s@    
 




, z_Operand.applyc                 C   s   | j  ¡ d uS r   )r   Zgetbbox©r   r
   r
   r   Ú__bool__[   s    z_Operand.__bool__c                 C   s   |   d| ¡S )NÚabs©r*   r+   r
   r
   r   Ú__abs___   s    z_Operand.__abs__c                 C   s   | S r   r
   r+   r
   r
   r   Ú__pos__b   s    z_Operand.__pos__c                 C   s   |   d| ¡S )NÚnegr.   r+   r
   r
   r   Ú__neg__e   s    z_Operand.__neg__c                 C   s   |   d| |¡S ©NÚaddr.   ©r   Úotherr
   r
   r   Ú__add__i   s    z_Operand.__add__c                 C   s   |   d|| ¡S r3   r.   r5   r
   r
   r   Ú__radd__l   s    z_Operand.__radd__c                 C   s   |   d| |¡S ©NÚsubr.   r5   r
   r
   r   Ú__sub__o   s    z_Operand.__sub__c                 C   s   |   d|| ¡S r9   r.   r5   r
   r
   r   Ú__rsub__r   s    z_Operand.__rsub__c                 C   s   |   d| |¡S ©NÚmulr.   r5   r
   r
   r   Ú__mul__u   s    z_Operand.__mul__c                 C   s   |   d|| ¡S r=   r.   r5   r
   r
   r   Ú__rmul__x   s    z_Operand.__rmul__c                 C   s   |   d| |¡S ©NÚdivr.   r5   r
   r
   r   Ú__truediv__{   s    z_Operand.__truediv__c                 C   s   |   d|| ¡S rA   r.   r5   r
   r
   r   Ú__rtruediv__~   s    z_Operand.__rtruediv__c                 C   s   |   d| |¡S ©NÚmodr.   r5   r
   r
   r   Ú__mod__�   s    z_Operand.__mod__c                 C   s   |   d|| ¡S rE   r.   r5   r
   r
   r   Ú__rmod__„   s    z_Operand.__rmod__c                 C   s   |   d| |¡S ©NÚpowr.   r5   r
   r
   r   Ú__pow__‡   s    z_Operand.__pow__c                 C   s   |   d|| ¡S rI   r.   r5   r
   r
   r   Ú__rpow__Š   s    z_Operand.__rpow__c                 C   s   |   d| ¡S )NÚinvertr.   r+   r
   r
   r   Ú
__invert__Ž   s    z_Operand.__invert__c                 C   s   |   d| |¡S ©NÚandr.   r5   r
   r
   r   Ú__and__‘   s    z_Operand.__and__c                 C   s   |   d|| ¡S rO   r.   r5   r
   r
   r   Ú__rand__”   s    z_Operand.__rand__c                 C   s   |   d| |¡S ©NÚorr.   r5   r
   r
   r   Ú__or__—   s    z_Operand.__or__c                 C   s   |   d|| ¡S rS   r.   r5   r
   r
   r   Ú__ror__š   s    z_Operand.__ror__c                 C   s   |   d| |¡S ©NÚxorr.   r5   r
   r
   r   Ú__xor__�   s    z_Operand.__xor__c                 C   s   |   d|| ¡S rW   r.   r5   r
   r
   r   Ú__rxor__    s    z_Operand.__rxor__c                 C   s   |   d| |¡S )NÚlshiftr.   r5   r
   r
   r   Ú
__lshift__£   s    z_Operand.__lshift__c                 C   s   |   d| |¡S )NÚrshiftr.   r5   r
   r
   r   Ú
__rshift__¦   s    z_Operand.__rshift__c                 C   s   |   d| |¡S )NÚeqr.   r5   r
   r
   r   Ú__eq__ª   s    z_Operand.__eq__c                 C   s   |   d| |¡S )NÚner.   r5   r
   r
   r   Ú__ne__­   s    z_Operand.__ne__c                 C   s   |   d| |¡S )NÚltr.   r5   r
   r
   r   Ú__lt__°   s    z_Operand.__lt__c                 C   s   |   d| |¡S )NÚler.   r5   r
   r
   r   Ú__le__³   s    z_Operand.__le__c                 C   s   |   d| |¡S )NÚgtr.   r5   r
   r
   r   Ú__gt__¶   s    z_Operand.__gt__c                 C   s   |   d| |¡S )NÚger.   r5   r
   r
   r   Ú__ge__¹   s    z_Operand.__ge__)NN)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r*   r,   r/   r0   r2   r7   r8   r;   r<   r?   r@   rC   rD   rG   rH   rK   rL   rN   rQ   rR   rU   rV   rY   rZ   r\   r^   r`   rb   rd   rf   rh   rj   r
   r
   r
   r   r      sF   
(r   c                 C   s   t | j d¡ƒS )Nr   ©r   r   r   r+   r
   r
   r   Úimagemath_int¾   s    rp   c                 C   s   t | j d¡ƒS )Nr   ro   r+   r
   r
   r   Úimagemath_floatÂ   s    rq   c                 C   s   | j d| |dd�S )Nr_   r   ©r   r.   r5   r
   r
   r   Úimagemath_equalÇ   s    rs   c                 C   s   | j d| |dd�S )Nra   r   rr   r.   r5   r
   r
   r   Úimagemath_notequalË   s    rt   c                 C   s   |   d| |¡S )Nr%   r.   r5   r
   r
   r   Úimagemath_minÏ   s    ru   c                 C   s   |   d| |¡S )NÚmaxr.   r5   r
   r
   r   Úimagemath_maxÓ   s    rw   c                 C   s   t | j |¡ƒS r   ro   )r   r   r
   r
   r   Úimagemath_convert×   s    rx   é
   Z
imagemath_c                    s¦   t  ¡ ‰ ˆ  |¡ ˆ  |¡ tˆ  ¡ ƒD ]\}}t|dƒr(t|ƒˆ |< q(t| ddƒ‰‡ ‡‡fdd„‰ˆˆƒ t 	| ddt
iiˆ ¡}z|jW S  ty    | Y S 0 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   | j D ]}t|ƒtˆƒu rˆ|ƒ q| jD ](}|ˆ vr*|dkr*d|› d�}t|ƒ‚q*d S )Nr-   r   z' not allowed)Ú	co_constsÚtypeÚco_namesr   )ÚcodeÚconstÚnamer   ©ÚargsZcompiled_codeÚscanr
   r   rƒ   ø   s    


zeval.<locals>.scanZ
__builtinsr-   N)ÚopsÚcopyÚupdateÚlistÚitemsÚhasattrr   ÚcompileÚbuiltinsrz   r-   r   r!   )Z
expressionÚ_dictÚkwÚkr	   r(   r
   r�   r   rz   á   s    



rz   )r‹   Ú r   r   r   r   rp   rq   rs   rt   ru   rw   rx   r„   r‡   Úglobalsrˆ   rŽ   r	   rz   r
   r
   r
   r   Ú<module>   s     $