B ë˜Þ] ã@sîddlmZmZddlmZy ddlZWn ek rHddlZeZYnXdZdd„Z Gdd„de ƒZ d d „Z d d „Z d d„Zdd„Zdd„Zdd„Zdd„ZiZx:eeƒ ¡ƒD](\ZZedd…dkr²eeedd…<q²Wifdd„ZdS)é)ÚImageÚ _imagingmath)Úpy3éNcCst|ttfƒS)N)Ú isinstanceÚintÚfloat)Úv©r ú//tmp/pip-build-ktz6qwqq/Pillow/PIL/ImageMath.pyÚ _isconstantsr c@s<eZdZdZdd„Zdd„ZdGdd„Zd d „Zes8eZ [d d „Z d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„ZesÀeZeZ[[d)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Z d5d6„Z!d7d8„Z"d9d:„Z#d;d<„Z$d=d>„Z%d?d@„Z&dAdB„Z'dCdD„Z(dEdF„Z)dS)HÚ_Operandz4Wraps an image operand, providing standard operatorscCs ||_dS)N)Úim)Úselfrr r r Ú__init__&sz_Operand.__init__cCs‚t|tƒrF|jjdkr"|j d¡S|jjdkr4|jStd|jjƒ‚n8t|ƒrl|jjdkrlt d|jj |¡St d|jj |¡SdS)N)Ú1ÚLÚI)rÚFzunsupported mode: %s)rrrr) rr rÚmodeÚconvertÚ ValueErrorr rÚnewÚsize)rÚim1r r r Z__fixup)s    z_Operand.__fixupNcCsä| |¡}|dkr„t |p|j|jd¡}| ¡ytt|d|jƒ}Wn tk rht d|ƒ‚YnXt  ||j j |j j ¡nX| |¡}|j|jkrÖ|jdkr®|  d¡}|jdkrÂ|  d¡}|j|jkrÖtdƒ‚|j|jkr\t|jd|jdƒt|jd|jdƒf}|j|kr*| d|¡}|j|krD| d|¡}t |pR|j|d¡}nt |pj|j|jd¡}| ¡| ¡ytt|d|jƒ}Wn"tk r¾t d|ƒ‚YnXt ||j j |j j |j j ¡t|ƒS)NÚ_zbad operand type for '%s'rz mode mismatchrr)rr)Ú_Operand__fixuprrrrÚloadÚgetattrrÚAttributeErrorÚ TypeErrorZunoprÚidrrÚminZcropZbinopr )rÚoprZim2rÚoutrr r r Úapply:sB        ,  z_Operand.applycCs|j ¡dk S)N)rZgetbbox)rr r r Ú__bool__dsz_Operand.__bool__cCs | d|¡S)NÚabs)r%)rr r r Ú__abs__msz_Operand.__abs__cCs|S)Nr )rr r r Ú__pos__psz_Operand.__pos__cCs | d|¡S)NÚneg)r%)rr r r Ú__neg__ssz_Operand.__neg__cCs| d||¡S)NÚadd)r%)rÚotherr r r Ú__add__wsz_Operand.__add__cCs| d||¡S)Nr,)r%)rr-r r r Ú__radd__zsz_Operand.__radd__cCs| d||¡S)NÚsub)r%)rr-r r r Ú__sub__}sz_Operand.__sub__cCs| d||¡S)Nr0)r%)rr-r r r Ú__rsub__€sz_Operand.__rsub__cCs| d||¡S)NÚmul)r%)rr-r r r Ú__mul__ƒsz_Operand.__mul__cCs| d||¡S)Nr3)r%)rr-r r r Ú__rmul__†sz_Operand.__rmul__cCs| d||¡S)NÚdiv)r%)rr-r r r Ú __truediv__‰sz_Operand.__truediv__cCs| d||¡S)Nr6)r%)rr-r r r Ú __rtruediv__Œsz_Operand.__rtruediv__cCs| d||¡S)NÚmod)r%)rr-r r r Ú__mod__sz_Operand.__mod__cCs| d||¡S)Nr9)r%)rr-r r r Ú__rmod__’sz_Operand.__rmod__cCs| d||¡S)NÚpow)r%)rr-r r r Ú__pow__•sz_Operand.__pow__cCs| d||¡S)Nr<)r%)rr-r r r Ú__rpow__˜sz_Operand.__rpow__cCs | d|¡S)NÚinvert)r%)rr r r Ú __invert__£sz_Operand.__invert__cCs| d||¡S)NÚand)r%)rr-r r r Ú__and__¦sz_Operand.__and__cCs| d||¡S)NrA)r%)rr-r r r Ú__rand__©sz_Operand.__rand__cCs| d||¡S)NÚor)r%)rr-r r r Ú__or__¬sz_Operand.__or__cCs| d||¡S)NrD)r%)rr-r r r Ú__ror__¯sz_Operand.__ror__cCs| d||¡S)NÚxor)r%)rr-r r r Ú__xor__²sz_Operand.__xor__cCs| d||¡S)NrG)r%)rr-r r r Ú__rxor__µsz_Operand.__rxor__cCs| d||¡S)NÚlshift)r%)rr-r r r Ú __lshift__¸sz_Operand.__lshift__cCs| d||¡S)NÚrshift)r%)rr-r r r Ú __rshift__»sz_Operand.__rshift__cCs| d||¡S)NÚeq)r%)rr-r r r Ú__eq__¿sz_Operand.__eq__cCs| d||¡S)NÚne)r%)rr-r r r Ú__ne__Âsz_Operand.__ne__cCs| d||¡S)NÚlt)r%)rr-r r r Ú__lt__Åsz_Operand.__lt__cCs| d||¡S)NÚle)r%)rr-r r r Ú__le__Èsz_Operand.__le__cCs| d||¡S)NÚgt)r%)rr-r r r Ú__gt__Ësz_Operand.__gt__cCs| d||¡S)NÚge)r%)rr-r r r Ú__ge__Îsz_Operand.__ge__)NN)*Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr%r&rÚ __nonzero__r(r)r+r.r/r1r2r4r5r7r8r:r;r=r>Z__div__Z__rdiv__r@rBrCrErFrHrIrKrMrOrQrSrUrWrYr r r r r #sV *r cCst|j d¡ƒS)Nr)r rr)rr r r Ú imagemath_intÓsr_cCst|j d¡ƒS)Nr)r rr)rr r r Úimagemath_float×sr`cCs|jd||ddS)NrNr)r)r%)rr-r r r Úimagemath_equalÜsracCs|jd||ddS)NrPr)r)r%)rr-r r r Úimagemath_notequalàsrbcCs| d||¡S)Nr")r%)rr-r r r Ú imagemath_minäsrccCs| d||¡S)NÚmax)r%)rr-r r r Ú imagemath_maxèsrecCst|j |¡ƒS)N)r rr)rrr r r Úimagemath_convertìsrfé Z imagemath_cKsxt ¡}| |¡| |¡x.t| ¡ƒD]\}}t|dƒr*t|ƒ||<q*Wt ||¡}y|j St k rr|SXdS)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. rN) ÚopsÚcopyÚupdateÚlistÚitemsÚhasattrr ÚbuiltinsÚevalrr)Z expressionÚ_dictÚkwÚargsÚkr r$r r r roös    ro)ÚrrZ_utilrrnÚ ImportErrorÚ __builtin__ÚVERBOSEr Úobjectr r_r`rarbrcrerfrhrkÚglobalsrlrsr ror r r r Ús,   1