
    Cd&                        d dl mZ d dlmZ d dlmZ d dlZd dlm	Z	 d dl
mZmZmZmZmZ d dlmZmZ d dlmZ d d	lmZmZ efd
Z G d d          Z ee          d             Z G d d          Z eej                  Z eej                  Z eej                  Z eej                  Z eej                   Z  eej!                  Z! eej"                  Z" eej#                  Z# eej$                  Z$ eej%                  Z% eej&                  Z& eej'                  Z' eej(                  Z( eej)                  Z) eej*                  xZ+Z* eej,                  Z, eej-                  Z- eej.                  Z. eej/                  Z/ eej0                  Z0 eej1                  Z1 eej2                  Z2 eej3                  Z3 eej4                  Z4 eej5                  Z5 eej6                  Z6 eej7                  Z7 eej8                  Z8 eej9                  Z9 eej:                  Z: eej;                  Z; eej<                  Z< eej=                  Z= eej>                  Z> eej?                  Z? eej@                  Z@ eejA                  ZA eejB                  ZB eejC                  ZC eejD                  ZD eejE                  ZE eejF                  ZF eejG                  ZG eejH                  ZH eejI                  ZI eejJ                  ZJ eejK                  ZK eejL                  ZL eeLejM                   ZN eeLejM                  ZO eejP                  ZP eejQ                  ZQ eejR                  ZR eejS                  ZS eejT                  ZT eejU                  ZU eejV                  ZV eejW                  ZW eejX                  ZX eejY                  ZY eejZ                  ZZ eej[                  Z[e[Z\ eej]                  Z] eej^                  Z^ eej_                  Z_ eej`                  Z` eeja                  Za eejb                  Zb eejc                  Zc eejd                  Zd eeje                  Ze eejf                  Zf eejg                  Zg eejh                  Zh eeji                  Zi eejj                  Zj eejk                  Zk eejl                  Zl eejm                  Zm eejn                  Zn eejo                  Zo eejp                  ZpepZq eejr                  Zr eejs                  Zs eejt                  Zt eeju                  Zu eejv                  Zv eejw                  Zw eejx                  Zx eejy                  Zy eejz                  Zz ee          dd            Z{ ee          d             Z| ee          d             Z} ee          d             Z~dS )    )annotations)partialgetitemN)core)Arrayapply_infer_dtypeasarray	blockwiseelemwise)is_dask_collectionnormalize_function)HighLevelGraph)derived_fromfuncnamec                V      fd} j         |_          t          |          |          S )z&Wrap up numpy function into dask.arrayc                     d | D             }t          |          dk    r |d         j        g| R i |S  | i |S )Nc                2    g | ]}t          |d           |S 	_elemwisehasattr.0args     0lib/python3.11/site-packages/dask/array/ufunc.py
<listcomp>z2wrap_elemwise.<locals>.wrapped.<locals>.<listcomp>   s'    @@@sgc;&?&?@s@@@    r   )lenr   )argskwargsdsknumpy_ufuncs      r   wrappedzwrap_elemwise.<locals>.wrapped   sa    @@d@@@s88a<<#3q6#KA$AAA&AAA;////r   )__name__r   )r#   sourcer$   s   `  r   wrap_elemwiser'      sA    0 0 0 0 0 #+G<(((r   c                  <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
da_frompyfuncz"A serializable `frompyfunc` objectc                    t          j        |||          | _        || _        || _        || _        t          |          | _        d| j        z  | _        d S )Nzfrompyfunc-%s)	np
frompyfunc_ufunc_funcninnoutr   _namer%   )selffuncr/   r0   s       r   __init__zda_frompyfunc.__init__!   sK    mD#t44
	d^^
'$*4r   c                0    d| j         | j        | j        fz  S )Nzda.frompyfunc<%s, %d, %d>)r1   r/   r0   r2   s    r   __repr__zda_frompyfunc.__repr__)   s    *dj$(DI-NNNr   c                D    t          | j                  | j        | j        fS N)r   r.   r/   r0   r6   s    r   __dask_tokenize__zda_frompyfunc.__dask_tokenize__,   s    "4:..$)DDr   c                8    t           | j        | j        | j        ffS r9   )r)   r.   r/   r0   r6   s    r   
__reduce__zda_frompyfunc.__reduce__/   s    
DHdi@AAr   c                     | j         |i |S r9   )r-   )r2   r    r!   s      r   __call__zda_frompyfunc.__call__2   s    t{D+F+++r   c                    |                     d          st          | j        |          S t          t	          |           j        d|          )N_ object has no attribute )
startswithgetattrr-   AttributeErrortyper%   )r2   as     r   __getattr__zda_frompyfunc.__getattr__5   sN    ||C   	+4;***T

 3UUPQUUVVVr   c                    t          t          t          |                               }|                    | j                   |                    t          | j                             t          |          S r9   )setdirrE   update__dict__r-   list)r2   os     r   __dir__zda_frompyfunc.__dir__:   sV    DJJ  		T[!!"""Awwr   N)r%   
__module____qualname____doc__r4   r7   r:   r<   r>   rG   rO    r   r   r)   r)      s        ,,5 5 5O O OE E EB B B, , ,W W W
    r   r)   c                h    |dk    rt          d          t          t          | ||                    S )N   z$frompyfunc with more than one output)NotImplementedErrorufuncr)   )r3   r/   r0   s      r   r,   r,   A   s4    axx!"HIIItS$//000r   c                  f    e Zd Zh dZd Zd Zd Zd Zd Z e	e
j                  d             ZdS )	rW   >   r/   r0   nargstypesntypesidentity	signaturec                (   t          |t          j        t          f          s$t	          dt          |          j        z            || _        |j        | _        t          |t          j                  r t          t                    |            d S d S )Nz:must be an instance of `ufunc` or `da_frompyfunc`, got `%s)	
isinstancer+   rW   r)   	TypeErrorrE   r%   r-   r   )r2   rW   s     r   r4   zufunc.__init__S   s    %"(M!:;; 	+-1%[[-AB   eRX&& 	#LT"""""	# 	#r   c                    || j         v rt          | j        |          S t          t	          |           j        d|          )NrA   )_forward_attrsrC   r-   rD   rE   r%   )r2   keys     r   rG   zufunc.__getattr__^   sH    $%%%4;,,,T

 3WWPSWWXXXr   c           	         t          | j                            t          t	          |                     | j                            S r9   )rM   rb   unionrJ   rE   rL   r6   s    r   rO   zufunc.__dir__c   s1    D'--c$t**oot}MMNNNr   c                *    t          | j                  S r9   )reprr-   r6   s    r   r7   zufunc.__repr__f   s    DK   r   c                   d |D             }t          |          dk    r[|D ]A} |j        | j        g|R i |}t          |          t          t                    k    r|c S Bt          d| j        z              | j        |i |S )Nc                2    g | ]}t          |d           |S r   r   r   s     r   r   z"ufunc.__call__.<locals>.<listcomp>j   s'    AAAwsK'@'@AAAAr   r   z.Parameters of such types are not supported by )r   r   r-   rE   NotImplementedr`   r%   )r2   r    r!   dsksr"   results         r   r>   zufunc.__call__i   s    AAtAAAt99q== " "&t{DTDDDVDD<<4#7#777!MMM 8@4=P   4;////r   c                   | j         dk    rt          d          d|v rt          d          t          |          }t          |          }|s|s | j        j        ||fi |S |rt          |t                    r|r$t          |t                    st          d          t          |          }t          |          }|j	        |j	        z   }t          t          |                    }|d |j	                 }||j	        d          }	t          | j        j        ||g|dd          }
d	|v r/t          | j        j        |                    d	          
          }n| j        j        }t          ||||||	f|
| j        dz   d|S )N   z1outer product only supported for binary functionsoutz`out` kwarg not supportedzGDask objects besides `dask.array.Array` are not supported at this time.zufunc.outerF)suggest_dtypedtyperq   z.outer)rq   token)r/   
ValueErrorr   r-   outerr_   r   rV   r
   ndimtupleranger	   r   popr   r%   )r2   ABr!   	A_is_dask	B_is_daskrv   out_indsA_indsB_indsrq   r3   s               r   ru   zufunc.outerv   s   8q==PQQQF??8999&q))	&q))	 	 	$4;$Q44V444		q%((		 		 q%((			 &2  
 AJJAJJvt%%(AF(#!&((#!K1vv}E
 
 
 f4;,FJJw4G4GHHHDD;$D

 -(*

 

 

 

 
	
r   N)r%   rP   rQ   rb   r4   rG   rO   r7   r>   r   r+   rW   ru   rS   r   r   rW   rW   H   s          N	# 	# 	#Y Y Y
O O O! ! !0 0 0 \"(/
 /
 /
 /
 /
r   rW   c                    t          |          }t          | d          r!|                     t          j        | |          S t          j        | |          S )Nr   )deg)boolr   r   r+   angle)xr   s     r   r   r     sL    
s))Cq+ -{{28Q,,,8A3r   c                  
 t          t          j        | t                    }d|j        z   
d|j        z   
fdt          j        |                                          D             }fdt          j        |                                          D             }t          j        t          | d|           d| j
        z  | j                  }t          j        |          \  }}t          j        
||g	          }t          |
|j        |
          }t          j        ||g	          }t          ||j        |
          }	||	fS )Nrr   z	mantissa-z	exponent-c                >    i | ]}f|d d         z   t           |dfS rU   Nr   r   r   rc   lefts     r   
<dictcomp>zfrexp.<locals>.<dictcomp>*  A        
#abb'GS!,  r   c                >    i | ]}f|d d         z   t           |d fS rU   Nr   r   rc   rights     r   r   zfrexp.<locals>.<dictcomp>.  A        
3qrr7Wc1-  r   _metarU   shaperq   dependencieschunksmeta)r   r+   frexpobjectnamer   flatten__dask_keys__
empty_likerC   rv   rq   r   from_collectionsr   r   r   tmpldskrdskrF   lrgraphLRr   r   s             @@r   r   r   $  sX    28Qf
-
-
-C!D#("E   < 1 1 3 344  D   < 1 1 3 344  D
 	ga!,,D16MQQQA8A;;DAq+D$cUKKKEeT#*1555A+E4seLLLEeU3:A666Aa4Kr   c                  
 t          t          j        | t                    }d|j        z   
d|j        z   
fdt          j        |                                          D             }fdt          j        |                                          D             }t          j        t          | d|           d| j
        z  | j                  }t          j        |          \  }}t          j        
||g	          }t          |
|j        |
          }t          j        ||g	          }t          ||j        |
          }	||	fS )Nrr   zmodf1-zmodf2-c                >    i | ]}f|d d         z   t           |dfS r   r   r   s     r   r   zmodf.<locals>.<dictcomp>C  r   r   c                >    i | ]}f|d d         z   t           |d fS r   r   r   s     r   r   zmodf.<locals>.<dictcomp>G  r   r   r   r   r   r   r   )r   r+   modfr   r   r   r   r   	ones_likerC   rv   rq   r   r   r   r   r   s             @@r   r   r   =  sX    27AV
,
,
,CchDsxE   < 1 1 3 344  D   < 1 1 3 344  D
 	WQ++4!&=PPPA71::DAq+D$cUKKKEeT#*1555A+E4seLLLEeU3:A666Aa4Kr   c                    | |z  }| |z  }||fS r9   rS   )r   yres1res2s       r   divmodr   V  s    6Dq5D:r   )r   )
__future__r   	functoolsr   operatorr   numpyr+   daskr   dask.array.corer   r	   r
   r   r   	dask.baser   r   dask.highlevelgraphr   
dask.utilsr   r   r'   r)   r,   rW   addsubtractmultiplydivide	logaddexp
logaddexp2true_dividefloor_dividenegativepositivepowerfloat_power	remaindermod	conjugateconjexpexp2loglog2log10log1pexpm1sqrtsquarecbrt
reciprocalsincostanarcsinarccosarctanarctan2hypotsinhcoshtanharcsinharccosharctanhdeg2radrad2deggreatergreater_equalless
less_equal	not_equalequalinfisneginfisposinflogical_and
logical_orlogical_xorlogical_notmaximumminimumfmaxfminbitwise_and
bitwise_orbitwise_xorbitwise_notinvert
left_shiftright_shiftisfiniteisinfisnansignbitcopysign	nextafterspacingldexpfmodfloorceiltruncdegreesradiansrintfabssignabsoluteabsclipisreal	iscomplexrealimagfixi0sinc
nan_to_numr   r   r   r   rS   r   r   <module>r     s   " " " " " "                       R R R R R R R R R R R R R R < < < < < < < < . . . . . . - - - - - - - - ') ) ) ) )               F b1 1 1^
 ^
 ^
 ^
 ^
 ^
 ^
 ^
J eBFmm55	ry		E",	U2=!!
eBN##uR_%%55bheBN##E",	eBFmm5&& &yeBFmmuRW~~eBFmmuRW~~bhbhbhuRW~~	ry		uRW~~U2=!!
 eBFmmeBFmmeBFmm	ry			ry			ry		
%


bhuRW~~uRW~~uRW~~
%



%



%



%



%


 %


b&''uRW~~U2=!!
E",	bh7526'""75"&!!eBN##U2=!!
eBN##eBN##
%



%


uRW~~uRW~~ eBN##U2=!!
eBN##eBN##	U2=!!
eBN## 5bhbh
%


5E",	
%


bhuRW~~bhuRW~~bh %



%


uRW~~uRW~~uRW~~5 }RW	ry	!	!M",''	}RW}RWmBF]25}RW]2=))
 b        b  0 b  0 b    r   