U
    eU                     @  s   d dl mZ d dlZddlmZm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r|eeedd < q|i fddZdS )    )annotationsN   )Image_imagingmathc                   @  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 N)im)selfr    r
   O/var/www/html/StaffProfile/newvenv/lib/python3.8/site-packages/PIL/ImageMath.py__init__   s    z_Operand.__init__c                 C  s   t |trL|jjdkr"|jdS |jjdkr4|jS d|jj }t|n>t |ttfrx| jjdkrxt	d| jj
|S t	d| jj
|S d S )N)1LI)r   Fzunsupported mode: )r   r   r   r   )
isinstancer   r   modeconvert
ValueErrorintfloatr   newsize)r	   im1msgr
   r
   r   Z__fixup   s    

z_Operand.__fixupNc           	   
   C  s  |  |}|d krt|p|j|jd }|  ztt|d |j }W n8 tk
r } zd| d}t	||W 5 d }~X Y nX t
||jj|jj nD|  |}|j|jkr|jdkr|d}|jdkr|d}|j|jkrHt|jd |jd t|jd |jd f}|j|kr.|d| }|j|krH|d| }t|pV|j|jd }|  |  ztt|d |j }W n: tk
r } zd| d}t	||W 5 d }~X Y nX 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	TypeErrorZunopr   idr   mincropZbinopr   )	r	   opr   Zim2r   outer   r   r
   r
   r   apply0   s@    





,z_Operand.applyc                 C  s   | j  d k	S r   )r   Zgetbboxr	   r
   r
   r   __bool__X   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___   s    z_Operand.__pos__c                 C  s   |  d| S )Nnegr,   r)   r
   r
   r   __neg__b   s    z_Operand.__neg__c                 C  s   |  d| |S Naddr,   r	   otherr
   r
   r   __add__f   s    z_Operand.__add__c                 C  s   |  d|| S r1   r,   r3   r
   r
   r   __radd__i   s    z_Operand.__radd__c                 C  s   |  d| |S Nsubr,   r3   r
   r
   r   __sub__l   s    z_Operand.__sub__c                 C  s   |  d|| S r7   r,   r3   r
   r
   r   __rsub__o   s    z_Operand.__rsub__c                 C  s   |  d| |S Nmulr,   r3   r
   r
   r   __mul__r   s    z_Operand.__mul__c                 C  s   |  d|| S r;   r,   r3   r
   r
   r   __rmul__u   s    z_Operand.__rmul__c                 C  s   |  d| |S Ndivr,   r3   r
   r
   r   __truediv__x   s    z_Operand.__truediv__c                 C  s   |  d|| S r?   r,   r3   r
   r
   r   __rtruediv__{   s    z_Operand.__rtruediv__c                 C  s   |  d| |S Nmodr,   r3   r
   r
   r   __mod__~   s    z_Operand.__mod__c                 C  s   |  d|| S rC   r,   r3   r
   r
   r   __rmod__   s    z_Operand.__rmod__c                 C  s   |  d| |S Npowr,   r3   r
   r
   r   __pow__   s    z_Operand.__pow__c                 C  s   |  d|| S rG   r,   r3   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,   r3   r
   r
   r   __and__   s    z_Operand.__and__c                 C  s   |  d|| S rM   r,   r3   r
   r
   r   __rand__   s    z_Operand.__rand__c                 C  s   |  d| |S Norr,   r3   r
   r
   r   __or__   s    z_Operand.__or__c                 C  s   |  d|| S rQ   r,   r3   r
   r
   r   __ror__   s    z_Operand.__ror__c                 C  s   |  d| |S Nxorr,   r3   r
   r
   r   __xor__   s    z_Operand.__xor__c                 C  s   |  d|| S rU   r,   r3   r
   r
   r   __rxor__   s    z_Operand.__rxor__c                 C  s   |  d| |S )Nlshiftr,   r3   r
   r
   r   
__lshift__   s    z_Operand.__lshift__c                 C  s   |  d| |S )Nrshiftr,   r3   r
   r
   r   
__rshift__   s    z_Operand.__rshift__c                 C  s   |  d| |S )Neqr,   r3   r
   r
   r   __eq__   s    z_Operand.__eq__c                 C  s   |  d| |S )Nner,   r3   r
   r
   r   __ne__   s    z_Operand.__ne__c                 C  s   |  d| |S )Nltr,   r3   r
   r
   r   __lt__   s    z_Operand.__lt__c                 C  s   |  d| |S )Nler,   r3   r
   r
   r   __le__   s    z_Operand.__le__c                 C  s   |  d| |S )Ngtr,   r3   r
   r
   r   __gt__   s    z_Operand.__gt__c                 C  s   |  d| |S )Nger,   r3   r
   r
   r   __ge__   s    z_Operand.__ge__)NN)&__name__
__module____qualname____doc__r   r   r(   r*   r-   r.   r0   r5   r6   r9   r:   r=   r>   rA   rB   rE   rF   rI   rJ   rL   rO   rP   rS   rT   rW   rX   rZ   r\   r^   r`   rb   rd   rf   rh   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    rn   c                 C  s   t | jdS )Nr   rm   r)   r
   r
   r   imagemath_float   s    ro   c                 C  s   | j d| |ddS )Nr]   r   r   r,   r3   r
   r
   r   imagemath_equal   s    rq   c                 C  s   | j d| |ddS )Nr_   r   rp   r,   r3   r
   r
   r   imagemath_notequal   s    rr   c                 C  s   |  d| |S )Nr#   r,   r3   r
   r
   r   imagemath_min   s    rs   c                 C  s   |  d| |S )Nmaxr,   r3   r
   r
   r   imagemath_max   s    ru   c                 C  s   t | j|S r   rm   )r	   r   r
   r
   r   imagemath_convert   s    rv   
   Z
imagemath_c                   s   t   t| t|  D ]*}d|ks6tt|r d| d}t|q  |  |   D ]\}}t|drht	| |< qht
| dd fdd t| d	d
tii }z|jW S  tk
r   | Y 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   ' not allowedr   z<string>evalc                   sX   | j D ]}t|tkr| q| jD ](}| kr*|dkr*d| d}t|q*d S )Nr+   r   ry   )	co_conststypeco_namesr   )codeconstnamer   argsZcompiled_codescanr
   r   r      s    


zeval.<locals>.scanZ
__builtinsr+   N)opscopylistkeyshasattrbuiltinsr   updateitemsr   compilerz   r+   r   r    )Z
expression_dictkwkr   vr&   r
   r   r   rz      s$    




rz   )
__future__r   r    r   r   r   rn   ro   rq   rr   rs   ru   rv   r   r   globalsr   r   r   rz   r
   r
   r
   r   <module>   s     $