
    J/Ph`                        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 Z	d Z
d Zd	d
dZd:dZd Zd Z e
e          d             Z e
e          d;d            Z e
ej                  d             Z e
e          d             Z e
e          d             Z e
e          d             Z e
ej                  d             Z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 
            eej(        d!d 
            eej)        d"d 
            eej*        d#d 
            eej+        d$d 
            eej,        d%            eej-        d&            eej.        d'd 
            eej/        d(d 
            eej0        d)d 
            eej1        d*d 
            eej2        d+dd 
            eej3        d,d!d 
            eej4        d-d"d 
            eej5        d.d#d 
            eej6        d/d$d 
            eej7        d0d'd 
            eej8        d1d(d 
            eej9        d2d)d 
            eej:        d3d*d 
            eej;        d4d 
            eej<        d5d 
            eej=        d6d 
            eej>        d7d4d 
            eej?        d8d5d 
            eej@        d9d6d 
           dS )<z_
Overloads for ClassInstanceType for built-in functions that call dunder methods
on an object.
    )wrapsN)overload)ClassInstanceTypec                 <    | dv sJ t          d          d |          S )N)      xy)listn_argss    e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/experimental/jitclass/overloads.py	_get_argsr      s(    V::gvg    c                       fd}|S )zr
    Decorator to add an overload for target that applies when the first argument
    is a ClassInstanceType.
    c                     t                      fd            }t          urHt          t          j        |          j                  }|t          t          |                    k    sJ  t                    |          S )Nc                  N    t          | d         t                    sd S  | i |S )Nr   )
isinstancer   )argskwargsfuncs     r   wrappedz;class_instance_overload.<locals>.decorator.<locals>.wrapped   s4    d1g'899 4((((r   )	r   complexr
   inspect	signature
parametersr   lenr   )r   r   paramstargets   `  r   	decoratorz*class_instance_overload.<locals>.decorator   s    	t	) 	) 	) 	) 
	)
   '+G44?@@FYs6{{333333x(((r    )r   r   s   ` r   class_instance_overloadr!      s$    
) ) ) ) ) r   c                 6    i }t          | |           ||         S )zC
    Extract a code-generated function from a string template.
    )exec)templatename	namespaces      r   extract_templater'   '   s#     I9T?r   r   r   c                    t                    }dd                    |           d}t          t          |d                    f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                  6      fdD             }t          | S )Nc                 F    g | ]}t          d          d| d          S )r   __try_call_method).0attrr   r   s     r   
<listcomp>zCregister_simple_overload.<locals>.overload_func.<locals>.<listcomp>>   sA     
 
 
 DG]$]]]F;;
 
 
r   )
take_first)r   r   optionsattrsr   s   `  r   overload_funcz/register_simple_overload.<locals>.overload_func<   s>    
 
 
 
 

 
 
 7##r   )r   joinr   r'   r!   )r   r   r5   	arg_namesr$   r6   s    ``   r   register_simple_overloadr9   0   s     &!!I
((9

  H
 Hf--..$ $ $ $ $ /.$ )"4((777r   c                     || j         v rbt          |          }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   r7   r'   )cls_typemethodr   r8   r$   s        r   r/   r/   G   s    
 %%%f%%	
((9

 aL ! $'HHYqrr]$;$;    &111 &%r   c                 D    || 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)r=   r'   )r>   r?   r$   s      r   try_call_complex_methodrA   U   sE     %%%    &111 &%r   c                  b    t          d | D                       s
J |             | D ]}||c S 	dS )z)
    Take the first non-None option.
    c              3   F   K   | ]}|d u pt          j        |          V  d S N)r   
isfunction)r0   os     r   	<genexpr>ztake_first.<locals>.<genexpr>e   s6      CCaqDy1G.q11CCCCCCr   N)all)r4   rF   s     r   r3   r3   a   s[     CC7CCCCCLLWLLL  =HHH  r   c                 h    t          | d          }d| j        v rd }nd }d }t          |||          S )N__bool____len__c                 :    t          t          |                     S rD   )boolr   xs    r   using_len_implz"class_bool.<locals>.using_len_implp   s    A<<r   c                     dS )NTr    rN   s    r   <lambda>zclass_bool.<locals>.<lambda>u   s     r   r/   r=   r3   )rO   using_bool_implrP   always_true_impls       r   
class_boolrV   k   sT    %a44OAM!!	  	  	  	  %~o~7GHHHr   c                 B    t          t          | d          dd          S )N__complex__r   c                 :    t          t          |                     S rD   )r   floatrealimags     r   rR   zclass_complex.<locals>.<lambda>~   s    wuT{{33 r   r   r   )r3   rA   r[   s     r   class_complexr_   z   s*    m44333  r   c                 $    t          | dd          S )N__contains__r   r.   rO   ys     r   class_containsrd      s     1na000r   c                 t    t          | d          g}d| j        v r|                    d            t          | S )N	__float__	__index__c                 D    t          |                                           S rD   )rZ   rg   rN   s    r   rR   zclass_float.<locals>.<lambda>   s    q{{}}!5!5 r   )r/   r=   appendr3   rO   r4   s     r   class_floatrk      sD    q+../G 	q}$$55666wr   c                 |    t          | d          g}|                    t          | d                     t          | S )N__int__rg   )r/   ri   r3   rj   s     r   	class_intrn      s;    q),,-GNN?1k22333wr   c                 @    t          t          | d          d           S )N__str__c                      t          |           S rD   )reprrN   s    r   rR   zclass_str.<locals>.<lambda>   s    $q'' r   r3   r/   rN   s    r   	class_strrt      s'    9%%  r   c                 B    t          t          | dd          d           S )N__ne__r   c                     | |k     S rD   r    rb   s     r   rR   zclass_ne.<locals>.<lambda>   s    !q&\ r   rs   rb   s     r   class_nerx      s+    
 8Q''!!  r   c                 F    fd} t          |           |           d S )Nc                 t    t          | d dd          }d d|j        v rd }nd }t          ||          S )Nr-   r   c                     || k    S rD   r    rb   s     r   reflected_implzEregister_reflected_overload.<locals>.class_lt.<locals>.reflected_impl   s    1ur   rS   )rO   rc   normal_implr|   meth_forwardmeth_reflecteds       r   class_ltz-register_reflected_overload.<locals>.class_lt   sc    %a)>l)>)>)>BB""""am33    "N+~666r   )r!   )r   r~   r   r   s    `` r   register_reflected_overloadr      sC    	7 	7 	7 	7 	7 	7 "D!!(+++++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   r^   )A__doc__	functoolsr   r   operatornumba.core.extendingr   numba.core.typesr   r   r!   r'   r9   r/   rA   r3   rM   rV   r   r_   containsrd   rZ   rk   intrn   strrt   nerx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   and_or_r   r   r   r   r    r   r   <module>r      s{            ) ) ) ) ) ) . . . . . .  
  *   34 8 8 8 8 8.2 2 2 2	2 	2 	2   I I I !!   "! *++1 1 ,+1                 %%  &%, , ,  e $ $ $  e $ $ $  v & & &  HKt 4 4 4  HKt 4 4 4  HKt 4 4 4  HKt 4 4 4  HKt 4 4 4  uQ 7 7 7 7  *Jq A A A A  (1 = = = =  uQ 7 7 7 7  uQ 7 7 7 7  u - - -  u - - -  uQ 7 7 7 7  (1 = = = =  uQ 7 7 7 7  )9Q ? ? ? ?  a @ @ @ @  +[*Q O O O O  )9hq I I I I  a @ @ @ @  a @ @ @ @  a @ @ @ @  )9hq I I I I  a @ @ @ @  *J	! L L L L  a 8 8 8 8  tA 6 6 6 6  uQ 7 7 7 7  a @ @ @ @  ud1 = = = =  a @ @ @ @ @ @r   