
    xKg7                     T   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z)  eddddd      Z* G d de*e      Z+ G d de
      Z, e,       Z- G d dej\                        Z/e/eed   <   d Z0d Z1d  Z2ejf                  ejh                  ejj                  ejl                  d!Z7d" Z8ed#        Z9 G d$ d%e:      Z; G d& d'e;      Z< G d( d)e;      Z=d* Z>y)+    N)contextmanager)configtargetconfig)jit)TargetDescriptor)	is_jitted)NumbaDeprecationWarning)TargetOptionsinclude_default_options)
cpu_target)dispatcher_registrytarget_registry)utilstypes	serializecompilersigutils)as_dtype)	_internal)parse_signature)build_ufunc_wrapperbuild_gufunc_wrapper)FunctionCache	NullCache)global_compiler_locknopythonforceobjboundscheckfastmathwritable_argsc                       e Zd Zd Zy)UFuncTargetOptionsc                 J   |j                  d      sd|_        |j                  d      sd|_        |j                  dd       |j                  d      st        j
                  |_        |j                  d      s|j                  |_        d|_        |j                  d       y )	Nenable_pyobjectTenable_loopliftnrt)default	debuginfor   r   )	is_setr$   r%   inherit_if_not_setr   DEBUGINFO_DEFAULTr(   r   enable_pyobject_looplift)selfflagsoptionss      _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/np/ufunc/ufuncbuilder.pyfinalizezUFuncTargetOptions.finalize#   s    ||-.$(E!||-.$(E!   5||K($66EO||M* %E)-&  ,    N)__name__
__module____qualname__r1    r2   r0   r"   r"   !   s    -r2   r"   c                   B     e Zd ZeZ fdZed        Zed        Z xZ	S )UFuncTargetc                 $    t         |   d       y )Nufunc)super__init__)r-   	__class__s    r0   r<   zUFuncTarget.__init__:   s    !r2   c                 "    t         j                  S N)r   typing_contextr-   s    r0   r@   zUFuncTarget.typing_context=       (((r2   c                 "    t         j                  S r?   )r   target_contextrA   s    r0   rD   zUFuncTarget.target_contextA   rB   r2   )
r3   r4   r5   r"   r/   r<   propertyr@   rD   __classcell__)r=   s   @r0   r8   r8   7   s5     G" ) ) ) )r2   r8   c                   L    e Zd ZdZeZi i fdZd Zed        Z	d Z
i fdZd Zy)	UFuncDispatcherzK
    An object handling compilation of various signatures for a ufunc.
    c                 ~    || _         t        j                         | _        || _        || _        t               | _        y r?   )py_funcr   
UniqueDict	overloadstargetoptionslocalsr   cache)r-   rJ   rN   rM   s       r0   r<   zUFuncDispatcher.__init__O   s1    ))+*[
r2   c                 Z    t        | j                  | j                  | j                        S )4
        NOTE: part of ReduceMixin protocol
        )pyfuncrN   rM   )dictrJ   rN   rM   rA   s    r0   _reduce_stateszUFuncDispatcher._reduce_statesV   s(     <<;;,,
 	
r2   c                      | |||      S )rQ   )rJ   rN   rM   r6   )clsrR   rN   rM   s       r0   _rebuildzUFuncDispatcher._rebuild`   s    
 6&NNr2   c                 8    t        | j                        | _        y r?   )r   rJ   rO   rA   s    r0   enable_cachingzUFuncDispatcher.enable_cachingg   s    "4<<0
r2   c                 r   | j                   j                         }|j                  |       | j                  j                         }|j                  |       t	        j
                         }| j                  j                  j                  ||       d|_	        d|_
        d|_        | j                  |||      S )NTnumpyF)rN   copyupdaterM   r   Flagstargetdescrr/   parse_as_flagsno_cpython_wrappererror_modelr%   _compile_core)r-   sigrN   rM   locstoptr.   s          r0   compilezUFuncDispatcher.compilej   s    {{!F!!&&(M"   //t<#' # !&!!#uf55r2   c                    	  j                   j                  } j                   j                  }t        	 fd       }t        5  t        j                         j                  |j                               5   |       5   j                  j                  ||      			cddd       cddd       cddd       S t        j                  |      \  }}t        j                  || j                  ||||      	 j                  j!                  |	       	cddd       cddd       cddd       S # 1 sw Y   nxY w	 ddd       n# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)z
        Trigger the compiler on the core function or load a previously
        compiled version from the cache.  Returns the CompileResult.
        c               3      K   	 d  j                   j                  j                        } | j                   j                  <   y y # t        $ r  w xY wwr?   )rL   get	signature	Exception)existscresr-   s    r0   store_overloads_on_successzAUFuncDispatcher._compile_core.<locals>.store_overloads_on_success   sX     : ++DNN;>59DNN4>>2 "	  s   AA AAAAN)argsreturn_typer.   rN   )r_   r@   rD   r   r   r   ConfigStackenterr\   rO   load_overloadr   normalize_signaturer   compile_extrarJ   save_overload)
r-   rd   r.   rN   	typingctx	targetctxro   rp   rq   rn   s
   `        @r0   rc   zUFuncDispatcher._compile_core}   s+   
 $$33	$$33				: 
		: "))+11%**,?/1::33CCD'#	 21 @? "! )1(D(DS(I%D+#11)Y26,,T>I8=fND JJ,,S$7! 21 @? "!111 @?? "!!sU   2E6E> D1	E'	E:AD1	E	E1D:6E>	EE	EE%N)r3   r4   r5   __doc__ufunc_targetr_   r<   rT   classmethodrW   rY   rg   rc   r6   r2   r0   rH   rH   I   sG     K') !
 O O1 #% 6&' r2   rH   npyufuncc                 b     | j                   |fi |}t        j                  |      \  }}|||fS r?   )rg   r   ru   )nb_funcrM   rd   rn   rp   rq   s         r0   _compile_element_wise_functionr      s;     7??30-0D 44S9D+{""r2   c                     |-| j                   rt        d      | j                  j                  }|t        j
                  k7  sJ  || S )zGiven a compilation result, argument types, and a return type,
    build a valid Numba signature after validating that it doesn't
    violate the constraints for the compilation mode.
    z-return type must be specified for object mode)
objectmode	TypeErrorrk   rq   r   pyobject)rn   rp   rq   s      r0   _finalize_ufunc_signaturer      sI    
 ??KLL..44K%..(((r2   c           	         | j                   }| j                  }| j                  j                  }t        5  t        ||||| j                  |       }|j                  j                  |j                        }ddd       |j                  D cg c]  }t        |      j                   }}|j                  t        |j                        j                         || j                  fS # 1 sw Y   rxY wc c}w )zBuild a wrapper for the ufunc loop entry point given by the
    compilation result object, using the element-wise signature.
    N)rD   libraryfndescllvm_func_namer   r   r   get_pointer_to_functionnamerp   r   numappendrq   environment)	rn   rk   ctxr   fnameinfoptra	dtypenumss	            r0   !_build_element_wise_ufunc_wrapperr      s     

CllGKK&&E	"7C	#'??D:ll22499= 

 +4..9.Q!.I9Xi334889c4++++ 
	
 :s   A C&C2&C/)r      Nreorderablec                 P    	 t         |    } | S # t        $ r t        d|       w xY w)z]
    Parse an identity value and return the corresponding low-level value
    for Numpy.
    zInvalid identity value )_identitiesKeyError
ValueError)identitys    r0   parse_identityr      s:    
Dx( O  DBCCDs   	 %c               #      K   t        j                         5  t        j                  dt        d       d ddd       y# 1 sw Y   yxY ww)zThis suppresses the NumbaDeprecationWarning that occurs through the use
    of `jit` without the `nopython` kwarg. This use of `jit` occurs in a few
    places in the `{g,}ufunc` mechanism in Numba, predominantly to wrap the
    "kernel" function.ignorez3.*The 'nopython' keyword argument was not supplied*)categorymessageN)warningscatch_warningsfilterwarningsr	   r6   r2   r0   3_suppress_deprecation_warning_nopython_not_suppliedr      s=      
	 	 	")@*=	@ 	 
#	"	"s   A!A	AA
Ac                       e Zd ZddZd Zy)_BaseUFuncBuilderNc                    t        | d      r| j                  }n| j                  j                  }t        | j                  ||      \  }}}| j	                  |||      }| j
                  j                  |       || j                  |<   |S )NrM   )hasattrrM   r   r   _finalize_signature_sigsr   _cres)r-   rd   rM   rn   rp   rq   s         r0   addz_BaseUFuncBuilder.add   sz    4) ..M LL66M"@LL-#.dK&&tT;?

#

3r2   c                      y)zI
        Disable the compilation of new signatures at call time.
        Nr6   rA   s    r0   disable_compilez!_BaseUFuncBuilder.disable_compile  s    r2   r?   )r3   r4   r5   r   r   r6   r2   r0   r   r      s    
r2   r   c                   ,    e Zd Zddi fdZd Zd Zd Zy)UFuncBuilderNFc                     t        |      r|j                  }|| _        t        |      | _        t	               5   t        dd|d||      | _        d d d        g | _        i | _        y # 1 sw Y   xY w)Nr}   _targetrO   r6   )	r   rJ   r   r   r   r   r   r   r   )r-   rJ   r   rO   rM   s        r0   r<   zUFuncBuilder.__init__  sv    WooG&x0@B03 0z%*0!.0079DL C 

 CBs   A**A3c                     t        |||      S )z^Slated for deprecation, use ufuncbuilder._finalize_ufunc_signature()
        instead.
        )r   r-   rn   rp   rq   s       r0   r   z UFuncBuilder._finalize_signature  s     )t[AAr2   c                    t         5  g }g }| j                  st        d      g }d }| j                  D ]o  }| j                  |   }| j                  ||      \  }}}|j                  |       |j                  t        |             |j                  |j                  |f       q d gt        |      z  }	|5t        j                  | j                        }
t        |
j                        }nt        |j                  j                        }d}t        j                   | j                  j"                  | j                  j$                  |||||	|| j&                  	      }|cd d d        S # 1 sw Y   y xY w)NNo definitionr   )r   r   r   r   r   buildr   intr   leninspectgetfullargspecrJ   rp   rk   r   fromfuncr3   rz   r   )r-   	dtypelistptrlist	keepalivern   rd   r   r   envdatlistargspecinctoutctr:   s                 r0   build_ufunczUFuncBuilder.build_ufunc#  s7   !IG<<00 IDzzzz#&*jjs&;#	3  +s3x(  $,,!45 " fs7|+G|!00>7<<(4>>../E &&%%t||';';D%4==E I "!!s   EE&&E/c                     t        ||      S )z^Slated for deprecation, use
        ufuncbuilder._build_element_wise_ufunc_wrapper().
        )r   )r-   rn   rk   s      r0   r   zUFuncBuilder.buildJ  s     1yAAr2   )r3   r4   r5   r<   r   r   r   r6   r2   r0   r   r     s     )-U" 
B%NBr2   r   c                   8    e Zd Zddi dfdZd Zed        Zd Zy)GUFuncBuilderNFr6   c                 ~   || _         t        |      | _        t               5   t	        d|      |      | _        d d d        || _        t        |      \  | _        | _	        || _
        || _        g | _        i | _        t        |      }t        |D cg c]
  } ||       c}      | _        y # 1 sw Y   txY wc c}w )Nr}   r   )rJ   r   r   r   r   r   rk   r   sinsoutrM   rO   r   r   _get_transform_argtupler    )	r-   rJ   rk   r   rO   rM   r    transform_argr   s	            r0   r<   zGUFuncBuilder.__init__T  s    &x0@B?3z?HDL C"-i8$)*


*73"m#LmM!$4m#LM CB $Ms   B.B:.B7c                     |j                   s2|j                  j                  t        j                  k7  rt        d      |t        j                  } || S )Nz(gufunc kernel must have void return type)r   rk   rq   r   voidr   r   s       r0   r   z!GUFuncBuilder._finalize_signatured  sD    4>>#=#=#KFGG**KD!!r2   c                 v   g }g }| j                   st        d      g }| j                  D ]n  }| j                  |   }| j	                  |      \  }}}|j                  |       |j                  t        |             |j                  |j                  |f       p d gt        |      z  }	t        | j                        }
t        | j                        }t        j                  | j                  j                  | j                  j                  |||
||	|| j                   | j"                  | j$                        }|S )Nr   )r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   r3   rz   r   rk   r    )r-   	type_list	func_listr   rd   rn   r   r   r   datalistninnoutr:   s                r0   r   zGUFuncBuilder.build_ufuncm  s   		||O,, 	::C::c?D"&**T"2IsCY'SX&dllC01  6C	N*$((m499~ ""LL!!4<<#7#7y#tXt}}dnnd6H6H

 r2   c                    |j                   }t        | j                  || j                  | j                  | j
                  d      }|j                  }|j                  j                  |j                        }g }|j                  D ]O  }t        |t        j                        r|j                  }n|}|j                  t!        |      j"                         Q |||fS )zJ
        Returns (dtype numbers, function ptr, EnvironmentObject)
        F)rO   
is_parfors)rk   r   rJ   r   r   rO   r   r   r   r   rp   
isinstancer   Arraydtyper   r   r   )	r-   rn   rk   r   r   r   r   r   tys	            r0   r   zGUFuncBuilder.build  s    
 NN	#LL$$))**

 hhll22499=	A!U[[)WWXb\--.   #s""r2   )r3   r4   r5   r<   r   r   r   r   r6   r2   r0   r   r   Q  s2     59!N "  8#r2   r   c                      t        j                         j                  t              D ci c]  \  }}||
 c}} fd}|S c c}}w )z-Return function that transform arg into indexc                     t        | t              r| S 	 |    S # t        $ r! d|  d dj                   }t	        |      w xY w)NzSpecified writable arg z not found in arg list z for function )r   r   r   r5   RuntimeError)argmsgrp   
pos_by_argrJ   s     r0   r   z)_get_transform_arg.<locals>.transform_arg  s_    c3J	$c?" 	$,SE1HV>'*>*>)?ACs##	$s	    *A)r   r   rp   	enumerate)rJ   ir   r   rp   r   s   `   @@r0   r   r     sK    !!'*//D'07VQ#q&7J	$  8s   A)?r   r   
contextlibr   
numba.corer   r   numba.core.decoratorsr   numba.core.descriptorsr   numba.core.extendingr   numba.core.errorsr	   numba.core.optionsr
   r   numba.core.registryr   numba.core.target_extensionr   r   r   r   r   r   r   numba.np.numpy_supportr   numba.np.ufuncr   numba.np.ufunc.sigparser   numba.np.ufunc.wrappersr   r   numba.core.cachingr   r   numba.core.compiler_lockr   _options_mixinr"   r8   r{   ReduceMixinrH   r   r   r   PyUFunc_ZeroPyUFunc_OnePyUFunc_NonePyUFunc_ReorderableNoner   r   r   objectr   r   r   r   r6   r2   r0   <module>r      s-     % + % 3 * 5 E * L B B + $ 3 M 7 9 )- -,)" ) }[ i++ [ | 4C OJ/ 0
# ,& 

 
 44		 
 
 *?B$ ?BDN#% N#br2   