
    sh`              
      h   S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	r	SSK
JrJr  \(       a  SSKJr  SSKJrJrJrJrJrJrJr   S     SS jjr  S       SS jjrSS jrSS jrSS jrS rSS jr S SS jjr    S       SS jjrSSS.     SS jjr \ r!SSS.     SS jjr"SSS.     SS jjr#SSS.     SS jjr$  SSSS.       SS jjjr%SSS jjr&SS jr'SS jr(S r)SSS jjr*SSS  jjr+SS! jr,SS" jr-SS# jr.SS$ jr/SSS% jjr0     S     SS' jjr1    S     SS( jjr2     S SS) jjr3    SSS*.         SS+ jjjr4  SSS*.     SS, jjjr5    S       SS- jjr6  SSS*.       SS. jjjr7    S       SS/ jjr8  SSS*.     SS0 jjjr9    S       SS1 jjr:  SSS*.     SS2 jjjr;    S       SS3 jjr<SS4 jr=    SSS5.     SS6 jjjr>      SSS5.         SS7 jjjr?S8 r@SSS9 jjrASSS: jjrBSSS; jjrC  S     SS< jjrDSS= jrESS> jrFSSS? jjrGSS@ jrHSSSA jjrISSB jrJSSC jrKSSSD jjrLSSSE jjrMSSFK	JNrN  S
SG.SSH jjrOS&S
SISJ.SSK jjrP\QS
4SSL jjrRSSSM jjrSSSSN jjrTSSO jrUSSP jrVSSSQ jjrWSSSR jjrX   SSS*.   SSS jjjrYSSST jjrZSSSU jjr[SSV jr\SSSW jjr]SSX jr^ S   SSY jjr_   S       SSZ jjr`SS[ jra S       SS\ jjrbSS] jrc  S       SS^ jjrd    SS&S_.     SS` jjjreSSa jrfSSb jrgSSc jrh   S       SSd jjriSSSe jjrjSSf jrkSSSg jjrlSSSh jjrm     S     SSi jjrn    SSS*.     SSj jjjroSSS*.SSk jjjrpSSSl jjrqSSSm jjrrSSo jrsSSp jrtSSSq jjruSSr jrvSSSs jjrwSSSt jjrxSSu jrySSSv jjrzSSSw jjr{SSS	SxS
Sy.Sz jr|S{ r}SSS| jjr~SSS} jjr S     SS~ jjrSS jrSS jrSSS jjrSSS jjrSSS jjrSSS jjrSSS jjrSSS jjr    S     SS jjrSSS jjrSS jrSSS.SS jjrSSS jjr\r\rSSS jjrSS jrSS jrSS jrSS jrSS jrSS jrSSS jjrSSS jjrSS jrS rS rS rS rS rS r\	GR@                  \	GRB                  \	GRD                  /S\	GRF                  \	GRH                  //r\	GR@                  S\	GRB                  S\	GRD                  Sn\	GRF                  S\	GRH                  Sn0rGS S jr     GS     GSS jjr     GS   GSS jjr     GS   GSS jjrSS jrGSGSS jjrg(  zA thin pytorch / numpy compat layer.

Things imported from here have numpy-compatible signatures but operate on
pytorch tensors.
    )annotationsN)OptionalTYPE_CHECKING   )_dtypes_impl_util)Sequence)	ArrayLikeArrayLikeOrScalarCastingModes	DTypeLikeNDArrayNotImplementedTypeOutArrayKFc                "    U R                  5       $ N)clone)aordersuboks      l/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_numpy/_funcs_impl.pycopyr   $   s     779    	same_kindc                l    [         R                  " U4U R                  US9u  nU R                  U5        g )Ncasting)r   typecast_tensorsdtypecopy_)dstsrcr   wheres       r   copytor%   *   s+     ##SFCIIwGFSIIcNr   c                 l    [         R                  " U 6 n[        U[        5      (       a  [	        U5      $ U$ r   )torch
atleast_1d
isinstancetuplelistarysress     r   r(   r(   4   .    


D
!C#uCy
r   c                 l    [         R                  " U 6 n[        U[        5      (       a  [	        U5      $ U$ r   )r'   
atleast_2dr)   r*   r+   r,   s     r   r1   r1   <   r/   r   c                 l    [         R                  " U 6 n[        U[        5      (       a  [	        U5      $ U$ r   )r'   
atleast_3dr)   r*   r+   r,   s     r   r3   r3   D   r/   r   c                L    U S:X  a  [        S5      e Ub  Ub  [        S5      eg g )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:   L   s;    
byABB,
5,0
 	
 -r   c                    Uc  Ub  Uc  UR                   R                  OUnO[        R                  " U 6 n[        R
                  " XU5      n U $ )z%Figure out dtypes, cast if necessary.)r    torch_dtyper   result_type_implr   r   )tensorsr9   r    r   	out_dtypes        r   _concat_cast_helperr@   Y   sL     %+-2]CII))	 117;	 $$WAGNr   c                v    [         R                  " U SU06u  p[        XX45      n [        R                  " X5      $ )Naxis)r   axis_none_flattenr@   r'   cat)r>   rB   r9   r    r   s        r   _concatenaterE   h   s6     ++W@4@MG!'?G99W##r   c                0    [        XUS9  [        XX#US9nU$ )Nr9   )rB   r9   r    r   )r:   rE   )ar_tuplerB   r9   r    r   results         r   concatenaterJ   q   s!     (s+(3WUFMr   r    r   c               V    [        XS S9  [        XUS9n[        R                  " U5      $ NrG   rK   )r:   r@   r'   vstackr8   r    r   r>   s       r   rN   rN   }   )     #$'!#GDG<<  r   c               V    [        XS S9  [        XUS9n[        R                  " U5      $ rM   )r:   r@   r'   hstackrO   s       r   rR   rR      rP   r   c               V    [        XS S9  [        XUS9n[        R                  " U5      $ rM   )r:   r@   r'   dstackrO   s       r   rT   rT      s)     #$'!#GDG<<  r   c               V    [        XS S9  [        XUS9n[        R                  " U5      $ rM   )r:   r@   r'   column_stackrO   s       r   rV   rV      s+     #$'!#GDGg&&r   c                   [        XUS9  [        XUS9nUS   R                  S-   n[        R                  " X5      n[
        R                  " XQS9$ )NrG   rK   r   r   rB   )r:   r@   ndimr   normalize_axis_indexr'   stack)arraysrB   r9   r    r   r>   result_ndims          r   r[   r[      sK     &S)!&wGG!*//A%K%%d8D;;w**r   c                    Uc?  U R                   S:w  a  U R                  5       n UR                  5       nU R                   S-
  n[        X4US9$ )Nr   rX   )rY   flattenrE   )arrvaluesrB   s      r   appendrb      sE    |88q=++-C!xx!|D11r   c                    [        U[        5      (       a  [        XX#5      $ [        U[        [        45      (       a  [        U [        U5      U5      $ [        S[        U5      5      e)Nzsplit_helper: )r)   int_split_helper_intr+   r*   _split_helper_listr7   type)tensorindices_or_sectionsrB   stricts       r   _split_helperrk      sX    %s++ dKK	'$	7	7!&$/B*CTJJ($/B*CDDr   c                n   [        U[        5      (       d  [        S5      e[        R                  " X R
                  5      nU R                  U   UpTUS::  a  [        eXE-  S:X  a  XTU-  pvU/U-  nO"U(       a  [        S5      eXE-  XE-  S-   pvU/U-  nXS-
  /XV-
  -  -  n[        R                  " XU5      $ )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//!">??%%dKK8D <<2qAvuz!VRdSjOPP%!RdSjF8qwC;;vD))r   c                   [        U[        5      (       d  [        S5      eU Vs/ s H  o3U R                  U   ::  d  M  UPM     nn[	        U5      [	        U5      -
  nUR                  U R                  U   5        US   /[        USS  US S 5       VVs/ s H	  u  pgXg-
  PM     snn-   nUS/U-  -  n[        R                  " XU5      $ s  snf s  snnf )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0!"DEE *
E)&,,t2D-D1)C
E'(3s83IJJv||D!"As12wCR12141123C A3?C;;vD)) F 	3s   CCCc                    [        XU5      $ r   rk   aryri   rB   s      r   array_splitr     s    488r   c                    [        XUSS9$ )NTrj   r}   r~   s      r   ro   ro     s    4EEr   c                v    U R                   S:X  a  [        S5      eU R                   S:  a  SOSn[        XUSS9$ )Nr   z3hsplit only works on arrays of 1 or more dimensionsr   Tr   rY   r6   rk   r~   s      r   hsplitr     s9    
xx1}NOO11!D4EEr   c                N    U R                   S:  a  [        S5      e[        XSSS9$ )N   z3vsplit only works on arrays of 2 or more dimensionsr   Tr   r   r   ri   s     r   vsplitr     (    
xx!|NOO1TBBr   c                N    U R                   S:  a  [        S5      e[        XSSS9$ )N   z3dsplit only works on arrays of 3 or more dimensionsr   Tr   r   r   s     r   dsplitr     r   r   c                .    [         R                  " X5      $ r   )r'   kron)r   r{   s     r   r   r         ::ar   c                0    [         R                  " XU5      $ r   )r'   vander)ry   N
increasings      r   r   r   "  s    <<j))r   Tc                    US:w  d  U(       d  U(       d  [         eUc  [        R                  " 5       R                  n[        R
                  " XX%S9$ Nr   r    )rm   r   default_dtypesfloat_dtyper'   linspace)startstoprr   endpointretstepr    rB   s          r   r   r   )  s?     qyG8!!}++-99>>%s88r   c                   US:w  d  U(       d  [         e[        R                  " X-  SUS-
  -  5      n[        R                  " U5      n[        R                  " [        R                  " U 5      U-  [        R                  " U5      U-  UUS9$ )Nr         ?r   )base)rm   r'   powloglogspace)r   r   rr   r   r    rB   r   logbases           r   	geomspacer   :  sr     qy!!99T\3#'?3DiioG>>		%7"		$'!	 r   c                T    US:w  d  U(       d  [         e[        R                  " XX$US9$ )Nr   )r   r    )rm   r'   r   )r   r   rr   r   r   r    rB   s          r   r   r   N  s&     qy!!>>%sUCCr   )likec               0   US:X  a  [         eUc	  U c  [        eUc  SU pU c  Sn UcW  [        S XU4 5       5      (       a  [        R                  " 5       R
                  O[        R                  " 5       R                  nUR                  (       a  [        R                  OUn[        S XU4 5       5      (       a  [        eUS:  a  X:  d  US:  a  X:  a  [        R                  " SUS9$ [        R                  " XX%S9n[        R                  " Xc5      nU$ )Nr   c              3  N   #    U  H  n[         R                  " U5      v   M     g 7fr   )r   is_float_or_fp_tensor.0ry   s     r   	<genexpr>arange.<locals>.<genexpr>s  s      VBUQ<55a88BU   #%c              3  N   #    U  H  n[         R                  " U5      v   M     g 7fr   )r   is_complex_or_complex_tensorr   s     r   r   r   y  s      
UATA<44Q77ATr   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   \  s     qy|| t} } V5PTBUVVV '')55,,.88 	
 #("2"2J 
U%tAT
UUU!!qU\taxEL{{1E**\\%t>F!!&0FMr   c               n    Uc  [         R                  " 5       R                  n[        R                  " XS9$ Nr   )r   r   r   r'   r   rn   r    r   r   s       r   r   r     ,     }++-99;;u**r   c                V    [         R                  " XS9nUb  UR                  U5      nU$ r   )r'   
empty_likereshape)	prototyper    r   r   rn   rI   s         r   r   r     s-     i5F&Mr   c                   [        U [        5      (       a  U 4n Uc  UR                  n[        U [        [        45      (       d  U 4n [
        R                  " XUS9$ r   )r)   rd   r    r*   r+   r'   full)rn   
fill_valuer    r   r   s        r   r   r     sQ     %}  eeT]++::eu55r   c                X    [         R                  " XUS9nUb  UR                  U5      nU$ r   )r'   	full_liker   )r   r   r    r   r   rn   rI   s          r   r   r     s-     __Q%8F&Mr   c               n    Uc  [         R                  " 5       R                  n[        R                  " XS9$ r   )r   r   r   r'   onesr   s       r   r   r     s,     }++-99::e))r   c                V    [         R                  " XS9nUb  UR                  U5      nU$ r   )r'   	ones_liker   r   r    r   r   rn   rI   s         r   r   r     s+     __Q,F&Mr   c               n    Uc  [         R                  " 5       R                  n[        R                  " XS9$ r   )r   r   r   r'   zerosr   s       r   r   r     r   r   c                V    [         R                  " XS9nUb  UR                  U5      nU$ r   )r'   
zeros_liker   r   s         r   r   r     s-     a-F&Mr   c                   Ub  SU R                   -
  nUS:  a!  U R                  SU-  U R                  -   5      n U(       d  U R                  S   S:w  a  U R                  n U R	                  5       n SUR                   -
  nUS:  a!  UR                  SU-  UR                  -   5      nU(       d  UR                  S   S:w  a  UR                  nUR	                  5       n[        X4SS9n U $ )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>># 41=Or   r   c               h   Uc  Ub  [         e[        XU5      nUR                  [        R                  :H  =(       a    UR
                  nU(       a  [        R                  n[        R                  " Xe5      n[        R                  " U5      nU(       a  UR                  [        R                  5      nU$ 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+!!#A&1I%--/EY5E5EG$$Y6I^^I&F5==)Mr   c               h   [        XU5      n Uc
  US:X  a  SOSnU R                  [        R                  :H  =(       a    U R                  nU(       a  [        R
                  n[        R                  " X5      n [        R                  " XXeS9n	U(       a  U	R                  [        R                  5      n	U	$ )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     	A&)A|AIq1ww%--'5QXXGQ&AYYqHPF5==)Mr   c                   [         R                  " X5      n[        R                  " X5      n [        R                  " X5      nUS:X  a  UR                  S   S-
  OUnUS:X  a!  UR                  S   S-  S:X  a  [        S5      eU S S S 24   nUS S S S 24   n[        R                  R                  R                  XVUS9nUSS S 24   $ )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   M  s    		&	&q	,BQ#AQ#A $aggaj1nDG&QWWQZ!^q0 ""GHH 
47B	
4q=	BXX  '''@F !Q$<r   c                    U R                   S   UR                   S   :  a  Xp[        R                  " US5      n[        XU5      $ )Nr   r   )rn   r'   flipr   r   r   r   s      r   convolver   d  s>    wwqzAGGAJ1 	

1dA1&&r   c                F    [         R                  " U5      n[        XU5      $ r   )r'   conj_physicalr   r   s      r   	correlater   o  s    AA1&&r   c                   U R                  5       S:X  a  U R                  S[        S9n [        R                  " 5       R
                  n[        R                  " U 4USS9u  n [        R                  " XU5      $ )Nr   r   safer   )
numel	new_emptyrd   r   r   r   r   r   r'   bincount)ry   weights	minlengthr   s       r   r  r  w  s^    wwyA~KKK%++-77I!!1$	6BDQ>>!i00r   c                  US L US L :w  a  [        S5      eU R                  [        R                  :w  a  U R	                  [        R                  5      n Uc  Uc  [        R
                  " U 5      nU$ [        R
                  " XU5      nU$ )Nz1either both or neither of x and y should be given)r6   r    r'   boolr   r$   )	conditionry   r   rI   s       r   r$   r$     sw     	
T	qDy!LMM%**$LL,	yQYY' M Y1-Mr   c                    U R                   $ r   )rY   r   s    r   rY   rY     s    66Mr   c                ,    [        U R                  5      $ r   )r*   rn   r  s    r   rn   rn     s    >r   c                F    Uc  U R                  5       $ U R                  U   $ r   )r  rn   )r   rB   s     r   sizer    s!    |wwywwt}r   c                f    [         R                  " U R                  U5      nU R                  U5      $ r   )r   expand_shapern   r   )r   rB   rn   s      r   expand_dimsr    s&    qww-E66%=r   c                    Uc  [        [        U R                  5      5      nO [        R                  " XR                  5      n[
        R                  " X5      $ r   )r*   rangerY   r   normalize_axis_tupler'   r   )r   rB   s     r   r   r     s<    |U166]#))$7::ar   c                .    [         R                  " U 5      $ r   )r'   flipudr   s    r   r  r        <<?r   c                .    [         R                  " U 5      $ r   )r'   fliplrr  s    r   r  r    r  r   c                p    [         R                  " X R                  5      n[        R                  " XU5      $ r   )r   r  rY   r'   rot90)r   kaxess      r   r  r    s'    %%dFF3D;;qT""r   c                *    [         R                  " XS9$ )N)r  )r'   broadcast_to)arrayrn   r   s      r   r!  r!    s    e00r   )broadcast_shapes)r   c                (    [         R                  " U6 $ r   )r'   broadcast_tensors)r   argss     r   broadcast_arraysr'    s    ""D))r   xy)r   sparseindexingc           
        [        U5      nUS;  a  [        S5      eSU-  n[        U5       VVs/ s H$  u  pgUR                  US U S-   XVS-   S  -   5      PM&     nnnUS:X  a@  US:  a:  US   R                  SUS	S  -   5      US'   US   R                  S
US	S  -   5      US'   U(       d  [        R
                  " U6 nU (       a  U Vs/ s H  owR                  5       PM     nn[        U5      $ s  snnf s  snf )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   meshgridr2    s    r7D|#IJJ	BBKB-P-$!aii2AEG45-FP4D1H1I%%g12&67q	1I%%g12&67q	((&1%+,V'')V,< Q -s   +C/	C5c                2   [        U 5      n [        U 5      nSU-  nU(       a  SnO[        R                  " U4U -   US9n[	        U 5       HI  u  pg[        R
                  " XqS9R                  US U U4-   XFS-   S  -   5      nU(       a  XX4-   nME  XU'   MK     U$ )Nr   r5   r   r   )r*   rw   r'   r   r-  r   r   )	
dimensionsr    r)  r   rn   r.   r0  dimidxs	            r   indicesr7    s    z"JJA1HEkk1$+59J'll3,44"1I1uw/
 ,CF ( Jr   c                .    [         R                  " X5      $ r   )r'   trilr   r  s     r   r9  r9    r   r   c                .    [         R                  " X5      $ r   )r'   triur:  s     r   r<  r<    r   r   c                6    Uc  U n[         R                  " XUS9$ Noffset)r'   tril_indicesrq   r  r   s      r   rA  rA        ya1--r   c                6    Uc  U n[         R                  " XUS9$ r>  )r'   triu_indicesrB  s      r   rE  rE    rC  r   c                    U R                   S:w  a  [        S5      e[        R                  " U R                  S   U R                  S   US9$ Nr   zinput array must be 2-dr   r   r?  )rY   r6   r'   rA  rn   r`   r  s     r   tril_indices_fromrI    >    
xx1}233ciilCIIaLCCr   c                    U R                   S:w  a  [        S5      e[        R                  " U R                  S   U R                  S   US9$ rG  )rY   r6   r'   rE  rn   rH  s     r   triu_indices_fromrL    rJ  r   c               `    Uc  U n[         R                  " X4US9n[         R                  " XRS9$ )Nr   )diagonal)r'   r   r9  )r   Mr  r    r   rh   s         r   trirP  %  s/     	yZZe,F::f))r   c                    [         R                  " X5      n[        R                  " X5      n [        R                  " X5      n[        R
                  " XX#US9$ N)rtolatol	equal_nan)r   r=   r   r   r'   iscloser   r{   rS  rT  rU  r    s         r   rV  rV  6  sE    ))!/EQ&AQ&A==DyIIr   c                    [         R                  " X5      n[        R                  " X5      n [        R                  " X5      n[        R
                  " XX#US9$ rR  )r   r=   r   r   r'   allcloserW  s         r   rY  rY  =  sE    ))!/EQ&AQ&A>>!T	JJr   c                    U R                   UR                   :w  a  gX:H  nU(       a0  U[        R                  " U 5      [        R                  " U5      -  -  nUR                  5       R	                  5       $ NF)rn   r'   isnanallitem)a1a2rU  conds       r   _tensor_equalrb  D  sQ    	xx2888Du{{2R8988:??r   c                    [        XUS9$ )NrU  )rb  )r_  r`  rU  s      r   array_equalre  N  s    955r   c                j     [         R                  " X5      u  p#[        X#5      $ ! [         a     gf = fr[  )r'   r%  RuntimeErrorrb  )r_  r`  a1_ta2_ts       r   array_equivrj  R  s:    ,,R4
 $$  s   % 
22c                    U R                  5       (       aH  [        R                  " U R                  X#US9n[        R                  " U R                  X#US9nUSU-  -   $ [        R                  " XX4S9$ )N)nanposinfneginfy              ?)r   r'   
nan_to_numrealimag)ry   r   rl  rm  rn  reims          r   ro  ro  \  s`     	||~~aff#VLaff#VLBG|6IIr   c                    [         R                  " XS9u  u  p[         R                  " X R                  5      n[	        S 5      4U-  US4-   nX   nU$ )NrX   .)r   rC   rZ   rY   slice)r   r7  rB   r9   r   r6  rI   s          r   takerv  k  sQ     ((6JDQ%%dFF3D;.4
7C.
0CVFMr   c                    [         R                  " XS9u  u  p[         R                  " X R                  5      n[        R
                  " XU5      $ NrX   )r   rC   rZ   rY   r'   take_along_dim)r`   r7  rB   s      r   take_along_axisrz  y  s=    **3:LFS%%dHH5Dd33r   c                   UR                  U R                  5      nUR                  5       UR                  5       :  ac  UR                  5       UR                  5       -   S-
  UR                  5       -  nUR                  S5      R	                  U4UR
                  -   5      nUR                  5       UR                  5       :  a#  UR                  5       nUS UR                  5        nU R                  X5        g Nr   r   )rg   r    r  	unsqueezeexpandrn   r_   put_)r   r7  ra   r   r   ratios         r   putr    s     	AGGA }}"1779,q0QWWY>KKN!!5(QWW"45 }}"IIK FF7r   c                f   [         R                  " XS9u  u  p[         R                  " X0R                  5      n[        R
                  " X5      u  p[         R                  " X R                  5      n[        R                  " XX5      nU R                  UR                  U R                  5      5        g rx  )r   rC   rZ   rY   r'   r%  r   r    scatterr!   r   rn   )r`   r7  ra   rB   rI   s        r   put_along_axisr    s|    **3:LFS%%dHH5D--g>OG!!&))4F]]3g6FIIfnnSYY'(r   c           
     \   [         R                  " [         R                  " U6 5      n[        UR                  5       VVs/ s HG  u  pE[         R
                  " U5      R                  SU-  U4-   SUR                  U-
  S-
  -  -   5      PMI     nnnXS'   X   R                  S5      $ s  snnf )Nr   r   r   )	r'   r[   r%  r-  rn   r   r   rY   squeeze)r   choicesr9   r   r0  r5  idx_lists          r   chooser    s     kk%117;<G  ..FA 	Stax3&047<<!;Ka;O3PPQ.  
 QK$$Q''s    AB(rd  c                   [         R                  " XS9u  u  p[         R                  " X@R                  5      n[        R
                  " XX4S9nU$ )NrX   )return_inversereturn_countsr5  )r   rC   rZ   rY   r'   unique)arreturn_indexr  r  rB   rU  rI   s          r   r  r    sF     ))"8KER%%dGG4D\\
F Mr   c                ,    [         R                  " U SS9$ )NTas_tuple)r'   nonzeror  s    r   r  r    s    ==T**r   c                .    [         R                  " U 5      $ r   )r'   argwherer  s    r   r  r        >>!r   c                N    [         R                  " U 5      R                  SS9S   $ )NTr  r   )r'   r_   r  r  s    r   flatnonzeror    s$    ==##T#2155r   c                0    [         R                  " XU5      $ r   )r'   clamp)r   minmaxr9   s       r   clipr    s     ;;qs##r   c                0    [         R                  " XU5      $ r   )r'   repeat_interleave)r   repeatsrB   s      r   repeatr    s    ""1t44r   c                ^    [        U[        5      (       a  U4n[        R                  " X5      $ r   )r)   rd   r'   tile)Arepss     r   r  r    s%    $w::ar   c                p   Uc  U $ [        U[        5      (       a  U4nU R                  5       n SnU H  nX#-  nUS:  d  M  [        S5      e   U R	                  5       S:X  d  US:X  a  [
        R                  " XR                  S9$ U* U R	                  5       -  * n[        U 4U-  5      S U n [        X5      $ )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
>OPP  
 	wwyA~Q{{9GG44	QWWY&'GQD7N#IX.A1  r   c                    [         R                  " X R                  5      n[         R                  " X0R                  5      n[        R                  " XX#5      $ r   )r   rZ   rY   r'   rN  )r   r@  axis1axis2s       r   rN  rN    s;    &&uff5E&&uff5E>>!U22r   c                L    [         R                  " XX#S9R                  SUS9nU$ )N)dim1dim2rv   r   )r'   rN  sum)r   r@  r  r  r    r9   rI   s          r   tracer    s)     ^^AE>BB2UBSFMr   c                   Uc  [         R                  " 5       R                  nUc  U n[        R                  " XUS9nUR                  U5      R                  S5        U$ )Nr   r   )r   r   r   r'   r   rN  fill_)r   rO  r  r    r   r   zs          r   eyer    sR     }++-99yA&AJJqMHr   c               *    [         R                  " XS9$ r   )r'   r  )rq   r    r   s      r   identityr  *  s    99Q$$r   c                .    [         R                  " X5      $ r   )r'   diagr   r  s     r   r  r  .  r   r   c                .    [         R                  " X5      $ r   )r'   diagflatr  s     r   r  r  2  s    >>!r   r   c                :    [         R                  " U 5      nU4U-  $ r   )r'   r   )rq   rY   r6  s      r   diag_indicesr  6  s    
,,q/C6D=r   c                    U R                   S:  d  [        S5      eU R                  nUSS  US S :w  a  [        S5      e[        US   U R                   5      $ )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  ;  sX    88q=;<< 			Au#2JKK!chh''r   c                   U R                   S:  a  [        S5      eUR                  5       S:X  a  U(       d  U R                  U5        U $ UR                   S:X  a  UR	                  S5      nU R                   S:X  a  U R
                  S   U R
                  S   :  nU(       a  U(       d4  U R                  5       nUR                  US UR                  5        5        U $ U R
                  u  pV[        R                  " XUUS-   -  -
  5      nXv-  nXv-  n	US UR                  5        X	US-   -  U-   U4'    U $ [        U 5      nUS U R
                  S    X'   U $ )Nr   zarray must be at least 2-dr   r   )rY   r6   r  fill_diagonal_r}  rn   rN  r!   r'   r   r  )
r   valwraptallr  max_min_r6  moddivs
             r   fill_diagonalr  F  s7   vvz566
yy{a	
xx1}mmA 	vv{wwqzAGGAJ&4::<DJJs>TZZ\*+ H JD,,ttax&889C*C+C/2=SYY[/AAdQh#%s+, H	  "\qwwqz"Hr   c                  [         R                  " X5      u  p#UR                  S:  a  UR                  5       nUR                  S:  a  UR                  5       n[        R
                  " X#5      nU[         R                  :H  =(       a    UR                  =(       d    UR                  nU[         R                  :H  nU(       a  [         R                  nOU(       a  [         R                  n[        R                  " X$5      n[        R                  " X45      n[         R                  " X#5      nU(       a!  UR                  [         R                  5      nU$ U(       a  UR                  [         R                  5      nU$ 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  h  s     %HC
xx!|kkm
xx!|kkm))#3Eu}}$C#***B

Guzz!G 	


s
*C


s
*CZZ!F5==) M 
5::&Mr   c                D   [        U[        [        45      (       a*  U Vs/ s H  n[        U[        5      (       a  U/OUPM     nn[        R
                  " X5      n[        R                  " X5      n [        R                  " X5      n[        R                  " XUS9$ s  snf )N)dims)
r)   r+   r*   rd   r   r=   r   r   r'   	tensordot)r   r{   r  axtarget_dtypes        r   r  r    s    $u&&>BCd
2s++3dC006LQ-AQ-A??1d++ Ds   $Bc                   [         R                  " X5      nU[        R                  :H  nU(       a  [        R                  n[
        R                  " X5      n [
        R                  " X5      nU R                  S:X  d  UR                  S:X  a  X-  nO[        R                  " X5      nU(       a  UR                  [        R                  5      nU$ Nr   )
r   r=   r'   r	  r  r   r   rY   matmulr   )r   r{   r9   r    r  rI   s         r   dotr    s    ))!/Euzz!GQ&AQ&Avv{affka#5::&Mr   c               H   [         R                  " X5      nU[        R                  :H  =(       a    U R                  =(       d    UR                  nU[        R
                  :H  nU(       a  [        R                  nOU(       a  [        R                  n[        R                  " X5      n [        R                  " X5      n[        R                  " X5      nU(       a!  UR                  [        R                  5      nU$ U(       a  UR                  [        R
                  5      nU$ r   )r   r=   r'   r   r   r	  r   r  r   r   innerr   )r   r{   r    r   r  rI   s         r   r  r    s    ))!/Eu}}$?!((*>ahhGuzz!G	Q&AQ&A[[F5==) M 
5::&Mr   c                .    [         R                  " X5      $ r   )r'   outer)r   r{   r9   s      r   r  r    s    ;;qr   c                   Ub	  U4S-  u  p#n[         R                  " X R                  5      n[         R                  " X1R                  5      n[        R                  " XS5      n [        R                  " XS5      nSnU R
                  S   S;  d  UR
                  S   S;  a  [        U5      e[        U S   R
                  US   R
                  5      nU R
                  S   S:X  d  UR
                  S   S:X  a%  US-  n[         R                  " U[        U5      5      n[        R                  " X5      n[        R                  " XxS9n	[         R                  " X5      n [         R                  " X5      nU S   n
U S   nU R
                  S   S:X  a  U S	   nUS   nUS   nUR
                  S   S:X  a  US	   nU	R                  S
:w  a"  U	R
                  S   S:X  a  U	S   nU	S   nU	S	   nU R
                  S   S:X  aT  UR
                  S   S:X  a  X-  X-  -
  U	S'   U	$ UR
                  S   S:X  d   eUW-  WS'   U
* U-  WS'   X-  X-  -
  WS'   OU R
                  S   S:X  d   eUR
                  S   S:X  a'  UW-  WU-  -
  WS'   X-  X-  -
  WS'   X-  X-  -
  WS'   O1UR
                  S   S:X  d   eW* U-  WS'   X-  WS'   X-  X-  -
  WS'   [        R                  " U	SU5      $ )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e &&uff5E&&uff5E 	q$Aq$A
QCwwr{& AGGBKv$=o QvY__aioo>Ewwr{a1772;!+**5#e*=))!/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;!g'BsGI772;!### BwCHsRxCHw(CHwwr{a772;!Bwb(CHw(CHw(CH772;!###sRxCHwCHw(CH>>"b%((r   r  )r9   r    r   r   optimizec                   SSK Jn  SSKJnJnJn	Jn
Jn  U
" U5      nU	" U5      nU b  [        X5      (       d  [        S5      eUS:w  a  [        S5      e[        US   [        5      (       + nU(       a  US S S S S	2   nO	US   USS  pU Vs/ s H
  o" U5      PM     nnUc  [        R                  " U6 OUnU[        R                  :H  =(       a    [!        S
 U 5       5      nU(       a  [        R"                  nU[        R$                  [        R&                  [        R(                  [        R*                  4;   nU(       a  [        R,                  n[.        R0                  " UUU5      nSSKJn   UR7                  5       (       a  [        R8                  R4                  R:                  n[        R8                  R4                  R<                  nUSL a  SnO$USL a  S[        R8                  R4                  l        U[        R8                  R4                  l        U(       a  USS S	2   n[?        U5      S	-  S:H  nU(       a  US   n[A        [B        RD                  RG                  [I        UU5      5      5      nU(       a  URK                  W5        [        RL                  " U6 nO[        RL                  " W/UQ76 nUR7                  5       (       a>  W[        R8                  R4                  l        W[        R8                  R4                  l        U" U U5      nU" U5      $ s  snf ! UR7                  5       (       a?  W[        R8                  R4                  l        W[        R8                  R4                  l        f f = f)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  8   #    U  H  oR                   v   M     g 7fr   )r   )r   ts     r   r   einsum.<locals>.<genexpr>1  s     3NgHHgs   )
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#77011|!"GHH $HQK55N "#2ss+ &.a[(12,N2@A.B#B'.G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   L1E	L# #AM9c                    U R                   R                  (       a  [        SU R                    S35      e[        R                  " XS9u  u  p[        R
                  " XR                  5      nUS:H  nXU4$ )Nzsorting z is not supportedrX   stable)r    r   rm   r   rC   rZ   rY   )rh   rB   kindr   r  s        r   _sort_helperr  g  se    ||!HV\\N:K"LMM--f@OIV%%dKK8DXFr   c                b    [        XX#5      u  pn[        R                  " XUS9nUR                  $ N)r5  r  )r  r'   sortra   )r   rB   r  r   r  rI   s         r   r  r  r  s,    "1D8OAVZZF3F==r   c                J    [        XX#5      u  pn[        R                  " XUS9$ r  )r  r'   argsort)r   rB   r  r   r  s        r   r   r   y  s#    "1D8OAV==V44r   c                    U R                   R                  (       a  [        SU R                    35      e[        R                  " XX#S9$ )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==r   c                    [         R                  " XR                  S5      n[         R                  " X R                  S5      n[        R                  " XU5      $ )Nsourcedestination)r   r  rY   r'   r  )r   r&  r'  s      r   r  r    s?    ''AF,,[&&-PK>>![11r   c                    [         R                  " XR                  5      n[         R                  " X R                  5      n[        R                  " XU5      $ r   )r   rZ   rY   r'   swapaxes)r   r  r  s      r   r)  r)    s;    &&uff5E&&uff5E>>!E**r   c                x   U R                   n[        R                  " X5      nUS:  a  X#-  nSnSUs=::  a	  US-   :  d$  O  [        R                  " USU* SUS-   U4-  5      eX:  a  US-  nX:X  a  U $ [	        [        SU5      5      nUR                  U5        UR                  X!5        U R                  U5      $ )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%%d.Dqy

ACQoocWqb'1q5%$HHII|
} aDKKKK66$<r   c                    UbC  [         R                  " X R                  SS9n[        U[        5      (       d  U4[        U5      -  n[        R                  " XU5      $ )NT)allow_duplicate)r   r  rY   r)   r*   rw   r'   roll)r   shiftrB   s      r   r1  r1    sL    ))$M%''Hs4y(E::a%%r   c                    US:X  a  U nU$ Uc  U R                  5       nU$ [        U[        5      (       a  U nU H  nU R                  U5      nM     U$ U R                  U5      nU$ )Nr5   )r  r)   r*   )r   rB   rI   r  s       r   r  r    st    rz M 
 M dE""F2  M YYt_FMr   c                P    [        U5      S:X  a  US   OUnU R                  U5      $ r|  )rw   r   )r   newshaper   s      r   r   r     s'    !(mq0x{hH99Xr   c                    US;   a(  [        [        [        U R                  5      5      5      nO[	        U5      S:X  a  US   nU R                  U5      $ )N)r5   Nr   r   r   )r*   reversedr  rY   rw   permute)r   r  s     r   	transposer9    sF     ""XeAFFm,-	TaAw99T?r   c                .    [         R                  " U 5      $ r   )r'   r_   )r   r   s     r   ravelr;    s    ==r   c                   [         R                  " X R                  5      nUS:  a  [        SU 35      eUS:X  a  U $ UbN  [	        U R
                  5      nUR                  S:  a  UR
                  U   OSXR'   [        R                  " X55      nUbN  [	        U R
                  5      nUR                  S:  a  UR
                  U   OSXR'   [        R                  " XE5      n[        R                  " XX#US9$ )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     %%dFF3D1u>qcBCCAvQWW-4\\A-=gmmD)1$$W4QWW,2KK!Ofll4(##F2::avFFr   c                l    [         R                  " U 5      nU(       a  US[         R                  -  -  nU$ )N   )r'   anglepi)r  degrI   s      r   rA  rA    s)    [[^F
3>*Mr   c                .    [         R                  " U 5      $ r   )r'   sincry   s    r   rE  rE        ::a=r   )rB   
edge_orderc               >   U R                   n[        R                  " U5      nUc  [        [	        U5      5      nO[        R
                  " X5      n[        U5      n[        U5      nUS:X  a  S/U-  nGOYUS:X  a7  [        R                  " US   5      (       d  US   R                   S:X  a  X6-  nGOXv:X  Ga  [        U5      n[        U5       H  u  p[        R                  " U
5      n
U
R                   S:X  a  M-  U
R                   S:w  a  [        S5      e[        U
5      U R                  XY      :w  a  [        S5      eU
R                  R                   (       d+  U
R                  R"                  (       d  U
R%                  5       n
[        R&                  " U
5      nXS   :H  R)                  5       (       a  US   nXU	'   M     O[+        S5      eUS:  a  [        S5      e/ n[-        S 5      /U-  n[-        S 5      /U-  n[-        S 5      /U-  n[-        S 5      /U-  nU R                  n[        R.                  " U5      [0        [2        4;   a   U R%                  5       n [        R4                  n[7        XX5       GH  u  nnU R                  U   US-   :  a  [        S	5      e[        R8                  " U US
9n[        R                  " U5      =(       d    UR                   S:H  n[-        SS5      X'   [-        S S5      X'   [-        SS5      X'   [-        SS 5      UU'   U(       a0  U [        U5         U [        U5         -
  SU-  -  U[        U5      '   OUSS nUSS  nU* UUU-   -  -  nUU-
  UU-  -  nUUUU-   -  -  nS/U-  nSUU'   UR;                  U5      nUR;                  U5      nUR;                  U5      nUU [        U5         -  UU [        U5         -  -   UU [        U5         -  -   U[        U5      '   US:X  a  SX'   SX'   SX'   U(       a  UOUS   nU [        U5         U [        U5         -
  U-  U[        U5      '   SX'   SX'   SX'   U(       a  UOUS   nU [        U5         U [        U5         -
  U-  U[        U5      '   GO7SX'   SX'   SX'   SUU'   U(       a  SU-  nSU-  nSU-  nO3US   nUS   nSU-  U-   * UUU-   -  -  nUU-   UU-  -  nU* UUU-   -  -  nUU [        U5         -  UU [        U5         -  -   UU [        U5         -  -   U[        U5      '   SX'   SX'   SX'   SUU'   U(       a  SU-  nSU-  nSU-  nO2US   nUS   nUUUU-   -  -  nUU-   * UU-  -  nSU-  U-   UUU-   -  -  nUU [        U5         -  UU [        U5         -  -   UU [        U5         -  -   U[        U5      '   UR=                  U5        [-        S 5      X'   [-        S 5      X'   [-        S 5      X'   [-        S 5      UU'   GM     US:X  a  US   $ U$ )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   ru  python_type_for_torchrd   r	  r   rx   r   r   rb   )frB   rH  varargsr   r  len_axesrq   dxr0  	distancesdiffxoutvalsslice1slice2slice3slice4otypeax_dxr9   uniform_spacingdx1dx2r   r{   crn   dx_0dx_ns                                r   gradientre    si   	A''0G|U1X))$24yHGAAvUX	
a\++GAJ7771:??a;O	
']%bMLA	2I~~"1$ !IJJ9~!11 @  OO559S9S%,,.	JJy)E q!&&((aqE' ** 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}e774=:>)C 
 q. '007J5::? Q|T2Q|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
 ?FLFLFL+5qD"#E&M"2QuV}5E"E!MCfFLFLFL+5rD"#E&M"2QuV}5E"E!MCf FLFLFLF4L5L%K5LAhAhCi#o&#s*;<3Y39-DC39-. AeFm$$q1U6]+;';;a!E&MBR>RR f FLFLFL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G %J 1}qzr   c                0   U R                  5       (       a  [        R                  " XS9nU$ U R                  5       (       aS  [        R                  " [        R                  " U R
                  US9[        R                  " U R                  US95      nU$ U nU$ )N)decimals)rO  r'   roundr   complexrp  rq  )r   rg  r9   rI   s       r   rh  rh    sx    Q2 M 
KK2KK2
 M Mr   c                .   [         R                  " U 5      (       d  U $ US:  a-  U[         R                  " U R                  5      R                  -  n[         R
                  " U R                  5      U:  nUR                  5       (       a  U R                  $ U $ r  )	r'   r   finfor    epsabsrq  r]  rp  )r   tolmasks      r   real_if_closerp    sn    A
Qw EKK(,,,99QVVs"DXXZZ166&Q&r   c                .    [         R                  " U 5      $ r   )r'   rp  r  s    r   rp  rp    rG  r   c                p    U R                  5       (       a  U R                  $ [        R                  " U 5      $ r   )r   rq  r'   r   r  s    r   rq  rq    s'    ||~~vvAr   c                    [         R                  " U 5      (       a  U R                  S:g  $ [         R                  " U [         R                  S9$ r   )r'   r   rq  r   r	  rF  s    r   	iscomplexrt    s8    vv{AUZZ00r   c                    [         R                  " U 5      (       a  U R                  S:H  $ [         R                  " U [         R                  S9$ r   )r'   r   rq  r   r	  rF  s    r   isrealrv    s6    vv{??1EJJ//r   c                .    [         R                  " U 5      $ r   r'   r   rF  s    r   iscomplexobjry    s    Ar   c                8    [         R                  " U 5      (       + $ r   rx  rF  s    r   	isrealobjr{    s    """r   c                .    [         R                  " U 5      $ r   )r'   isneginfry   r9   s     r   r}  r}    r  r   c                .    [         R                  " U 5      $ r   )r'   isposinfr~  s     r   r  r    r  r   c                @    [         R                  R                  U 5      $ r   )r'   speciali0rF  s    r   r  r    s    ==Ar   c                f    SSK Jn   U" U 5      nUR                  5       S:H  $ ! [         a     gf = f)Nr   )r  F)r  r  r  	Exception)r   r  r  s      r   isscalarr  
  s6    5 #wwyA~ s   # 
00c                l    [         R                  " 5       R                  n[        R                  " U SUS9$ NF)periodicr    )r   r   r   r'   hamming_windowrO  r    s     r   hammingr    s+    '')55EE??r   c                l    [         R                  " 5       R                  n[        R                  " U SUS9$ r  )r   r   r   r'   hann_windowr  s     r   hanningr    s+    '')55EQe<<r   c                l    [         R                  " 5       R                  n[        R                  " XSUS9$ )NF)betar  r    )r   r   r   r'   kaiser_window)rO  r  r    s      r   kaiserr  "  s+    '')55Eqe5IIr   c                l    [         R                  " 5       R                  n[        R                  " U SUS9$ r  )r   r   r   r'   blackman_windowr  s     r   blackmanr  '  +    '')55E  U%@@r   c                l    [         R                  " 5       R                  n[        R                  " U SUS9$ r  )r   r   r   r'   bartlett_windowr  s     r   bartlettr  ,  r  r   c                 T   SnSnU  H  nUR                   n[        U5      (       a  SnUR                  (       d  UR                  (       d  SnO$[        R                  US 5      nUc  [        S5      e[        R                  " X%5      nM     U(       a  [        S   U   $ [        S   U   $ )NFr   Tr   z+can't get common type for non-numeric arrayr   )
r    ry  rO  r   array_precisiongetr7   builtinsr  
array_type)r>   r   	precisionr   r  ps         r   common_typer  C  s    JIGG??J##q||A##At,Ay MNNLL.	  !}Y''!}Y''r   c           	     h   Ub  [        S5      eUb&  UR                  R                  (       a  [        S5      eU R                  R                  =(       d    U R                  R                  (       + nUS L =(       d    UR                  R                  (       + nU(       a  U R                  5       n Ub   [        R                  " X@R                  5      n[        U[        R                  5      (       aG  UR                  S:X  a  [        R                  " U5      nO [        R                  " XR                  5      nUc"  [        R                  " XU[        U5      S9u  pO![        R                  " XX$[        U5      S9u  pU(       d  U(       a  UR!                  5       nU(       a  U	R!                  5       n	X4$ )N3normed argument is deprecated, use density= insteadzcomplex weights histogram.r   )weightdensity)r  r  r  )r6   r    r   rm   rO  rP  r   r   r)   r'   TensorrY   operatorindex	histogramr	  long)
r   binsr  normedr  r  is_a_intis_w_inthr{   s
             r   r  r  Z  s7    NOOw}}77!">??GG--C1C1CDH$Egmm&E&E"EHHHJ&&w8$%%99>>>$'D''gg6D}qwWN15$w-
 xFFHFFH4Kr   c                    [        U 5      [        U5      :w  a  [        S5      e [        U5      nUS:w  a	  US:w  a  X"/n[        X4X#XEU5      u  pXS   U	S   4$ ! [         a    Sn N8f = f)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&|vtFWEDAdAaD=  s   A A)(A)c                   Ub  [        S5      eSSKJnJn  [	        U [
        [        45      (       a  U" U 5      R                  n OU" U 5      n [        R                  " U 5      n U R                  R                  (       d+  U R                  R                  (       d  U R                  5       n [	        U[        5      =(       d    [        R                   " S U 5       5      (       + nU(       aS  U" U5      nU V	s/ s H  oR                  PM     n
n	U V	s/ s H#  n	["        R$                  " XR                  5      PM%     nn	Ub  UR'                  5       R)                  5       nUb  U R+                  SS9n[        R,                  " U5      R/                  SS5      R                  R'                  5       n[        UR)                  5       5      n["        R$                  " X@R                  5      nS	U0nO0 n[        R0                  " XU4S
[3        U5      0UD6u  pU(       a4  [5        U	W
5       VVs/ s H  u  p["        R$                  " X5      PM     n	nnX4$ s  sn	f s  sn	f s  snnf )Nr  r   )r  normalize_seq_array_likec              3  B   #    U  H  n[        U[        5      v   M     g 7fr   )r)   rd   )r   r{   s     r   r   histogramdd.<locals>.<genexpr>  s     -O$QjC.@.@$s   r   )r5  r   rv   r  r  )r6   r  r  r  r)   r+   r*   Tr'   r1   r    rO  r   rP  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 '-(,-1ww-?CDt!$$Q5tD&&(^^^"		"%%a,..668elln%&&w=7#V5Q$w-Q5QDA<?;<OP<OU!!"+<OP4K+ .D$ Qs   5I*I("Ic                  SSK Jn  U R                  5       S:  a  U" U R                  5      $ U R                  [        R
                  :X  a  [        R
                  nGOU R                  R                  (       a  [        R                  " [        R                  5      nU R                  [        R                  :H  =(       dm    UR                  U R                  s=:*  =(       a    UR                  :*  Os  =(       a3    UR                  U R                  s=:*  =(       a    UR                  :*  Os  nU(       a  [        R                  O[        R                  nGO$U R                  R                  (       av  [        R                   [        R                  [        R"                  4 HB  n[        R                  " U5      nUR                  U s=::  a  UR                  ::  d  M<  O  M@  Un  O   O[        R$                  [        R&                  [        R(                  [        R*                  [        R,                  4 HB  n[        R.                  " U5      nUR                  U s=::  a  UR                  ::  d  M<  O  M@  Un  O   U" W5      $ )Nr   )DType)_dtypesr  r  r    r'   r	  r   rk  r   	complex64r  rp  r  rq  
complex128rO  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+E+Ervv+E 	 $2u7G7G	
	"	"==%--?BRBvv$bff$$	 @ ;;

EKKekkRBRBvv$bff$$ S <r   c                   US:w  a  [         eUR                  SS5      n[        R                  " U R                  5      nU" U5      n[
        R                  " XR                  S45      n[
        R                  " US5      R                  5       n[
        R                  R                  R                  U [        U5      US9$ )Nconstantconstant_valuesr   r   r   )value)rm   r  r   rQ  r    r'   r!  rY   r   r_   r   r   padr*   )r"  	pad_widthr   kwargsr  typs         r   r  r    s    z!!JJ(!,E

,
,U[[
9CJE""9zz1o>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
   r[  )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
   r7  r
   r9   r  r   r   )r`   r
   r7  r
   )r  )r   r   r7  r
   ra   r
   r   r   )r`   r
   r7  r
   ra   r
   )Nr  )r   r
   r  r  r9   r  r   r   )FFFN)r  r
   r  r   rU  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
   )rR  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   collections.abcr	   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'  r2  rd   r7  r9  r<  rA  rE  rI  rL  rP  rV  rY  rb  re  rj  ro  rv  rz  r  r  r  r  r  r  r  r  r  r  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r  r)  r.  r1  r  r   r9  r;  r>  rA  rE  re  rh  aroundround_rp  rp  rq  rt  rv  ry  r{  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     sO
   #    *  ! (   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 Ir   