§
    ƒÛgå  ã                   ó|   — 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	 d dlm
Z
 d dlZ G d„ d	e
j        ¦  «        ZdS )
é    ©Útypeof)Útypes)ÚGUFuncBuilder)Úparse_signature)Úufunc_find_matching_loop)Ú	serializeNc                   óŽ  — e Zd ZdZdddi dfd„Zd„ Zed„ ¦   «         Zd„ Zd	„ Z	d
„ Z
d„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ ZdS )ÚGUFunczÊ
    Dynamic generalized universal function (GUFunc)
    intended to act like a normal Numpy gufunc, but capable
    of call-time (just-in-time) compilation of fast loops
    specialized to inputs.
    NF© c                 óÆ   — d | _         d| _        || _        || _        t	          ||||||¦  «        | _        | j        j        j        | _        t          j	        | |¦  «         d S )NF)
ÚufuncÚ_frozenÚ_is_dynamicÚ	_identityr   Úgufunc_builderÚpy_funcÚ__name__Ú	functoolsÚupdate_wrapper)Úselfr   Ú	signatureÚidentityÚcacheÚ
is_dynamicÚtargetoptionsÚwritable_argss           úK/granary/edev/quantum/lib/python3.11/site-packages/numba/np/ufunc/gufunc.pyÚ__init__zGUFunc.__init__   sk   € àˆŒ
ØˆŒØ%ˆÔØ!ˆŒõ
 ,Ø�Y ¨%°ÀñOô OˆÔàÔ+Ô3Ô<ˆŒÝÔ   wÑ/Ô/Ð/Ð/Ð/ó    c                 óž   — | j         }t          |j        |j        | j        |j        | j        |j        |j        |j	        | j
        ¬¦	  «	        }|S )N)	r   r   r   r   r   r   r   ÚtypesigsÚfrozen)r   Údictr   r   r   r   r   r   r   Ú_sigsr   )r   ÚgbÚdcts      r   Ú_reduce_stateszGUFunc._reduce_states!   sU   € ØÔ ˆÝØ”JØ”lØ”^Ø”(ØÔ'ØÔ*ØÔ*Ø”XØ”<ð

ñ 

ô 

ˆð ˆ
r    c
           	      ó”   —  | |||||||¬¦  «        }
|D ]}|
                      |¦  «         Œ|
                     ¦   «          |	|
_        |
S )N)r   r   r   r   r   r   r   )ÚaddÚbuild_ufuncr   )Úclsr   r   r   r   r   r   r   r"   r#   r   Úsigs               r   Ú_rebuildzGUFunc._rebuild0   sm   € ð ˆs˜7¨iÀ(Ø¨:Ø!.¸mðMñ Mô Mˆð ð 	ð 	ˆCØ�HŠH�S‰MŒMˆMˆMØ×ÒÑÔÐØˆŒØˆr    c                 ó   — d| j         › d�S )Nz<numba._GUFunc 'z'>)r   ©r   s    r   Ú__repr__zGUFunc.__repr__<   s   € Ø3 $¤-Ð3Ð3Ð3Ð3r    c                 ó:   — | j                              |¦  «         d S ©N)r   r*   )r   Úftys     r   r*   z
GUFunc.add?   s   € ØÔ×Ò Ñ$Ô$Ð$Ð$Ð$r    c                 óB   — | j                              ¦   «         | _        | S r3   )r   r+   r   r0   s    r   r+   zGUFunc.build_ufuncB   s   € ØÔ(×4Ò4Ñ6Ô6ˆŒ
Øˆr    c                 óR   — t          | j        j        ¦  «        dk    sJ ‚d| _        dS )zI
        Disable the compilation of new signatures at call time.
        r   TN)Úlenr   r%   r   r0   s    r   Údisable_compilezGUFunc.disable_compileF   s.   € õ
 �4Ô&Ô,Ñ-Ô-°Ò1Ð1Ð1Ð1ØˆŒˆˆr    c                 ó   — | j         S r3   )r   r0   s    r   r   zGUFunc.is_dynamicN   s   € àÔÐr    c                 ó   — | j         j        S r3   )r   Úninr0   s    r   r;   z
GUFunc.ninR   s   € àŒzŒ~Ðr    c                 ó   — | j         j        S r3   )r   Únoutr0   s    r   r=   zGUFunc.noutV   s   € àŒzŒÐr    c                 ó   — | j         j        S r3   )r   Únargsr0   s    r   r?   zGUFunc.nargsZ   ó   € àŒzÔÐr    c                 ó   — | j         j        S r3   )r   Úntypesr0   s    r   rB   zGUFunc.ntypes^   ó   € àŒzÔ Ð r    c                 ó   — | j         j        S r3   )r   r   r0   s    r   r   zGUFunc.typesb   r@   r    c                 ó   — | j         j        S r3   )r   r   r0   s    r   r   zGUFunc.identityf   ó   € àŒzÔ"Ð"r    c                 ó   — | j         j        S r3   )r   r   r0   s    r   r   zGUFunc.signaturej   s   € àŒzÔ#Ð#r    c                 ó   — | j         j        S r3   )r   Ú
accumulater0   s    r   rI   zGUFunc.accumulaten   s   € àŒzÔ$Ð$r    c                 ó   — | j         j        S r3   )r   Úatr0   s    r   rK   z	GUFunc.atr   s   € àŒzŒ}Ðr    c                 ó   — | j         j        S r3   )r   Úouterr0   s    r   rM   zGUFunc.outerv   r@   r    c                 ó   — | j         j        S r3   )r   Úreducer0   s    r   rO   zGUFunc.reducez   rC   r    c                 ó   — | j         j        S r3   )r   Úreduceatr0   s    r   rQ   zGUFunc.reduceat~   rF   r    c                 óÊ   — t          d„ |¦  «        }g }|D ]L}t          |t          j        ¦  «        r|                     |j        ¦  «         Œ7|                     |¦  «         ŒM|S )Nc                 ó    — t          | ¦  «        S r3   r   )Úxs    r   ú<lambda>z*GUFunc._get_ewise_dtypes.<locals>.<lambda>ƒ   s   € �v a™yœy€ r    )ÚmapÚ
isinstancer   ÚArrayÚappendÚdtype)r   ÚargsÚargtysÚtysÚargtys        r   Ú_get_ewise_dtypeszGUFunc._get_ewise_dtypes‚   sn   € ÝÐ(Ð(¨$Ñ/Ô/ˆØˆØð 	"ð 	"ˆEÝ˜%¥¤Ñ-Ô-ð "Ø—
’
˜5œ;Ñ'Ô'Ð'Ð'à—
’
˜5Ñ!Ô!Ð!Ð!Øˆ
r    c                 ó†   — t          | j        j        ¦  «        }t          |¦  «        t          |d         ¦  «        dz   k    S )Nr   é   )r   r   r   r7   )r   r[   Ú
parsed_sigs      r   Ú_num_args_matchzGUFunc._num_args_matchŒ   s7   € Ý$ TÔ%8Ô%BÑCÔCˆ
å�4‰yŒy�C 
¨1¤Ñ.Ô.°Ñ2Ò2Ð2r    c                 ó  — t          | j        j        ¦  «        }|                      |¦  «        }g }t	          |d         ¦  «        D ]e\  }}t          |¦  «        }|dk    r|                     ||         ¦  «         Œ6|                     t          j        ||         |d¦  «        ¦  «         Œf|d         }t          |d         d         ¦  «        pd}	|                     t          j        ||	d¦  «        ¦  «         t          j	        |Ž S )Nr   ÚAéÿÿÿÿra   )
r   r   r   r_   Ú	enumerater7   rY   r   rX   Únone)
r   r[   rb   Úewise_typesÚlÚidxÚsig_dimÚndimÚrettyÚret_ndims
             r   Ú_get_signaturezGUFunc._get_signature‘   sø   € Ý$ TÔ%8Ô%BÑCÔCˆ
à×,Ò,¨TÑ2Ô2ˆð ˆÝ% j°¤mÑ4Ô4ð 	Cð 	C‰LˆC�Ý�w‘<”<ˆDØ�qŠyˆyØ—’˜ SÔ)Ñ*Ô*Ð*Ð*à—’�œ [°Ô%5°t¸SÑAÔAÑBÔBÐBÐBð ˜B”ˆÝ�z "”~ aÔ(Ñ)Ô)Ð.¨QˆØ	�Š•”˜U H¨cÑ2Ô2Ñ3Ô3Ð3åŒz˜1ˆ~Ðr    c                 ó   — | j         s| j        s | j        |i |¤ŽS d|v r||                     d¦  «        fz  } | j        |Ž du rd| j        › d�}t          |¦  «        ‚|                      |¦  «        }| j        rt          | j        |¦  «        s3 | j	        |Ž }|  
                    |¦  «         |                      ¦   «           | j        |i |¤ŽS )NÚoutFz Too few arguments for function 'z'. Note that the pattern `out = gufunc(Arg1, Arg2, ..., ArgN)` is not allowed. Use `gufunc(Arg1, Arg2, ..., ArgN, out) instead.)r   r   r   Úpoprc   r   Ú	TypeErrorr_   r   rp   r*   r+   )r   r[   ÚkwargsÚmsgÚewiser-   s         r   Ú__call__zGUFunc.__call__§   s
  € ð Œ<ð 	)˜tœð 	)Ø�4”:˜tÐ. vÐ.Ð.Ð.Ø�fˆ_ˆ_à�V—Z’Z Ñ&Ô&Ð(Ñ(ˆDàˆ4Ô Ð&¨%Ð/Ð/ð
°4´=ð ð ð ð õ
 ˜C‘.”.Ð ð ×&Ò& tÑ,Ô,ˆØ”
ð 	Õ7¸¼
ÀEÑJÔJð 	Ø%�$Ô% tÐ,ˆCØ�HŠH�S‰MŒMˆMØ×ÒÑÔÐØˆtŒz˜4Ð* 6Ð*Ð*Ð*r    )r   Ú
__module__Ú__qualname__Ú__doc__r   r(   Úclassmethodr.   r1   r*   r+   r8   Úpropertyr   r;   r=   r?   rB   r   r   r   rI   rK   rM   rO   rQ   r_   rc   rp   rx   r   r    r   r   r   
   sA  € € € € € ðð ð 59ÀØ!°À2ð0ð 0ð 0ð 0ðð ð ð ð	ð 	ñ „[ð	ð4ð 4ð 4ð%ð %ð %ðð ð ðð ð ð ð ð  ñ „Xð ð ðð ñ „Xðð ðð ñ „Xðð ð ð  ñ „Xð ð ð!ð !ñ „Xð!ð ð ð  ñ „Xð ð ð#ð #ñ „Xð#ð ð$ð $ñ „Xð$ð ð%ð %ñ „Xð%ð ðð ñ „Xðð ð ð  ñ „Xð ð ð!ð !ñ „Xð!ð ð#ð #ñ „Xð#ðð ð ð3ð 3ð 3ð
ð ð ð,+ð +ð +ð +ð +r    r   )Únumbar   Ú
numba.corer   Únumba.np.ufunc.ufuncbuilderr   Únumba.np.ufunc.sigparser   Únumba.np.numpy_supportr   r	   r   ÚReduceMixinr   r   r    r   ú<module>r„      s¾   ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð ðw+ð w+ð w+ð w+ð w+ˆYÔ"ñ w+ô w+ð w+ð w+ð w+r    