o
    i`                     @   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dIddZdd Zdd Ze
edd Ze
edJd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(d0d/d eej)d1d/d eej*d2d/d eej+d3d/d eej,d4 eej-d5 eej.d6d/d eej/d7d/d eej0d8d/d eej1d9d/d eej2d:d.d/d eej3d;d0d/d eej4d<d1d/d eej5d=d2d/d eej6d>d3d/d eej7d?d6d/d eej8d@d7d/d eej9dAd8d/d eej:dBd9d/d eej;dCd/d eej<dDd/d eej=dEd/d eej>dFdCd/d eej?dGdDd/d eej@dHdEd/d dS )Kz_
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
   t/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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                    sL   t   fdd}tur tt|j}|tt|ks J 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   complexr   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_overload0   s   r1   c                 C   sV   || j v r)t|}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!   )cls_typemethodr	   r0   r   r
   r
   r   r&   G   s   

r&   c                 C   s$   || j v rd| d}t|dS dS )z __complex__ needs special treatment as the argument names are kwargs
    and therefore specific in name and default value.
    z+
def func(real=0, imag=0):
    return real.z()
r   N)r4   r!   )r5   r6   r   r
   r
   r   try_call_complex_methodU   s   

r7   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>e   s     ztake_first.<locals>.<genexpr>N)all)r+   r:   r
   r
   r   r*   a   s   r*   c                 C   s6   t | d}d| jv rdd }nd }dd }t|||S )N__bool____len__c                 S      t t| S r8   )boolr   xr
   r
   r   using_len_implp   s   z"class_bool.<locals>.using_len_implc                 S   s   dS )NTr
   rA   r
   r
   r   <lambda>u   s    zclass_bool.<locals>.<lambda>r&   r4   r*   )rB   Zusing_bool_implrC   Zalways_true_implr
   r
   r   
class_boolk   s   


rF   c                 C   s   t t| ddddS )N__complex__r   c                 S   r?   r8   )r   floatrealimagr
   r
   r   rD   ~       zclass_complex.<locals>.<lambda>r   r   )r*   r7   rI   r
   r
   r   class_complexz   s   rN   c                 C   s   t | ddS )N__contains__r   r%   rB   yr
   r
   r   class_contains   s   rR   c                 C   s,   t | dg}d| jv r|dd  t| S )N	__float__	__index__c                 S   s   t |  S r8   )rH   rT   rA   r
   r
   r   rD      rL   zclass_float.<locals>.<lambda>)r&   r4   appendr*   rB   r+   r
   r
   r   class_float   s   
rW   c                 C   s$   t | dg}|t | d t| S )N__int__rT   )r&   rU   r*   rV   r
   r
   r   	class_int   s   rY   c                 C   s   t t| ddd S )N__str__c                 S   s   t | S r8   )reprrA   r
   r
   r   rD      s    zclass_str.<locals>.<lambda>r*   r&   rA   r
   r
   r   	class_str   s   r]   c                 C   s   t t| dddd S )N__ne__r   c                 S   s
   | |k S r8   r
   rP   r
   r
   r   rD      s   
 zclass_ne.<locals>.<lambda>r\   rP   r
   r
   r   class_ne   s   
r_   c                    s    fdd}t | | d S )Nc                    s>   t | d  dd}d d|jv rdd }nd }t||S )Nr$   r   c                 S   s   || kS r8   r
   rP   r
   r
   r   reflected_impl   s   zEregister_reflected_overload.<locals>.class_lt.<locals>.reflected_implrE   )rB   rQ   Znormal_implr`   meth_forwardmeth_reflectedr
   r   class_lt   s
   

z-register_reflected_overload.<locals>.class_lt)r   )r   rb   rc   rd   r
   ra   r   register_reflected_overload   s   re   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   rM   )A__doc__	functoolsr   r   operatorZnumba.core.extendingr   Znumba.core.typesr   r   r   r!   r1   r&   r7   r*   r@   rF   r   rN   containsrR   rH   rW   intrY   strr]   ner_   re   rf   r   rg   rh   rj   ri   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   and_or_r   r   r   r   r
   r
   r
   r   <module>   s|    	











