
    sg@              
      	   d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	 ddl
Z
ddlmZmZ e	rddlmZmZmZmZmZmZmZ 	 d	 	 	 	 	 dd
Z	 	 d	 	 	 	 	 	 	 ddZddZddZddZd ZddZ	 d	 ddZ	 	 	 	 d	 	 	 	 	 	 	 ddZddd	 	 	 	 	 ddZeZ ddd	 	 	 	 	 ddZ!ddd	 	 	 	 	 ddZ"ddd	 	 	 	 	 ddZ#	 	 dddd	 	 	 	 	 	 	 ddZ$dddZ%ddZ&ddZ'd Z(dddZ)dddZ*dd Z+dd!Z,dd"Z-dd#Z.ddd$Z/	 	 	 	 	 d	 	 	 	 	 dd&Z0	 	 	 	 d	 	 	 	 	 dd'Z1	 	 	 	 	 d	 dd(Z2	 	 	 	 ddd)	 	 	 	 	 	 	 	 	 dd*Z3	 	 ddd)	 	 	 	 	 dd+Z4	 	 	 	 d	 	 	 	 	 	 	 dd,Z5	 	 ddd)	 	 	 	 	 	 	 dd-Z6	 	 	 	 d	 	 	 	 	 	 	 dd.Z7	 	 ddd)	 	 	 	 	 dd/Z8	 	 	 	 d	 	 	 	 	 	 	 dd0Z9	 	 ddd)	 	 	 	 	 dd1Z:	 	 	 	 d	 	 	 	 	 	 	 dd2Z;dd3Z<	 	 	 	 ddd4	 	 	 	 	 dd5Z=	 	 	 	 	 	 ddd4	 	 	 	 	 	 	 	 	 dd6Z>d7 Z?ddd8Z@ddd9ZAddd:ZB	 	 d	 	 	 	 	 dd;ZCdd<ZDdd=ZEddd>ZFdd?ZGddd@ZHddAZIddBZJdddCZKdddDZLddEl
mMZM d	dFddGZNd%d	dHdIddJZOePd	fddKZQdddLZRdddMZSddNZTddOZUdddPZVdddQZW	 	 	 ddd)	 	 	 ddRZXdddSZYdddTZZddUZ[dddVZ\ddWZ]	 d	 	 	 ddXZ^	 	 	 d	 	 	 	 	 	 	 ddYZ_ddZZ`	 d	 	 	 	 	 	 	 dd[Zadd\Zb	 	 d	 	 	 	 	 	 	 dd]Zc	 	 	 	 dd%d^	 	 	 	 	 dd_Zddd`ZeddaZfddbZg	 	 	 d	 	 	 	 	 	 	 ddcZhddddZiddeZjdddfZkdddgZl	 	 	 	 	 d	 	 	 	 	 ddhZm	 	 	 	 ddd)	 	 	 	 	 ddiZnddd)ddjZodddkZpdddlZqddnZrddoZsdddpZtddqZudddrZvdddsZwddtZxddduZydddvZzddddwd	dxdyZ{dz Z|ddd{Z}ddd|Z~	 d	 	 	 	 	 dd}Zdd~ZddZdddZdddZdddZdddZdddZdddZ	 	 	 	 d	 	 	 	 	 ddZdddZddZdddddZdddZeZeZdddZddZddZddZddZddZddZdddZdddZddZd Zd Zd Zd Zd Zd Ze
j>                  e
j@                  e
jB                  gde
jD                  e
jF                  ggZe
j>                  de
j@                  de
jB                  dme
jD                  de
jF                  dmiZddZ	 	 	 	 	 d 	 	 	 	 	 ddZ	 	 	 	 	 d 	 	 	 ddZ	 	 	 	 	 d 	 	 	 ddZddZdddZy(  zA thin pytorch / numpy compat layer.

Things imported from here have numpy-compatible signatures but operate on
pytorch tensors.
    )annotationsN)OptionalSequenceTYPE_CHECKING   )_dtypes_impl_util)	ArrayLikeArrayLikeOrScalarCastingModes	DTypeLikeNDArrayNotImplementedTypeOutArrayKFc                "    | j                         S N)clone)aordersuboks      K/var/www/html/venv/lib/python3.12/site-packages/torch/_numpy/_funcs_impl.pycopyr   "   s     779    	same_kindc                p    t        j                  |f| j                  |      \  }| j                  |       y )Ncasting)r	   typecast_tensorsdtypecopy_)dstsrcr   wheres       r   copytor%   (   s+     ##SFCIIwGFSIIcNr   c                 `    t        j                  |  }t        |t              rt	        |      S |S r   )torch
atleast_1d
isinstancetuplelistarysress     r   r(   r(   2   +    


D
!C#uCy
r   c                 `    t        j                  |  }t        |t              rt	        |      S |S r   )r'   
atleast_2dr)   r*   r+   r,   s     r   r1   r1   :   r/   r   c                 `    t        j                  |  }t        |t              rt	        |      S |S r   )r'   
atleast_3dr)   r*   r+   r,   s     r   r3   r3   B   r/   r   c                F    | dk(  rt        d      	 ||t        d      y y )N z&need at least one array to concatenatezQconcatenate() only takes `out` or `dtype` as an argument, but both were provided.)
ValueError	TypeError)tupr    outs      r   _concat_checkr:   J   s;    
byABB,
5,0
 	
 -r   c                    ||||j                   j                  n|}nt        j                  |  }t	        j
                  | ||      } | S )z%Figure out dtypes, cast if necessary.)r    torch_dtyper   result_type_implr	   r   )tensorsr9   r    r   	out_dtypes        r   _concat_cast_helperr@   W   sN     %+-2]CII))	 117;	 $$WiAGNr   c                z    t        j                  | d|i\  } }t        | |||      } t        j                  | |      S )Naxis)r	   axis_none_flattenr@   r'   cat)r>   rB   r9   r    r   s        r   _concatenaterE   f   s>     ++W@4@MGT!'3w?G99Wd##r   c                B    t        | ||       t        | ||||      }|S )Nr9   )rB   r9   r    r   )r:   rE   )ar_tuplerB   r9   r    r   results         r   concatenaterJ   o   s'     (Es+(3eWUFMr   r    r   c               d    t        | |d        t        | ||      }t        j                  |      S NrG   rK   )r:   r@   r'   vstackr8   r    r   r>   s       r   rN   rN   {   -     #u$'!#UGDG<<  r   c               d    t        | |d        t        | ||      }t        j                  |      S rM   )r:   r@   r'   hstackrO   s       r   rR   rR      rP   r   c               d    t        | |d        t        | ||      }t        j                  |      S rM   )r:   r@   r'   dstackrO   s       r   rT   rT      s-     #u$'!#UGDG<<  r   c               d    t        | |d        t        | ||      }t        j                  |      S rM   )r:   r@   r'   column_stackrO   s       r   rV   rV      s/     #u$'!#UGDGg&&r   c                   t        | ||       t        | ||      }|d   j                  dz   }t        j                  ||      }t        j                  ||      S )NrG   rK   r   r   rB   )r:   r@   ndimr	   normalize_axis_indexr'   stack)arraysrB   r9   r    r   r>   result_ndims          r   r[   r[      sS     &%S)!&wGG!*//A%K%%dK8D;;wT**r   c                    |>| j                   dk7  r| j                         } |j                         }| j                   dz
  }t        | |f|      S )Nr   rX   )rY   flattenrE   )arrvaluesrB   s      r   appendrb      sG    |88q=++-C!xx!|fD11r   c                    t        |t              rt        | |||      S t        |t        t        f      rt        | t        |      |      S t        dt        |            )Nzsplit_helper: )r)   int_split_helper_intr+   r*   _split_helper_listr7   type)tensorindices_or_sectionsrB   stricts       r   _split_helperrk      sW    %s+ )<dFKK	'$	7!&$/B*CTJJ($/B*CDDr   c                h   t        |t              st        d      t        j                  || j
                        }| j                  |   |}}|dk  rt        ||z  dk(  r|||z  }}|g|z  }n |rt        d      ||z  ||z  dz   }}|g|z  }||dz
  g||z
  z  z  }t        j                  | ||      S )Nzsplit: indices_or_sectionsr   z0array split does not result in an equal divisionr   )
r)   rd   NotImplementedErrorr	   rZ   rY   shaper6   r'   split)	rh   ri   rB   rj   lnnumszlsts	            r   re   re      s    )3/!">??%%dFKK8D <<2qAAv1uzQ!VRdSjOPPa%a!RdSjBF8q3wC;;vsD))r   c                   t        |t              st        d      |D cg c]  }|| j                  |   k  s| }}t	        |      t	        |      z
  }|j                  | j                  |          |d   gt        |dd  |d d       D cg c]
  \  }}||z
   c}}z   }|dg|z  z  }t        j                  | ||      S c c}w c c}}w )Nz split: indices_or_sections: listr   r   )	r)   r+   rm   rn   lenrb   zipr'   ro   )rh   ri   rB   xrt   	num_extrar   bs           r   rf   rf      s    )40!"DEE *
EQ&,,t2D-D1
EC
E'(3s83IJJv||D!"As12wCR1241aQ23C A3?C;;vsD)) F 	3s   CCCc                    t        | ||      S r   rk   aryri   rB   s      r   array_splitr     s    1488r   c                     t        | ||d      S )NTrj   r}   r~   s      r   ro   ro     s    14EEr   c                z    | j                   dk(  rt        d      | j                   dkD  rdnd}t        | ||d      S )Nr   z3hsplit only works on arrays of 1 or more dimensionsr   Tr   rY   r6   rk   r~   s      r   hsplitr   	  s<    
xx1}NOO11!D14EEr   c                T    | j                   dk  rt        d      t        | |dd      S )N   z3vsplit only works on arrays of 2 or more dimensionsr   Tr   r   r   ri   s     r   vsplitr     +    
xx!|NOO11TBBr   c                T    | j                   dk  rt        d      t        | |dd      S )N   z3dsplit only works on arrays of 3 or more dimensionsr   Tr   r   r   s     r   dsplitr     r   r   c                .    t        j                  | |      S r   )r'   kron)r   r{   s     r   r   r         ::ar   c                0    t        j                  | ||      S r   )r'   vander)ry   N
increasings      r   r   r      s    <<1j))r   Tc                    |dk7  s|s|st         |t        j                         j                  }t	        j
                  | |||      S Nr   r    )rm   r   default_dtypesfloat_dtyper'   linspace)startstoprr   endpointretstepr    rB   s          r   r   r   '  sC     qyG8!!}++-99>>%s%88r   c                   |dk7  s|st         t        j                  || z  d|dz
  z        }t        j                  |      }t        j                  t        j                  |       |z  t        j                  |      |z  ||      S )Nr         ?r   )base)rm   r'   powloglogspace)r   r   rr   r   r    rB   r   logbases           r   	geomspacer   8  st     qy!!99TE\3#'?3DiioG>>		%7"		$'!	 r   c                P    |dk7  s|st         t        j                  | ||||      S )Nr   )r   r    )rm   r'   r   )r   r   rr   r   r   r    rB   s          r   r   r   L  s*     qy!!>>%sUCCr   )likec                  |dk(  rt         || t        |d| }} | d} |Qt        d | ||fD              rt        j                         j
                  nt        j                         j                  }|j                  rt        j                  n|}t        d | ||fD              rt        |dkD  r| |kD  s
|dk  r| |k  rt        j                  d|      S t        j                  | |||      }t        j                  ||      }|S )Nr   c              3  F   K   | ]  }t        j                  |        y wr   )r   is_float_or_fp_tensor.0ry   s     r   	<genexpr>zarange.<locals>.<genexpr>q  s     VQ<55a8V   !c              3  F   K   | ]  }t        j                  |        y wr   )r   is_complex_or_complex_tensorr   s     r   r   zarange.<locals>.<genexpr>w  s     
UA<44Q7
Ur   r   )ZeroDivisionErrorr7   anyr   r   r   	int_dtype
is_complexr'   float64rm   emptyaranger	   cast_if_needed)r   r   stepr    r   
work_dtyperI   s          r   r   r   Z  s
    qy|| t} } V5$PTBUVV '')55,,.88 	
 #("2"2J 
U%tAT
UU!!qUT\taxEDL{{1E**\\%t:>F!!&%0FMr   c               p    |t        j                         j                  }t        j                  | |      S Nr   )r   r   r   r'   r   rn   r    r   r   s       r   r   r     .     }++-99;;uE**r   c                Z    t        j                  | |      }||j                  |      }|S r   )r'   
empty_likereshape)	prototyper    r   r   rn   rI   s         r   r   r     s/     iu5F&Mr   c                   t        | t              r| f} ||j                  }t        | t        t        f      s| f} t        j                  | ||      S r   )r)   rd   r    r*   r+   r'   full)rn   
fill_valuer    r   r   s        r   r   r     sM     %}  eeT]+::eZu55r   c                \    t        j                  | ||      }||j                  |      }|S r   )r'   	full_liker   )r   r   r    r   r   rn   rI   s          r   r   r     s/     __Q
%8F&Mr   c               p    |t        j                         j                  }t        j                  | |      S r   )r   r   r   r'   onesr   s       r   r   r     s.     }++-99::e5))r   c                Z    t        j                  | |      }||j                  |      }|S r   )r'   	ones_liker   r   r    r   r   rn   rI   s         r   r   r     s-     __Qe,F&Mr   c               p    |t        j                         j                  }t        j                  | |      S r   )r   r   r   r'   zerosr   s       r   r   r     r   r   c                Z    t        j                  | |      }||j                  |      }|S r   )r'   
zeros_liker   r   s         r   r   r     s/     au-F&Mr   c                   |d| j                   z
  }|dkD  r!| j                  d|z  | j                  z         } |s| j                  d   dk7  r| j                  } | j	                         } d|j                   z
  }|dkD  r!|j                  d|z  |j                  z         }|s|j                  d   dk7  r|j                  }|j	                         }t        | |fd      } | S )z$Prepare inputs for cov and corrcoef.r   r   r   r   rX   )rY   viewrn   mTr   rE   )x_tensory_tensorrowvar
ndim_extras       r   _xy_helper_corrcoefr     s     &
>}}TJ%6%GHH(..+q0{{H>>#&
>}}TJ%6%GHH(..+q0{{H>>#8 41=Or   r   c               F   ||t         t        | ||      }|j                  t        j                  k(  xr |j
                  }|rt        j                  }t        j                  ||      }t        j                  |      }|r|j                  t        j                        }|S r   )rm   r   r    r'   float16is_cpufloat32r	   r   corrcoefto)	ry   yr   biasddofr    	xy_tensoris_halfrI   s	            r   r   r     s     4+!!#Aq&1I%--/EY5E5EG$$Y6I^^I&F5==)Mr   c               P   t        | ||      } |	|dk(  rdnd}| j                  t        j                  k(  xr | j                  }|rt        j
                  }t        j                  | |      } t        j                  | |||      }	|r|	j                  t        j                        }	|	S )Nr   r   )
correctionaweightsfweights)
r   r    r'   r   r   r   r	   r   covr   )
mr   r   r   r   r   r   r    r   rI   s
             r   r   r   -  s     	Aq&)A|AIq1ww%--'5QXXGQ&AYYqTHxPF5==)Mr   c                   t        j                  | |      }t        j                  | |      } t        j                  ||      }|dk(  r|j                  d   dz
  n|}|dk(  r |j                  d   dz  dk(  rt        d      | d d d f   }|d d d d f   }t        j                  j                  j                  |||      }|dd d f   S )Nr   r   r   samer   z#mode='same' and even-length weights)padding)
r   r=   r	   r   rn   rm   r'   nn
functionalconv1d)r   vmodedtr   aavvrI   s           r   _conv_corr_implr   K  s    		&	&q!	,BQ#AQ#A $aggaj1nDG&QWWQZ!^q0 ""GHH 
47B	
4q=	BXX  ''B'@F !Q$<r   c                    | j                   d   |j                   d   k  r|| }} t        j                  |d      }t        | ||      S )Nr   r   )rn   r'   flipr   r   r   r   s      r   convolver   b  sD    wwqzAGGAJ!1 	

1dA1a&&r   c                F    t        j                  |      }t        | ||      S r   )r'   conj_physicalr   r   s      r   	correlater   m  s!    AA1a&&r   c                   | j                         dk(  r| j                  dt              } t        j                         j
                  }t        j                  | f|d      \  } t        j                  | ||      S )Nr   r   safer   )
numel	new_emptyrd   r   r   r   r	   r   r'   bincount)ry   weights	minlengthr   s       r   r  r  u  s`    wwyA~KKK%++-77I!!1$	6BDQ>>!Wi00r   c               
   |d u |d u k7  rt        d      | j                  t        j                  k7  r| j	                  t        j                        } ||t        j
                  |       }|S t        j
                  | ||      }|S )Nz1either both or neither of x and y should be given)r6   r    r'   boolr   r$   )	conditionry   r   rI   s       r   r$   r$     sy     	
T	qDy!LMM%**$LL,	yQYY' M Y1-Mr   c                    | j                   S r   )rY   r   s    r   rY   rY     s    66Mr   c                ,    t        | j                        S r   )r*   rn   r  s    r   rn   rn     s    >r   c                D    || j                         S | j                  |   S r   )r  rn   )r   rB   s     r   sizer    s!    |wwywwt}r   c                d    t        j                  | j                  |      }| j                  |      S r   )r	   expand_shapern   r   )r   rB   rn   s      r   expand_dimsr    s&    qww-E66%=r   c                    |t        t        | j                              }n t        j                  || j                        }t        j                  | |      S r   )r*   rangerY   r	   normalize_axis_tupler'   r   )r   rB   s     r   r   r     s@    |U166]#))$7::ar   c                ,    t        j                  |       S r   )r'   flipudr   s    r   r  r        <<?r   c                ,    t        j                  |       S r   )r'   fliplrr  s    r   r  r    r  r   c                p    t        j                  || j                        }t        j                  | ||      S r   )r	   r  rY   r'   rot90)r   kaxess      r   r  r    s+    %%dAFF3D;;q!T""r   c                0    t        j                  | |      S )N)r  )r'   broadcast_to)arrayrn   r   s      r   r   r     s    e%00r   )broadcast_shapes)r   c                &    t        j                  | S r   )r'   broadcast_tensors)r   argss     r   broadcast_arraysr&    s    ""D))r   xy)r   sparseindexingc           
        t        |      }|dvrt        d      d|z  }t        |      D cg c]%  \  }}|j                  |d | dz   ||dz   d  z         ' }}}|dk(  r?|dkD  r:|d   j                  d|d	d  z         |d<   |d   j                  d
|d	d  z         |d<   |st	        j
                  | }| r|D cg c]  }|j                          }}t        |      S c c}}w c c}w )N)r'  ijz.Valid values for `indexing` are 'xy' and 'ij'.r   )rv   r   r'  r   )r   rv   r   )rv   r   )rw   r6   	enumerater   r'   r$  r   r+   )	r   r(  r)  xirY   s0iry   outputs	            r   meshgridr1    s    r7D|#IJJ	BBKB-P$!Qaii2AAEG45PFP4D1H1I%%g12&67q	1I%%g12&67q	((&1%+,!''),,< Q -s   *C9C#c                *   t        |       } t        |       }d|z  }|rd}nt        j                  |f| z   |      }t	        |       D ]I  \  }}t        j
                  ||      j                  |d | |fz   ||dz   d  z         }|r||fz   }E|||<   K |S )Nr   r5   r   r   )r*   rw   r'   r   r,  r   r   )	
dimensionsr    r(  r   rn   r.   r/  dimidxs	            r   indicesr6    s    z"JJA1HEkk1$+59J' 3ll3e,44"1Iq1uw/
 ,CCF Jr   c                .    t        j                  | |      S r   )r'   trilr   r  s     r   r8  r8    r   r   c                .    t        j                  | |      S r   )r'   triur9  s     r   r;  r;    r   r   c                :    || }t        j                  | ||      S Noffset)r'   tril_indicesrq   r  r   s      r   r@  r@  	  !    ya1--r   c                :    || }t        j                  | ||      S r=  )r'   triu_indicesrA  s      r   rD  rD    rB  r   c                    | j                   dk7  rt        d      t        j                  | j                  d   | j                  d   |      S Nr   zinput array must be 2-dr   r   r>  )rY   r6   r'   r@  rn   r`   r  s     r   tril_indices_fromrH    >    
xx1}233ciilCIIaLCCr   c                    | j                   dk7  rt        d      t        j                  | j                  d   | j                  d   |      S rF  )rY   r6   r'   rD  rn   rG  s     r   triu_indices_fromrK    rI  r   c               j    || }t        j                  | |f|      }t        j                  ||      S )Nr   )diagonal)r'   r   r8  )r   Mr  r    r   rh   s         r   trirO  #  s3     	yZZAe,F::fq))r   c                    t        j                  | |      }t        j                  | |      } t        j                  ||      }t	        j
                  | ||||      S N)rtolatol	equal_nan)r   r=   r	   r   r'   iscloser   r{   rR  rS  rT  r    s         r   rU  rU  4  sO    ))!Q/EQ&AQ&A==ADtyIIr   c                    t        j                  | |      }t        j                  | |      } t        j                  ||      }t	        j
                  | ||||      S rQ  )r   r=   r	   r   r'   allcloserV  s         r   rX  rX  ;  sO    ))!Q/EQ&AQ&A>>!QT	JJr   c                    | j                   |j                   k7  ry| |k(  }|r.|t        j                  |       t        j                  |      z  z  }|j                         j	                         S NF)rn   r'   isnanallitem)a1a2rT  conds       r   _tensor_equalra  B  sS    	xx2888Du{{2R8988:??r   c                    t        | ||      S )NrT  )ra  )r^  r_  rT  s      r   array_equalrd  L  s    R955r   c                l    	 t        j                  | |      \  }}t        ||      S # t        $ r Y yw xY wrZ  )r'   r$  RuntimeErrorra  )r^  r_  a1_ta2_ts       r   array_equivri  P  s@    ,,R4
d t$$  s   ' 	33c                    | j                         rNt        j                  | j                  |||      }t        j                  | j                  |||      }|d|z  z   S t        j                  | |||      S )N)nanposinfneginfy              ?)r   r'   
nan_to_numrealimag)ry   r   rk  rl  rm  reims          r   rn  rn  Z  sf     	||~aff#fVLaff#fVLBG|s6&IIr   c                    t        j                  | |      \  \  } }t        j                  || j                        }t	        d       f|z  |dfz   }| |   }|S )NrX   .)r	   rC   rZ   rY   slice)r   r6  rB   r9   r   r5  rI   s          r   takeru  i  sY     ((6JDQ$%%dAFF3D;.4
7C.
0CsVFMr   c                    t        j                  | |      \  \  } }t        j                  || j                        }t	        j
                  | ||      S NrX   )r	   rC   rZ   rY   r'   take_along_dim)r`   r6  rB   s      r   take_along_axisry  w  sE    **3T:LFSD%%dCHH5DWd33r   c                   |j                  | j                        }|j                         |j                         kD  rc|j                         |j                         z   dz
  |j                         z  }|j                  d      j	                  |f|j
                  z         }|j                         |j                         k  r#|j                         }|d |j                          }| j                  ||       y Nr   r   )rg   r    r  	unsqueezeexpandrn   r_   put_)r   r6  ra   r   r   ratios         r   putr  }  s     	AGGA }}"1779,q0QWWY>KKN!!5(QWW"45 }}"IIK FF7Ar   c                r   t        j                  | |      \  \  } }t        j                  || j                        }t	        j
                  ||      \  }}t        j                  || j                        }t	        j                  | |||      }| j                  |j                  | j                               y rw  )r	   rC   rZ   rY   r'   r$  r   r    scatterr!   r   rn   )r`   r6  ra   rB   rI   s        r   put_along_axisr    s    **3T:LFSD%%dCHH5D--gv>OGV!!&#))4F]]3gv6FIIfnnSYY'(r   c           
     V   t        j                  t        j                  |       }t        |j                        D cg c]F  \  }}t        j
                  |      j                  d|z  |fz   d|j                  |z
  dz
  z  z         H }}}| |d<   ||   j                  d      S c c}}w )Nr   r   r   )	r'   r[   r$  r,  rn   r   r   rY   squeeze)r   choicesr9   r   r/  r4  idx_lists          r   chooser    s     kk%117;<G  .As 	Stax3&047<<!;Ka;O3PPQH 
 HQK8$$Q''s   AB%rc  c                   t        j                  | |      \  \  } }t        j                  || j                        }t	        j
                  | |||      }|S )NrX   )return_inversereturn_countsr4  )r	   rC   rZ   rY   r'   unique)arreturn_indexr  r  rB   rT  rI   s          r   r  r    sP     ))"48KER4%%dBGG4D\\
>DF Mr   c                0    t        j                  | d      S )NTas_tuple)r'   nonzeror  s    r   r  r    s    ==T**r   c                ,    t        j                  |       S r   )r'   argwherer  s    r   r  r        >>!r   c                R    t        j                  |       j                  d      d   S )NTr  r   )r'   r_   r  r  s    r   flatnonzeror    s$    ==##T#2155r   c                0    t        j                  | ||      S r   )r'   clamp)r   minmaxr9   s       r   clipr    s     ;;q#s##r   c                0    t        j                  | ||      S r   )r'   repeat_interleave)r   repeatsrB   s      r   repeatr    s    ""1gt44r   c                T    t        |t              r|f}t        j                  | |      S r   )r)   rd   r'   tile)Arepss     r   r  r    s$    $w::ar   c                d   || S t        |t              r|f}| j                         } d}|D ]  }||z  }|dk  st        d       | j	                         dk(  s|dk(  r!t        j                  || j                        S | | j	                         z   }t        | f|z        d | } t        | |      S )Nr   r   z0all elements of `new_shape` must be non-negativer   )
r)   rd   r_   r6   r  r'   r   r    rJ   r   )r   	new_shapenew_size
dim_lengthr  s        r   resizer    s     )S!L				AH Q
J>OPPQ
 	wwyA~Q{{9AGG44	QWWY&'GQD7N#IX.A1i  r   c                    t        j                  || j                        }t        j                  || j                        }t        j                  | |||      S r   )r	   rZ   rY   r'   rM  )r   r?  axis1axis2s       r   rM  rM    sC    &&uaff5E&&uaff5E>>!VUE22r   c                Z    t        j                  | |||      j                  d|      }|S )N)dim1dim2rv   r   )r'   rM  sum)r   r?  r  r  r    r9   rI   s          r   tracer  
  s-     ^^AvE>BB2UBSFMr   c                   |t        j                         j                  }|| }t        j                  | ||      }|j                  |      j                  d       |S )Nr   r   )r   r   r   r'   r   rM  fill_)r   rN  r  r    r   r   zs          r   eyer    sT     }++-99yAq&AJJqMHr   c               0    t        j                  | |      S r   )r'   r  )rq   r    r   s      r   identityr  (  s    99Qe$$r   c                .    t        j                  | |      S r   )r'   diagr   r  s     r   r  r  ,  r   r   c                .    t        j                  | |      S r   )r'   diagflatr  s     r   r  r  0  s    >>!Qr   r   c                8    t        j                  |       }|f|z  S r   )r'   r   )rq   rY   r5  s      r   diag_indicesr  4  s    
,,q/C6D=r   c                    | j                   dk\  st        d      | j                  }|dd  |d d k7  rt        d      t        |d   | j                         S )Nr   z input array must be at least 2-dr   rv   z/All dimensions of input must be of equal lengthr   )rY   r6   rn   r  )r`   ss     r   diag_indices_fromr  9  sX    88q=;<< 			Au#2JKK!chh''r   c                   | j                   dk  rt        d      |j                         dk(  r|s| j                  |       | S |j                   dk(  r|j	                  d      }| j                   dk(  r| j
                  d   | j
                  d   kD  }|r|s4| j                         }|j                  |d |j                                 | S | j
                  \  }}t        j                  |||dz   z  z
        }||z  }||z  }	|d |j                          | |	|dz   z  |z   |f<   | S t        |       }|d | j
                  d    | |<   | S )Nr   zarray must be at least 2-dr   r   )rY   r6   r  fill_diagonal_r|  rn   rM  r!   r'   r   r  )
r   valwraptallr  max_min_r5  moddivs
             r   fill_diagonalr  D  sC   vvz566
yy{a	
xx1}mmA 	vv{wwqzAGGAJ&4::<DJJs>TZZ\*+ H JD$,,tdtax&889C*C+C/2=SYY[/AAsdQh#%s+, H	  "\qwwqz"#Hr   c                  t        j                  | |      \  }}|j                  dkD  r|j                         }|j                  dkD  r|j                         }t	        j
                  ||      }|t         j                  k(  xr |j                  xs |j                  }|t         j                  k(  }|rt         j                  }n|rt         j                  }t        j                  ||      }t        j                  ||      }t        j                  ||      }|r!|j                  t         j                        }|S |r|j                  t         j                        }|S Nr   )r'   r(   rY   r_   r   r=   r   r   r  r   uint8r	   r   vdotr   )r   r{   t_at_br    r   is_boolrI   s           r   r  r  f  s    1%HC
xx!|kkm
xx!|kkm))#s3Eu}}$C#***B

Guzz!G 	


sE
*C


sE
*CZZS!F5==) M 
5::&Mr   c                0   t        |t        t        f      r"|D cg c]  }t        |t              r|gn| }}t	        j
                  | |      }t        j                  | |      } t        j                  ||      }t        j                  | ||      S c c}w )N)dims)
r)   r+   r*   rd   r   r=   r	   r   r'   	tensordot)r   r{   r  axtarget_dtypes        r   r  r    s    $u&>BC
2s+3CC00A6LQ-AQ-A??1ad++ Ds   Bc                   t        j                  | |      }|t        j                  k(  }|rt        j                  }t        j                  | |      } t        j                  ||      }| j                  dk(  s|j                  dk(  r| |z  }nt        j                  | |      }|r|j                  t        j                        }|S Nr   )
r   r=   r'   r  r  r	   r   rY   matmulr   )r   r{   r9   r    r  rI   s         r   dotr    s    ))!Q/Euzz!GQ&AQ&Avv{affkQa#5::&Mr   c                  t        j                  | |      }|t        j                  k(  xr | j                  xs |j                  }|t        j
                  k(  }|rt        j                  }n|rt        j                  }t        j                  | |      } t        j                  ||      }t        j                  | |      }|r!|j                  t        j                        }|S |r|j                  t        j
                        }|S r   )r   r=   r'   r   r   r  r   r  r	   r   innerr   )r   r{   r    r   r  rI   s         r   r  r    s    ))!Q/Eu}}$?!((*>ahhGuzz!G	Q&AQ&A[[AF5==) M 
5::&Mr   c                .    t        j                  | |      S r   )r'   outer)r   r{   r9   s      r   r  r    s    ;;q!r   c                   |
|fdz  \  }}}t        j                  || j                        }t        j                  ||j                        }t        j                  | |d      } t        j                  ||d      }d}| j
                  d   dvs|j
                  d   dvrt        |      t        | d   j
                  |d   j
                        }| j
                  d   dk(  s|j
                  d   dk(  r$|dz  }t        j                  |t        |            }t        j                  | |      }t        j                  ||      }	t        j                  | |      } t        j                  ||      }| d   }
| d   }| j
                  d   dk(  r| d	   }|d   }|d   }|j
                  d   dk(  r|d	   }|	j                  d
k7  r!|	j
                  d   dk(  r|	d   }|	d   }|	d	   }| j
                  d   dk(  rV|j
                  d   dk(  r|
|z  ||z  z
  |	d<   |	S |j
                  d   dk(  sJ |z  d<   |
 |z  d<   |
|z  ||z  z
  d<   n| j
                  d   dk(  sJ |j
                  d   dk(  r+|z  |z  z
  d<   ||z  |
|z  z
  d<   |
|z  ||z  z
  d<   n3|j
                  d   dk(  sJ  |z  d<   ||z  d<   |
|z  ||z  z
  d<   t        j                  |	d|      S )Nr   rv   zDincompatible dimensions for cross product
(dimension must be 2 or 3))r   r   ).r   )r   r   ).r   ).r   r   r   .)r	   rZ   rY   r'   moveaxisrn   r6   r"  rw   r   r=   r   r   )r   r{   axisaaxisbaxiscrB   msgrn   r    cpa0r^  r_  b0b1b2cp0cp1cp2s                      r   crossr    s    #gkue &&uaff5E&&uaff5E 	q%$Aq%$A
QCwwr{& AGGBKv$=o QvY__aioo>Ewwr{a1772;!+**5#e*=))!Q/E	U%	(B 	Q&AQ&A 
6B	
6Bwwr{avY	
6B	
6Bwwr{avY	ww!|)jjjwwr{a772;!2gR'BsGI772;!### BwCHsRxCHBwb(CHwwr{a772;!Bwb(CHBwb(CHBwb(CH772;!###sRxCHBwCHBwb(CH>>"b%((r   r  )r9   r    r   r   optimizec                p   ddl m} ddlm}m}m}	m}
m}  |
|      } |	|      }| t        | |      st        d      |dk7  rt        d      t        |d   t               }|r|d d d d d	   }n
|d   |dd  }}|D cg c]
  } ||       }}|t        j                  | n|}|t        j                  k(  xr t!        d
 |D              }|rt        j"                  }|t        j$                  t        j&                  t        j(                  t        j*                  fv }|rt        j,                  }t/        j0                  |||      }ddlm} 	 |j7                         rt        j8                  j4                  j:                  }t        j8                  j4                  j<                  }|du rd}n#|du rdt        j8                  j4                  _        |t        j8                  j4                  _        |rx|dd d	   }t?        |      d	z  dk(  }|r|d   }tA        tB        jD                  jG                  tI        ||                  }|r|jK                         t        jL                  | }nt        jL                  g| }|j7                         r?t        j8                  j4                  _        t        j8                  j4                  _        	  || |      } ||      S c c}w # |j7                         r?t        j8                  j4                  _        t        j8                  j4                  _        w w xY w)Nr   )ndarray)maybe_copy_tonormalize_array_likenormalize_castingnormalize_dtypewrap_tensorsz'out' must be an arrayr   z#'order' parameter is not supported.r   rv   r   c              3  4   K   | ]  }|j                     y wr   )r   )r   ts     r   r   zeinsum.<locals>.<genexpr>/  s     3NAHH3Ns   )
opt_einsumTautoF)'_ndarrayr  _normalizationsr  r  r  r  r  r)   r7   rm   strr   r=   r'   r   r\  r   r  int8int16int32int64r	   r   torch.backendsr  is_availablebackendsstrategyenabledrw   r+   	itertoolschainfrom_iterablerx   rb   einsum)r9   r    r   r   r  operandsr  r  r  r  r  r  sublist_formatarray_operands
subscriptsopr>   r  r   is_short_intr  old_strategyold_enabledsublistshas_sublistout
sublistoutrI   s                              r   r
  r
    s    "  E"E(G
z#w7011|!"GHH $HQK55N "#2ss+ &.a[(12,N
2@AB#B'AGA>Cm<00':QVL emm+N3Ng3N0NG}}EKKU[[%++#VVL{{$$WlGDG)!<""$ >>44==L..33;;K
 4!U"49))119ENN%%.1~H ]Q.!3N%b\
IOO99#gx:PQRH
+\\8,F\\*7w7F ""$1=ENN%%.0;ENN%%-3'Fi B^ ""$1=ENN%%.0;ENN%%- %s   >KD1K$ $AL5c                    | j                   j                  rt        d| j                    d      t        j                  | |      \  \  } }t        j
                  || j                        }|dk(  }| ||fS )Nzsorting z is not supportedrX   stable)r    r   rm   r	   rC   rZ   rY   )rh   rB   kindr   r  s        r   _sort_helperr  e  sm    ||!HV\\N:K"LMM--f4@OIVt%%dFKK8DXF4r   c                n    t        | |||      \  } }}t        j                  | ||      }|j                  S N)r4  r  )r  r'   sortra   )r   rB   r  r   r  rI   s         r   r  r  p  s4    "1dD%8OAtVZZtF3F==r   c                V    t        | |||      \  } }}t        j                  | ||      S r  )r  r'   argsort)r   rB   r  r   r  s        r   r  r  w  s+    "1dD%8OAtV==V44r   c                    | j                   j                  rt        d| j                          t        j                  | |||      S )Nzsearchsorted with dtype=)sidesorter)r    r   rm   r'   searchsorted)r   r   r   r!  s       r   r"  r"  |  s?     	ww!$<QWWI"FGGaf==r   c                    t        j                  || j                  d      }t        j                  || j                  d      }t        j                  | ||      S )Nsourcedestination)r	   r  rY   r'   r  )r   r$  r%  s      r   r  r    sE    ''AF,,[!&&-PK>>!V[11r   c                    t        j                  || j                        }t        j                  || j                        }t        j                  | ||      S r   )r	   rZ   rY   r'   swapaxes)r   r  r  s      r   r'  r'    sA    &&uaff5E&&uaff5E>>!UE**r   c                t   | j                   }t        j                  ||      }|dk  r||z  }d}d|cxk  r|dz   k  s#n t        j                  |d| d|dz   |fz        ||k  r|dz  }||k(  r| S t	        t        d|            }|j                  |       |j                  ||       | j                  |      S )Nr   z5'%s' arg requires %d <= %s < %d, but %d was passed inr   r   )	rY   r	   rZ   	AxisErrorr+   r  removeinsertr   )r   rB   r   rq   r  r  s         r   rollaxisr,    s     	
A%%dA.Dqy

ACQoocWqb'1q5%$HHIIe|
u} aDKKKKt66$<r   c                    |At        j                  || j                  d      }t        |t              s|ft        |      z  }t        j                  | ||      S )NT)allow_duplicate)r	   r  rY   r)   r*   rw   r'   roll)r   shiftrB   s      r   r/  r/    sM    ))$M%'Hs4y(E::a%%r   c                    |dk(  r| }|S || j                         }|S t        |t              r| }|D ]  }| j                  |      } |S | j                  |      }|S )Nr5   )r  r)   r*   )r   rB   rI   r  s       r   r  r    sv    rz M 
 M dE"F '2' M YYt_FMr   c                N    t        |      dk(  r|d   n|}| j                  |      S r{  )rw   r   )r   newshaper   s      r   r   r     s'    !(mq0x{hH99Xr   c                    |dv r(t        t        t        | j                                    }nt	        |      dk(  r|d   }| j                  |      S )N)r5   Nr   r   r   )r*   reversedr  rY   rw   permute)r   r  s     r   	transposer7    sF     ""XeAFFm,-	TaAw99T?r   c                ,    t        j                  |       S r   )r'   r_   )r   r   s     r   ravelr9    s    ==r   c                   t        j                  || j                        }|dk  rt        d|       |dk(  r| S |Nt	        | j
                        }|j                  dkD  r|j
                  |   nd||<   t        j                  ||      }|Nt	        | j
                        }|j                  dkD  r|j
                  |   nd||<   t        j                  ||      }t        j                  | ||||      S )Nr   z#order must be non-negative but got r   )rB   prependrb   )	r	   rZ   rY   r6   r+   rn   r'   r   diff)r   rq   rB   r;  rb   rn   s         r   r<  r<    s     %%dAFF3D1u>qcBCCAvQWW-4\\A-=gmmD)1d$$We4QWW,2KK!Ofll4(d##FE2::awvFFr   c                `    t        j                  |       }|r|dt         j                  z  z  }|S )N   )r'   anglepi)r  degrI   s      r   r?  r?    s)    [[^F
3>*Mr   c                ,    t        j                  |       S r   )r'   sincry   s    r   rC  rC  	      ::a=r   )rB   
edge_orderc                  | j                   }t        j                  |      }|t        t	        |            }nt        j
                  ||      }t        |      }t        |      }|dk(  rdg|z  }n>|dk(  r1t        j                  |d         s|d   j                   dk(  r||z  }n||k(  rt        |      }t        |      D ]  \  }	}
t        j                  |
      }
|
j                   dk(  r+|
j                   dk7  rt        d      t        |
      | j                  ||	      k7  rt        d      |
j                  j                   s&|
j                  j"                  s|
j%                         }
t        j&                  |
      }||d   k(  j)                         r|d   }|||	<    nt+        d      |dkD  rt        d      g }t-        d       g|z  }t-        d       g|z  }t-        d       g|z  }t-        d       g|z  }| j                  }t        j.                  |      t0        t2        fv r | j%                         } t        j4                  }t7        ||      D ]  \  }}| j                  |   |dz   k  rt        d	      t        j8                  | |
      }t        j                  |      xs |j                   dk(  }t-        dd      ||<   t-        d d      ||<   t-        dd      ||<   t-        dd       ||<   |r0| t        |         | t        |         z
  d|z  z  |t        |      <   n|dd }|dd  }| |||z   z  z  }||z
  ||z  z  }||||z   z  z  }dg|z  }d||<   |j;                  |      }|j;                  |      }|j;                  |      }|| t        |         z  || t        |         z  z   || t        |         z  z   |t        |      <   |dk(  rd||<   d||<   d||<   |r|n|d   }| t        |         | t        |         z
  |z  |t        |      <   d||<   d||<   d||<   |r|n|d   }| t        |         | t        |         z
  |z  |t        |      <   n3d||<   d||<   d||<   d||<   |rd|z  }d|z  }d|z  }n3|d   }|d   }d|z  |z    |||z   z  z  }||z   ||z  z  }| |||z   z  z  }|| t        |         z  || t        |         z  z   || t        |         z  z   |t        |      <   d||<   d||<   d||<   d||<   |rd|z  }d|z  }d|z  }n2|d   }|d   }||||z   z  z  }||z    ||z  z  }d|z  |z   |||z   z  z  }|| t        |         z  || t        |         z  z   || t        |         z  z   |t        |      <   |j=                  |       t-        d       ||<   t-        d       ||<   t-        d       ||<   t-        d       ||<    |dk(  r|d   S |S )Nr   r   r   z&distances must be either scalars or 1dzGwhen 1d, distances must match the length of the corresponding dimensionzinvalid number of argumentsr   z)'edge_order' greater than 2 not supportedzlShape of array too small to calculate a numerical gradient, at least (edge_order + 1) elements are required.r   rv   g       @g      g      g      ?g       g      ?)rY   r	   ndarrays_to_tensorsr*   r  r  rw   r   	is_scalarr+   r,  r'   	as_tensorr6   rn   r    is_floating_pointr   doubler<  r\  r7   rt  python_type_for_torchrd   r  r   rx   r   r   rb   )frB   rF  varargsr   r  len_axesrq   dxr/  	distancesdiffxoutvalsslice1slice2slice3slice4otypeax_dxr9   uniform_spacingdx1dx2r   r{   crn   dx_0dx_ns                                r   gradientrc    s   	A''0G|U1X))$24yHGAAvUX	
a\++GAJ771:??a;Ox	
h']%bM 	LAy	2I~~"1$ !IJJ9~a!11 @  OO559S9S%,,.	JJy)E q!&&(aBqE'	* 566A~DEE
 G Dk]QFDk]QFDk]QFDk]QFGGE))%0S$K? HHJ4} c#e774=:>)C 
 q. '007J5::? Q|tT2tQ|tQ~t"#E&M"2QuV}5E"E#PU+!VCf"+C)C#s+,AssSy)AscCi()AC!GEE$K		% A		% A		% A AeFm$$q1U6]+;';;a!E&MBR>RR f
 ?F4LF4LF4L+5qD"#E&M"2QuV}5E"E!MCfF4LF4LF4L+5rD"#E&M"2QuV}5E"E!MCf F4LF4LF4LF4L5L%K5LAhAhCi#o&#s*;<3Y39-DC39-. AeFm$$q1U6]+;';;a!E&MBR>RR f F4LF4LF4LF4L%K5L%KBiBiSC#I./CiLC#I.3Y_c	):; AeFm$$q1U6]+;';;a!E&MBR>RR f 	s T{tT{tT{tT{tGc#J 1}qzr   c                (   | j                         rt        j                  | |      }|S | j                         rVt        j                  t        j                  | j
                  |      t        j                  | j                  |            }|S | }|S )N)decimals)rM  r'   roundr   complexro  rp  )r   re  r9   rI   s       r   rf  rf    su    Q2 M 
KK2KK2
 M Mr   c                   t        j                  |       s| S |dkD  r,|t        j                  | j                        j                  z  }t        j
                  | j                        |k  }|j                         r| j                  S | S r  )	r'   r   finfor    epsabsrp  r\  ro  )r   tolmasks      r   real_if_closern    si    A
Qw EKK(,,,99QVVs"DXXZ166&Q&r   c                ,    t        j                  |       S r   )r'   ro  r  s    r   ro  ro    rE  r   c                d    | j                         r| j                  S t        j                  |       S r   )r   rp  r'   r   r  s    r   rp  rp    s%    ||~vvAr   c                    t        j                  |       r| j                  dk7  S t        j                  | t         j                        S r   )r'   r   rp  r   r  rD  s    r   	iscomplexrr    s5    vv{AUZZ00r   c                    t        j                  |       r| j                  dk(  S t        j                  | t         j                        S r   )r'   r   rp  r   r  rD  s    r   isrealrt    s3    vv{??1EJJ//r   c                ,    t        j                  |       S r   r'   r   rD  s    r   iscomplexobjrw    s    Ar   c                .    t        j                  |        S r   rv  rD  s    r   	isrealobjry    s    """r   c                ,    t        j                  |       S r   )r'   isneginfry   r9   s     r   r{  r{    r  r   c                ,    t        j                  |       S r   )r'   isposinfr|  s     r   r~  r~     r  r   c                @    t         j                  j                  |       S r   )r'   speciali0rD  s    r   r  r    s    ==Ar   c                d    ddl m} 	  ||       }|j                         dk(  S # t        $ r Y yw xY w)Nr   )r  F)r  r  r  	Exception)r   r  r  s      r   isscalarr    s6    5 #wwyA~ s   # 	//c                n    t        j                         j                  }t        j                  | d|      S NF)periodicr    )r   r   r   r'   hamming_windowrN  r    s     r   hammingr    s+    '')55EE??r   c                n    t        j                         j                  }t        j                  | d|      S r  )r   r   r   r'   hann_windowr  s     r   hanningr    s+    '')55EQe<<r   c                p    t        j                         j                  }t        j                  | |d|      S )NF)betar  r    )r   r   r   r'   kaiser_window)rN  r  r    s      r   kaiserr     s-    '')55Eqte5IIr   c                n    t        j                         j                  }t        j                  | d|      S r  )r   r   r   r'   blackman_windowr  s     r   blackmanr  %  +    '')55E  U%@@r   c                n    t        j                         j                  }t        j                  | d|      S r  )r   r   r   r'   bartlett_windowr  s     r   bartlettr  *  r  r   c                 &   d}d}| D ]o  }|j                   }t        |      rd}|j                  s|j                  sd}n#t        j                  |d       }|t        d      t        j                  ||      }q |rt        d   |   S t        d   |   S )NFr   Tr   z+can't get common type for non-numeric arrayr   )
r    rw  rM  r   array_precisiongetr7   builtinsr  
array_type)r>   r   	precisionr   r  ps         r   common_typer  A  s    JI 
/GG?J##q||A##At,Ay MNNLLA.	
/ !}Y''!}Y''r   c           	        |t        d      |!|j                  j                  rt        d      | j                  j                  xs | j                  j                   }|d u xs |j                  j                   }|r| j                         } | t        j                  || j                        }t        |t        j                        rE|j                  dk(  rt        j                  |      }n t        j                  || j                        }|&t        j                  | ||t        |            \  }}	n&t        j                  | |||t        |            \  }}	|s|r|j!                         }|r|	j!                         }	||	fS )N3normed argument is deprecated, use density= insteadzcomplex weights histogram.r   )weightdensity)r  r  r  )r6   r    r   rm   rM  rN  r	   r   r)   r'   TensorrY   operatorindex	histogramr  long)
r   binsr  normedr  r  is_a_intis_w_inthr{   s
             r   r  r  X  sB    NOOw}}77!">??GG--C1C1CDH$Egmm&E&E"EHHHJ&&w8$%99>>>$'D''agg6D}q$wWN1t5$w-
1 xFFHFFHa4Kr   c                    t        |       t        |      k7  rt        d      	 t        |      }|dk7  r	|dk7  r||g}t        | |f|||||      \  }}	||	d   |	d   fS # t        $ r d}Y ;w xY w)Nz"x and y must have the same length.r   r   r   )rw   r6   r7   histogramdd)
ry   r   r  r  r  r  r  r   r  es
             r   histogram2dr    s     1vQ=>>I 	Av!q&d|1vtUFGWEDAqadAaD=  s   A A+*A+c                l   |t        d      ddlm}m} t	        | t
        t        f      r ||       j                  } n ||       } t        j                  |       } | j                  j                  s&| j                  j                  s| j                         } t	        |t              xs t        j                   d |D               }|rN ||      }|D 	cg c]  }	|	j                   }
}	|D 	cg c]"  }	t#        j$                  |	| j                        $ }}	||j'                         j)                         }|| j+                  d      }t        j,                  |      j/                  dd      j                  j'                         }t        |j)                               }t#        j$                  || j                        }d	|i}ni }t        j0                  | ||fd
t3        |      i|\  }}	|r2t5        |	
      D cg c]  \  }}t#        j$                  ||       }	}}||	fS c c}	w c c}	w c c}}w )Nr  r   )r  normalize_seq_array_likec              3  <   K   | ]  }t        |t                y wr   )r)   rd   )r   r{   s     r   r   zhistogramdd.<locals>.<genexpr>  s     -OQjC.@-Os   r   )r4  r   rv   r  r  )r6   r  r  r  r)   r+   r*   Tr'   r1   r    rM  r   rN  rd   r  r\  r	   r   r_   tolistaminmaxrD   r   r  r  rx   )sampler  r  r  r  r  r  r  bins_is_arrayr{   bins_dtypesmmw_kwdr  bbdtyps                   r   r  r    s    NOOO&4-(%f-//%f-f%FLL**fll.E.E 	4O-O$-O!OM '-(,-1qww--?CD!$$Q5DD&&(^^^"		"%%a,..668elln%&&w=7#VT5Q$w-Q5QDAq<?;<OPDU!!"d+PPa4K+ .D$ Qs   H&.'H+? H0c                  ddl m} | j                         dkD  r || j                        S | j                  t        j
                  k(  rt        j
                  }n| j                  j                  rt	        j                  t        j                        }| j                  t        j                  k(  xs^ |j                  | j                  cxk  xr |j                  k  nc xr. |j                  | j                  cxk  xr |j                  k  nc }|rt        j                  nt        j                  }n| j                  j                  rpt        j                   t        j                  t        j"                  fD ]=  }t	        j                  |      }|j                  | cxk  r|j                  k  s8n ;|} n nt        j$                  t        j&                  t        j(                  t        j*                  t        j,                  fD ]=  }t	        j.                  |      }|j                  | cxk  r|j                  k  s8n ;|} n  |      S )Nr   )DType)_dtypesr  r  r    r'   r  r   ri  r   	complex64r  ro  r  rp  
complex128rM  r   r   r  r  r  r   r  iinfo)r   r  r    fifits_in_singler   iis          r   min_scalar_typer    s|    wwy1}QWW~ww%**

	
		[['EOO3 
FFaff&&E266QVV+Ervv+E 	 $2u7G7G	
	"	"==%--? 	BRBvv$bff$		 ;;

EKKekkR 	BRBvv$bff$	 <r   c                   |dk7  rt         |j                  dd      }t        j                  | j                        } ||      }t        j                  || j                  df      }t        j                  |d      j                         }t
        j                  j                  j                  | t        |      |      S )Nconstantconstant_valuesr   r   r   )value)rm   r  r   rO  r    r'   r   rY   r   r_   r   r   padr*   )r!  	pad_widthr   kwargsr  typs         r   r  r    s    z!!JJ(!,E

,
,U[[
9CJE""9uzz1o>I

9d+335I88""5%	*:%"HHr   )r   F)r   r
   r   r   r   r   )r   N)r"   r   r#   r
   r   Optional[CastingModes]r$   r   )r-   r
   )NNr   )r   NNr   )r   r  )rH   Sequence[ArrayLike]r9   Optional[OutArray]r    Optional[DTypeLike]r   r  )r8   r  r    r  r   r  )r   N)r\   r  r9   r  r    r  r   r  r   )r`   r
   ra   r
   )Fr   )r   r
   )r   r
   r{   r
   rZ  )ry   r
   )2   TFNr   )r   r
   r   r
   r    r  )r  TNr   )r  Tg      $@Nr   )r    r  )NNr   N)
r   Optional[ArrayLikeOrScalar]r   r  r   r  r    r  r   r   )NC)r    r  r   r   r   r   )Nr   FN)r   r
   r    r  r   r   r   r   )r   r
   r    r  r   r   r   r   )r   r
   r    r  r   r   r   r   )NT)NTNN)ry   r
   r   Optional[ArrayLike]r    r  )NTFNNN)
r   r
   r   r  r   r  r   r  r    r  )r   )r   r
   r   r
   )validr  )r  r  ry   r
   )NN)r	  r
   ry   r  r   r  )r   r
   )r   r
   )r   )r   r   )r!  r
   r   r   )r%  r
   r   r   )r-  r
   )r`   r
   )Nr   N)r    r  r   r   )gh㈵>g:0yE>F)r^  r
   r_  r
   )Tg        NN)ry   r
   r   r   )NNraise)r   r
   r6  r
   r9   r  r   r   )r`   r
   r6  r
   )r  )r   r   r6  r
   ra   r
   r   r   )r`   r
   r6  r
   ra   r
   )Nr  )r   r
   r  r  r9   r  r   r   )FFFN)r  r
   r  r   rT  r   )NNN)r   r
   r  r  r  r  r9   r  )r   r
   r  r   )r  r
   )r   r   r   )r   r   r   NN)r   r
   r    r  r9   r  )Nr   Nr  )r   r
   )r   )r   r
   r  r
   )r   r
   r{   r
   r9   r  )rv   rv   rv   N)rv   NN)r   r
   r   r   )leftN)r   r
   r   r
   r!  r  )r  )r   rv   NN)r   r
   r;  r  rb   r  )r  r
   )rP  r
   )r   r
   r9   r  )d   )ry   r
   r9   r  )r>   r
   )
   NNNN)r   r
   r  r
   r  r  )r  r  r  r  )r  )r!  r
   r  r
   )__doc__
__future__r   r  r  r  typingr   r   r   r'    r   r	   r  r
   r   r   r   r   r   r   r   r%   r(   r1   r3   r:   r@   rE   rJ   rN   	row_stackrR   rT   rV   r[   rb   rk   re   rf   r   ro   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$   rY   rn   r  r  r   r  r  r  r   r"  r&  r1  rd   r6  r8  r;  r@  rD  rH  rK  rO  rU  rX  ra  rd  ri  rn  ru  ry  r  r  r  r  r  r  r  r  r  r  r  rM  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   r7  r9  r<  r?  rC  rc  rf  aroundround_rn  ro  rp  rr  rt  rw  ry  r{  r~  r  r  r  r  r  r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r5   r   r   <module>r     sD
   #    4 4  !    PU+:L '2 $			 $ 	

  NY$4J$ 
"!%&1	!	 
	 		
 $	 "&&1	!	! ! $	! 	 "&&1	!	! ! $	! "&&1	
!	
! 
! $	
!  "&&1	'	' ' $	'  
"+
 "&&1++ 
+
 + $+ 2E*6*"9FFCC* 	!%	
99
9 9( 	!%	


 . 		!%	
D D *.(,()!%	&  $&&&
%& && 	& &\ "& #	+
  $	+	+ 	+
 	+$ "& # %



 
 	
  "& #	6  $66 6 	6 6( "& # %
  	
 " "& #	*
  $	*	* 	*
 	* "& # %



 
 	
 "& #	+
  $	+	+ 	+
 	+ "& # %



 
 	
 6 "		 "& < "		$($( "& " " <.''1 &*%)" #,
#1
 # DI * #'ut 0 69 ...DD !%	*  $* 	* *"JK6% QU	J	J*	J$ 
"& 
	
 4  '	  	* #&	(( ( 
( 	(2 (-	 %)$ "&+6  $#"	$$	$ 
$ 
	$5!<3 

!%"		
 	 
	 !% #  $ 	
  $%QU % 
(D@,(.E)P d#vPU W z 5 LP>>>5H>2+6& 	#'"&GG !	G
  G@
 +/1 j` 
	
'10#@
=
J
A
A ]]EMM5==1	5??E,,-

 
MM1	MM1	MM1	OOQ	a(2 
#'))
)
 !)^ 
!%#' 	 !8 
!%#'4 4
 !4t"JIr   