
    ܙdc                        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d9dZd Z e
e          d             Z e
e          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j/        d(d
            eej0        d)d
            eej1        d*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
            eej;        d4d
            eej<        d5d
            eej=        d6d3d
            eej>        d7d4d
            eej?        d8d5d
           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    Elib/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          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   r
   inspect	signature
parametersr   lenr   )r   r   paramstargets   `  r   	decoratorz*class_instance_overload.<locals>.decorator   s    	t	) 	) 	) 	) 
	)
 g'00;<<3v;;//////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   r4   	arg_namesr#   r5   s    ``   r   register_simple_overloadr8   .   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   r6   r&   )cls_typemethodr   r7   r#   s        r   r.   r.   E   s    
 %%%f%%	
((9

 aL ! $'HHYqrr]$;$;    &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)r/   os     r   	<genexpr>ztake_first.<locals>.<genexpr>W   s6      CCaqDy1G.q11CCCCCCr   N)all)r3   rC   s     r   r2   r2   S   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 rA   )boolr   xs    r   using_len_implz"class_bool.<locals>.using_len_implb   s    A<<r   c                     dS )NTr   rK   s    r   <lambda>zclass_bool.<locals>.<lambda>g   s     r   r.   r<   r2   )rL   using_bool_implrM   always_true_impls       r   
class_boolrS   ]   sT    %a44OAM!!	  	  	  	  %~o~7GHHHr   c                 @    t          t          | d          d           S )N__complex__c                 :    t          t          |                     S rA   )complexfloatrK   s    r   rO   zclass_complex.<locals>.<lambda>p   s    '%((## r   r2   r.   rK   s    r   class_complexrZ   l   s'    =))##  r   c                 $    t          | dd          S )N__contains__r   r-   rL   ys     r   class_containsr_   t   s     1na000r   c                 t    t          | d          g}d| j        v r|                    d            t          | S )N	__float__	__index__c                 D    t          |                                           S rA   )rX   rb   rK   s    r   rO   zclass_float.<locals>.<lambda>   s    q{{}}!5!5 r   )r.   r<   appendr2   rL   r3   s     r   class_floatrf   {   sD    q+../G 	q}$$55666wr   c                 |    t          | d          g}|                    t          | d                     t          | S )N__int__rb   )r.   rd   r2   re   s     r   	class_intri      s;    q),,-GNN?1k22333wr   c                 @    t          t          | d          d           S )N__str__c                      t          |           S rA   )reprrK   s    r   rO   zclass_str.<locals>.<lambda>   s    $q'' r   rY   rK   s    r   	class_strrn      s'    9%%  r   c                 B    t          t          | dd          d           S )N__ne__r   c                     | |k     S rA   r   r]   s     r   rO   zclass_ne.<locals>.<lambda>   s    !q&\ r   rY   r]   s     r   class_nerr      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 rA   r   r]   s     r   reflected_implzEregister_reflected_overload.<locals>.class_lt.<locals>.reflected_impl   s    1ur   rP   )rL   r^   normal_implrv   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   rx   ry   rz   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   )@__doc__	functoolsr   r   operatornumba.core.extendingr   numba.core.typesr   r   r    r&   r8   r.   r2   rJ   rS   rW   rZ   containsr_   rX   rf   intri   strrn   nerr   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      sg            ) ) ) ) ) ) . . . . . .  
  &   34 8 8 8 8 8.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   