a
    
dc                     @   s  d Z ddlmZ ddlZddlZddlmZ ddlmZ dd Z	dd	 Z
d
d ZddddZdGddZdd Ze
edd Ze
edd Ze
ejdd Ze
edd Ze
edd Ze
edd Ze
ejd d! Zd"d# Zeed$ eed% ee d& eej!d'd( eej"d)d* eej#d(d' eej$d*d) eej%d+d+ eej&d,d-d eej'd.d-d eej(d/d-d eej)d0d-d eej*d1d-d eej+d2 eej,d3 eej-d4d-d eej.d5d-d eej/d6d-d eej0d7d-d eej1d8d,d-d eej2d9d.d-d eej3d:d/d-d eej4d;d0d-d eej5d<d1d-d eej6d=d4d-d eej7d>d5d-d eej8d?d6d-d eej9d@d7d-d eej:dAd-d eej;dBd-d eej<dCd-d eej=dDdAd-d eej>dEdBd-d eej?dFdCd-d dS )Hz_
Overloads for ClassInstanceType for built-in functions that call dunder methods
on an object.
    )wrapsN)overload)ClassInstanceTypec                 C   s   | dv sJ t dd |  S )N)      Zxy)listn_args r
   n/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/experimental/jitclass/overloads.py	_get_args   s    r   c                    s    fdd}|S )zr
    Decorator to add an overload for target that applies when the first argument
    is a ClassInstanceType.
    c                    sD   t   fdd}tt|j}|tt|ks8J t|S )Nc                     s    t | d tsd S  | i |S )Nr   )
isinstancer   )argskwargsfuncr
   r   wrapped   s    z;class_instance_overload.<locals>.decorator.<locals>.wrapped)r   r   inspect	signature
parametersr   lenr   )r   r   paramstargetr   r   	decorator   s
    z*class_instance_overload.<locals>.decoratorr
   )r   r   r
   r   r   class_instance_overload   s    r   c                 C   s   i }t | | || S )zC
    Extract a code-generated function from a string template.
    )exec)templatename	namespacer
   r
   r   extract_template%   s    
r    r   r   c                   sB   t }dd| d}tt|d fdd}t| |S )zd
    Register an overload for func that checks for methods __attr__ for each
    attr in attrs.
    

def func(,z):
    pass
r   c                     s    fddD }t | S )Nc                    s$   g | ]}t  d  d| dqS )r   __try_call_method).0attr)r   r	   r
   r   
<listcomp><   s   zCregister_simple_overload.<locals>.overload_func.<locals>.<listcomp>)
take_first)r   r   optionsattrsr	   )r   r   overload_func:   s    z/register_simple_overload.<locals>.overload_func)r   joinr   r    r   )r   r	   r,   	arg_namesr   r-   r
   r+   r   register_simple_overload.   s    r0   c                 C   sV   || j v rRt|}dd| d|d  d| dd|dd  d		}t|d
S dS )zo
    If method is defined for cls_type, return a callable that calls this method.
    If not, return None.
    r!   r"   z):
    return r   .(r   Nz)
r   )jit_methodsr   r.   r    )Zcls_typemethodr	   r/   r   r
   r
   r   r%   E   s    
r%   c                  G   s8   t dd | D sJ | | D ]}|dur|  S qdS )z)
    Take the first non-None option.
    c                 s   s    | ]}|d u pt |V  qd S N)r   
isfunction)r&   or
   r
   r   	<genexpr>W       ztake_first.<locals>.<genexpr>N)all)r*   r7   r
   r
   r   r)   S   s    r)   c                 C   s6   t | d}d| jv rdd }nd }dd }t|||S )N__bool____len__c                 S   s   t t| S r5   )boolr   xr
   r
   r   using_len_implb   s    z"class_bool.<locals>.using_len_implc                 S   s   dS )NTr
   r>   r
   r
   r   <lambda>g   r9   zclass_bool.<locals>.<lambda>r%   r3   r)   )r?   Zusing_bool_implr@   Zalways_true_implr
   r
   r   
class_bool]   s    


rC   c                 C   s   t t| ddd S )N__complex__c                 S   s   t t| S r5   )complexfloatr>   r
   r
   r   rA   p   r9   zclass_complex.<locals>.<lambda>r)   r%   r>   r
   r
   r   class_complexl   s    rH   c                 C   s   t | ddS )N__contains__r   r$   r?   yr
   r
   r   class_containst   s    rL   c                 C   s,   t | dg}d| jv r$|dd  t| S )N	__float__	__index__c                 S   s   t |  S r5   )rF   rN   r>   r
   r
   r   rA      r9   zclass_float.<locals>.<lambda>)r%   r3   appendr)   r?   r*   r
   r
   r   class_float{   s
    rQ   c                 C   s$   t | dg}|t | d t| S )N__int__rN   )r%   rO   r)   rP   r
   r
   r   	class_int   s    rS   c                 C   s   t t| ddd S )N__str__c                 S   s   t | S r5   )reprr>   r
   r
   r   rA      r9   zclass_str.<locals>.<lambda>rG   r>   r
   r
   r   	class_str   s    rV   c                 C   s   t t| dddd S )N__ne__r   c                 S   s
   | |k S r5   r
   rJ   r
   r
   r   rA      r9   zclass_ne.<locals>.<lambda>rG   rJ   r
   r
   r   class_ne   s    
rX   c                    s    fdd}t | | d S )Nc                    s>   t | d  dd}d d|jv r0dd }nd }t||S )Nr#   r   c                 S   s   || kS r5   r
   rJ   r
   r
   r   reflected_impl   s    zEregister_reflected_overload.<locals>.class_lt.<locals>.reflected_implrB   )r?   rK   Znormal_implrY   meth_forwardmeth_reflectedr
   r   class_lt   s
    
z-register_reflected_overload.<locals>.class_lt)r   )r   r[   r\   r]   r
   rZ   r   register_reflected_overload   s    r^   absr   hashgelegtlteqaddr   floordivlshiftmulmodnegpospowrshiftsubtruediviadd	ifloordivilshiftimulimodipowirshiftisubitruedivandorxoriandiorixor)r   )@__doc__	functoolsr   r   operatorZnumba.core.extendingr   Znumba.core.typesr   r   r   r    r0   r%   r)   r=   rC   rE   rH   containsrL   rF   rQ   intrS   strrV   nerX   r^   r_   r   r`   ra   rc   rb   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   and_or_r|   r}   r~   r   r
   r
   r
   r   <module>   sx   	












