
    xKg`                        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j8                        d        Zd Z eed        ee d        ee!d        eejD                  dd        eejF                  dd        eejH                  dd        eejJ                  dd        eejL                  dd        eejN                  dd 
        eejP                  d!d 
        eejR                  d"d 
        eejT                  d#d 
        eejV                  d$d 
        eejX                  d%        eejZ                  d&        eej\                  d'd 
        eej^                  d(d 
        eej`                  d)d 
        eejb                  d*d 
        eejd                  d+dd 
        eejf                  d,d!d 
        eejh                  d-d"d 
        eejj                  d.d#d 
        eejl                  d/d$d 
        eejn                  d0d'd 
        eejp                  d1d(d 
        eejr                  d2d)d 
        eejt                  d3d*d 
        eejv                  d4d 
        eejx                  d5d 
        eejz                  d6d 
        eej|                  d7d4d 
        eej~                  d8d5d 
        eej                  d9d6d 
       y)<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    i/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/experimental/jitclass/overloads.py	_get_argsr      s!    V:gv    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rAt        t        j                  |      j
                        }|t        t        |            k(  sJ  t              |      S )Nc                  <    t        | d   t              sy  | i |S )Nr   )
isinstancer   )argskwargsfuncs     r   wrappedz;class_instance_overload.<locals>.decorator.<locals>.wrapped   s%    d1g'89(((r   )	r   complexr
   inspect	signature
parametersr   lenr   )r   r   paramstargets   `  r   	decoratorz*class_instance_overload.<locals>.decorator   sg    	t	) 
	)
  '++G4??@FYs6{3333x((r    )r   r   s   ` r   class_instance_overloadr!      s    
) r   c                 (    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j                  |       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            	      `    D cg c]  }t        | d   d| d       }}t        | S c c}w )Nr   __)try_call_method
take_first)r   r   attroptionsattrsr   s       r   overload_funcz/register_simple_overload.<locals>.overload_func<   sL     
 DGr$r]F; 	 
 7##	
s   +)r   joinr   r'   r!   )r   r   r1   	arg_namesr$   r2   s    ``   r   register_simple_overloadr5   0   se     &!I

((9
	 H
 Hf-.$ /$ )"4(77r   c                     || j                   v rJt        |      }ddj                  |       d|d    d| ddj                  |dd        d		}t        |d
      S y)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   r3   r'   )cls_typemethodr   r4   r$   s        r   r-   r-   G   sz    
 %%%f%	

((9
	 aL>6(!CHHYqr]$;#< =  &11 &r   c                 D    || j                   v rd| d}t        |d      S y)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)r9   r'   )r:   r;   r$   s      r   try_call_complex_methodr=   U   s<     %%%   &11 &r   c                  P    t        d | D              sJ |        | D ]  }||c S  y)z)
    Take the first non-None option.
    c              3   R   K   | ]  }|d u xs t        j                  |       ! y wN)r   
isfunction).0os     r   	<genexpr>ztake_first.<locals>.<genexpr>e   s(     C7aqDy1G..q117s   %'N)all)r0   rC   s     r   r.   r.   a   s1     C7CCLWLC=H r   c                 b    t        | d      }d| j                  v rd }nd }d }t        |||      S )N__bool____len__c                 *    t        t        |             S r@   )boolr   xs    r   using_len_implz"class_bool.<locals>.using_len_implp   s    A<r   c                      y)NTr    rK   s    r   <lambda>zclass_bool.<locals>.<lambda>u   s    r   r-   r9   r.   )rL   using_bool_implrM   always_true_impls       r   
class_boolrS   k   s<    %a4OAMM!	  %o~7GHHr   c                 2    t        t        | d      dd      S )N__complex__c                 *    t        t        |             S r@   )r   floatrealimags     r   rO   zclass_complex.<locals>.<lambda>~   s    wuT{3r   r   r   )r.   r=   rX   s     r   class_complexr\   z   s    m43 r   c                     t        | dd      S )N__contains__r   )r-   rL   ys     r   class_containsra      s     1na00r   c                 l    t        | d      g}d| j                  v r|j                  d        t        | S )N	__float__	__index__c                 4    t        | j                               S r@   )rW   rd   rK   s    r   rO   zclass_float.<locals>.<lambda>   s    q{{}!5r   )r-   r9   appendr.   rL   r0   s     r   class_floatrh      s7    q+./G 	q}}$56wr   c                 b    t        | d      g}|j                  t        | d             t        | S )N__int__rd   )r-   rf   r.   rg   s     r   	class_intrk      s/    q),-GNN?1k23wr   c                 0    t        t        | d      d       S )N__str__c                     t        |       S r@   )reprrK   s    r   rO   zclass_str.<locals>.<lambda>   s    $q'r   r.   r-   rK   s    r   	class_strrq      s    9% r   c                 2    t        t        | dd      d       S )N__ne__r   c                     | |k(   S r@   r    r_   s     r   rO   zclass_ne.<locals>.<lambda>   s
    !q&\r   rp   r_   s     r   class_neru      s     
 8Q'! r   c                 6    fd} t        |       |       y )Nc                 n    t        | d dd      }d d|j                  v rd }nd }t        ||      S )Nr,   r   c                     || kD  S r@   r    r_   s     r   reflected_implzEregister_reflected_overload.<locals>.class_lt.<locals>.reflected_impl   s    1ur   rP   )rL   r`   normal_implry   meth_forwardmeth_reflecteds       r   class_ltz-register_reflected_overload.<locals>.class_lt   sI    %a2l^2)>Br"amm3 "N+~66r   )r!   )r   r{   r|   r}   s    `` r   register_reflected_overloadr~      s    	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'   r5   r-   r=   r.   rJ   rS   r   r\   containsra   rW   rh   intrk   strrq   neru   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.2	2 I I ! " **+1 ,1            % &, e $ e $ v & HKKt 4 HKKt 4 HKKt 4 HKKt 4 HKKt 4 uQ 7 **Jq A (1 = uQ 7 uQ 7 u - u - uQ 7 (1 = uQ 7 ))9Q ? a @ ++[*Q O ))9hq I a @ a @ a @ ))9hq I a @ **J	! L a 8 tA 6 uQ 7 a @ ud1 = a @r   