
    .i(                        d dl mZ d dlZddlmZmZ dZerd dlmZ d dl	m
Z
 d dlmZ  G 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eeeeedZd"dZd#dZdS )$    )annotationsN   )Image_imagingmathF)Callable)CodeType)Anyc                  (   e Zd ZdZd2dZd3dZ	 	 d4d5dZd6dZd7dZd7dZ	d7dZ
d8dZd8dZd8dZd8dZd8dZd8dZd8dZd8dZd8dZd8d Zd8d!Zd8d"Zd7d#Zd8d$Zd8d%Zd8d&Zd8d'Zd8d(Zd8d)Zd8d*Zd8d+Zd8d,Z d8d-Z!d8d.Z"d8d/Z#d8d0Z$d8d1Z%d	S )9_Operandz4Wraps an image operand, providing standard operatorsimImage.Imagec                    || _         d S N)r   )selfr   s     I/var/www/html/analyses/venv/lib/python3.11/site-packages/PIL/ImageMath.py__init__z_Operand.__init__!   s        im1_Operand | floatreturnc                   t          |t                    r[|j        j        dv r|j                            d          S |j        j        dv r|j        S d|j        j         }t          |          t          |t          t          f          r.| j        j        dv r t          j	        d| j        j
        |          S t          j	        d| j        j
        |          S )N)1LI)r   Fzunsupported mode: )r   r   r   r   )
isinstancer   r   modeconvert
ValueErrorintfloatr   newsize)r   r   msgs      r   __fixupz_Operand.__fixup$   s    c8$$ 	9v{j((v~~c***
**v836;88 oo% #U|,, 91P1PydglC888ydglC888r   Nopstrim2_Operand | float | Noner   
str | Nonec                   |                      |          }|t          j        |p|j        |j        d           }	 t          t          | d|j                   }n(# t          $ r}d| d}t          |          |d }~ww xY wt          j	        ||
                                |
                                           n|                      |          }	|j        |	j        k    r@|j        dk    r|                    d          }|	j        dk    r|	                    d          }	|j        |	j        k    rt          |j        d         |	j        d                   t          |j        d         |	j        d                   f}
|j        |
k    r|                    d|
z             }|	j        |
k    r|	                    d|
z             }	t          j        |p|j        |j        d           }	 t          t          | d|j                   }n(# t          $ r}d| d}t          |          |d }~ww xY wt          j        ||
                                |
                                |	
                                           t          |          S )N_zbad operand type for ''r   r   r   )r   r   )_Operand__fixupr   r"   r   r#   getattrr   AttributeError	TypeErrorunopgetimr   mincropbinopr   )r   r&   r   r(   r   im_1outer$   im_2r#   s              r   applyz_Operand.apply6   sm    ||C  ;)D-DIty$??C,\b+>+>49+>+>??! , , ,4r444nn!+, b#))++tzz||<<<< <<$$DyDI%%9##<<,,D9##<<,,DyDI%% 	!dil33	!dil33 9$$99Vd]33D9$$99Vd]33D)D-DIty$??C,\b+>+>49+>+>??! , , ,4r444nn!+, r399;;

djjllKKK}}s/   A 
B %A;;B )H	 	
H.H))H.boolc                8    | j                                         d uS r   )r   getbboxr   s    r   __bool__z_Operand.__bool__d   s    w  ,,r   c                .    |                      d|           S )Nabsr;   r?   s    r   __abs__z_Operand.__abs__h       zz%&&&r   c                    | S r    r?   s    r   __pos__z_Operand.__pos__k   s    r   c                .    |                      d|           S )NnegrC   r?   s    r   __neg__z_Operand.__neg__n   rE   r   otherc                0    |                      d| |          S NaddrC   r   rL   s     r   __add__z_Operand.__add__r       zz%u---r   c                0    |                      d||           S rN   rC   rP   s     r   __radd__z_Operand.__radd__u       zz%---r   c                0    |                      d| |          S NsubrC   rP   s     r   __sub__z_Operand.__sub__x   rR   r   c                0    |                      d||           S rW   rC   rP   s     r   __rsub__z_Operand.__rsub__{   rU   r   c                0    |                      d| |          S NmulrC   rP   s     r   __mul__z_Operand.__mul__~   rR   r   c                0    |                      d||           S r]   rC   rP   s     r   __rmul__z_Operand.__rmul__   rU   r   c                0    |                      d| |          S NdivrC   rP   s     r   __truediv__z_Operand.__truediv__   rR   r   c                0    |                      d||           S rc   rC   rP   s     r   __rtruediv__z_Operand.__rtruediv__   rU   r   c                0    |                      d| |          S NmodrC   rP   s     r   __mod__z_Operand.__mod__   rR   r   c                0    |                      d||           S ri   rC   rP   s     r   __rmod__z_Operand.__rmod__   rU   r   c                0    |                      d| |          S NpowrC   rP   s     r   __pow__z_Operand.__pow__   rR   r   c                0    |                      d||           S ro   rC   rP   s     r   __rpow__z_Operand.__rpow__   rU   r   c                .    |                      d|           S )NinvertrC   r?   s    r   
__invert__z_Operand.__invert__   s    zz(D)))r   c                0    |                      d| |          S NandrC   rP   s     r   __and__z_Operand.__and__   rR   r   c                0    |                      d||           S rx   rC   rP   s     r   __rand__z_Operand.__rand__   rU   r   c                0    |                      d| |          S NorrC   rP   s     r   __or__z_Operand.__or__       zz$e,,,r   c                0    |                      d||           S r~   rC   rP   s     r   __ror__z_Operand.__ror__   s    zz$t,,,r   c                0    |                      d| |          S NxorrC   rP   s     r   __xor__z_Operand.__xor__   rR   r   c                0    |                      d||           S r   rC   rP   s     r   __rxor__z_Operand.__rxor__   rU   r   c                0    |                      d| |          S )NlshiftrC   rP   s     r   
__lshift__z_Operand.__lshift__       zz(D%000r   c                0    |                      d| |          S )NrshiftrC   rP   s     r   
__rshift__z_Operand.__rshift__   r   r   c                0    |                      d| |          S )NeqrC   rP   s     r   __eq__z_Operand.__eq__   r   r   c                0    |                      d| |          S )NnerC   rP   s     r   __ne__z_Operand.__ne__   r   r   c                0    |                      d| |          S )NltrC   rP   s     r   __lt__z_Operand.__lt__   r   r   c                0    |                      d| |          S )NlerC   rP   s     r   __le__z_Operand.__le__   r   r   c                0    |                      d| |          S )NgtrC   rP   s     r   __gt__z_Operand.__gt__   r   r   c                0    |                      d| |          S )NgerC   rP   s     r   __ge__z_Operand.__ge__   r   r   )r   r   )r   r   r   r   )NN)
r&   r'   r   r   r(   r)   r   r*   r   r   )r   r<   )r   r   )rL   r   r   r   )&__name__
__module____qualname____doc__r   r.   r;   r@   rD   rH   rK   rQ   rT   rY   r[   r_   ra   re   rg   rk   rm   rq   rs   rv   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   rG   r   r   r   r      s       >>   9 9 9 9, (,+ + + + +\- - - -' ' ' '   ' ' ' '. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .. . . .* * * *. . . .. . . .- - - -- - - -. . . .. . . .1 1 1 11 1 1 1- - - -- - - -- - - -- - - -- - - -- - - - - -r   r   r   r   c                P    t          | j                            d                    S )Nr   r   r   r   r?   s    r   imagemath_intr          DGOOC(()))r   c                P    t          | j                            d                    S )Nr   r   r?   s    r   imagemath_floatr      r   r   rL   r)   c                4    |                      d| |d          S )Nr   r   r   rC   rP   s     r   imagemath_equalr          ::dD%c:222r   c                4    |                      d| |d          S )Nr   r   r   rC   rP   s     r   imagemath_notequalr      r   r   c                0    |                      d| |          S )Nr4   rC   rP   s     r   imagemath_minr          ::eT5)))r   c                0    |                      d| |          S )NmaxrC   rP   s     r   imagemath_maxr      r   r   r   r'   c                P    t          | j                            |                    S r   r   )r   r   s     r   imagemath_convertr      s    DGOOD))***r   )r    r!   equalnotequalr4   r   r   
expressionCallable[[dict[str, Any]], Any]kwr	   c                4   t                                           }|                    |           |                                D ]1\  }}t	          |t
          j                  rt          |          ||<   2 | |          }	 |j        S # t          $ r |cY S w xY w)a1  
    Returns the result of an image function.

    :py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band
    images, use the :py:meth:`~PIL.Image.Image.split` method or
    :py:func:`~PIL.Image.merge` function.

    :param expression: A function that receives a dictionary.
    :param **kw: Values to add to the function's dictionary.
    :return: The expression result. This is usually an image object, but can
             also be an integer, a floating point value, or a pixel tuple,
             depending on the expression.
    )	opscopyupdateitemsr   r   r   r   r0   )r   r   argskvr8   s         r   lambda_evalr      s     88::DKKOOO

 " "1a%% 	"qkkDG
*T

Cv   


s   B BBc                   t                                           |D ]0}d|v st          t          |          rd| d}t	          |          1                    |                                           D ]1\  }}t          |t          j                  rt          |          |<   2t          | dd          dfd
            t          j        | ddt          ii          }	 |j        S # t          $ r |cY S w xY w)a-  
    Evaluates an image expression. This uses Python's ``eval()`` function to process
    the expression string, and carries the security risks of doing so. It is not
    recommended to process expressions without considering this.
    :py:meth:`~lambda_eval` is a more secure alternative.

    :py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band
    images, use the :py:meth:`~PIL.Image.Image.split` method or
    :py:func:`~PIL.Image.merge` function.

    :param expression: A string containing a Python-style expression.
    :param **kw: Values to add to the evaluation context.
    :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 allowedz<string>evalcoder   r   Nonec                    | j         D ]+}t          |          t                    u r |           ,| j        D ]!}|vr|dk    rd| d}t          |          "d S )NrB   r-   r   )	co_conststypeco_namesr   )r   constnamer$   r   compiled_codescans       r   r   zunsafe_eval.<locals>.scan+  s    ^ 	 	EE{{d=1111UM 	& 	&D4DEMM-$--- oo%	& 	&r   
__builtinsrB   N)r   r   r   r   )r   r   hasattrbuiltinsr   r   r   r   r   r   compiler   rB   r   r0   )	r   r   r   r$   r   r8   r   r   r   s	         @@@r   unsafe_evalr     sB   & 88::D " "199!,,9&a&&&CS//!  	KKOOO

 " "1a%% 	"qkkDGJ
F;;M& & & & & & & & 	D
-
\E3<$@$
G
GCv   


s   /C6 6DD)r   r   r   r   )r   r   rL   r)   r   r   )r   r   r   r'   r   r   )r   r   r   r	   r   r	   )r   r'   r   r	   r   r	   )
__future__r   r    r   r   TYPE_CHECKINGcollections.abcr   typesr   typingr	   r   r   r   r   r   r   r   r   r   r   r   rG   r   r   <module>r      s  " # " " " " "  ! ! ! ! ! ! ! ! ((((((e- e- e- e- e- e- e- e-R* * * ** * * *
3 3 3 33 3 3 3* * * ** * * *+ + + +
 "     8/ / / / / /r   