
    9j              
      	   d Z ddlmZ ddlZddlZddlZddlmZ ddlZddl	m
Z
mZ erddlmZ 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*	 	 	 	 	 dd0Z8	 	 	 	 d	 	 	 	 	 	 	 dd1Z9	 	 ddd*	 	 	 	 	 dd2Z:	 	 	 	 d	 	 	 	 	 	 	 dd3Z;dd4Z<	 	 	 	 ddd5	 	 	 	 	 dd6Z=	 	 	 	 	 	 ddd5	 	 	 	 	 	 	 	 	 dd7Z>d8 Z?ddd9Z@ddd:ZAddd;ZB	 	 d	 	 	 	 	 dd<ZCdd=ZDdd>ZEddd?ZFdd@ZGdddAZHddBZIddCZJdddDZKdddEZLdF ZMd
dGddHZNd&d
dIdJddKZOePd
fddLZQdddMZRdddNZSddOZTddPZUdddQZVdddRZW	 	 	 ddd*	 	 	 ddSZXdddTZYdddUZZddVZ[dddWZ\ddXZ]	 d	 	 	 ddYZ^	 	 	 d	 	 	 	 	 	 	 ddZZ_dd[Z`	 d	 	 	 	 	 	 	 dd\Zadd]Zb	 	 d	 	 	 	 	 	 	 dd^Zc	 	 	 	 dd&d_	 	 	 	 	 dd`ZdddaZeddbZfddcZg	 	 	 d	 	 	 	 	 	 	 dddZhdddeZiddfZjdddgZkdddhZl	 	 	 	 	 d	 	 	 	 	 ddiZm	 	 	 	 ddd*	 	 	 	 	 ddjZnddd*ddkZodddlZpdddmZqddoZrddpZsdddqZtddrZudddsZvdddtZwdduZxdddvZydddwZzddd	dxd
dydzZ{d{ 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                  dnejD                  dejF                  dniZd d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)TYPE_CHECKING   )_dtypes_impl_util)Sequence)	ArrayLikeArrayLikeOrScalarCastingModes	DTypeLikeNDArrayNotImplementedTypeOutArrayKFc                "    | j                         S N)clone)aordersuboks      X/media/conek/DATA/Code/OCR/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'   5   +    


D
!C#uCy
r   c                 `    t        j                  |  }t        |t              rt	        |      S |S r   )r&   
atleast_2dr(   r)   r*   r+   s     r   r0   r0   =   r.   r   c                 `    t        j                  |  }t        |t              rt	        |      S |S r   )r&   
atleast_3dr(   r)   r*   r+   s     r   r2   r2   E   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_checkr9   M   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   )tensorsr8   r   r   	out_dtypes        r   _concat_cast_helperr?   Z   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=   rA   r8   r   r   s        r   _concatenaterD   i   s>     ++W@4@MGT!'3w?G99Wd##r   c                B    t        | ||       t        | ||||      }|S )Nr8   )rA   r8   r   r   )r9   rD   )ar_tuplerA   r8   r   r   results         r   concatenaterI   r   s'     (Es+(3eWUFMr   r   r   c               d    t        | |d        t        | ||      }t        j                  |      S NrF   rJ   )r9   r?   r&   vstackr7   r   r   r=   s       r   rM   rM   ~   -     #u$'!#UGDG<<  r   c               d    t        | |d        t        | ||      }t        j                  |      S rL   )r9   r?   r&   hstackrN   s       r   rQ   rQ      rO   r   c               d    t        | |d        t        | ||      }t        j                  |      S rL   )r9   r?   r&   dstackrN   s       r   rS   rS      s-     #u$'!#UGDG<<  r   c               d    t        | |d        t        | ||      }t        j                  |      S rL   )r9   r?   r&   column_stackrN   s       r   rU   rU      s/     #u$'!#UGDGg&&r   c                   t        | ||       t        | ||      }|d   j                  dz   }t        j                  ||      }t        j                  ||      S )NrF   rJ   r   r   rA   )r9   r?   ndimr   normalize_axis_indexr&   stack)arraysrA   r8   r   r   r=   result_ndims          r   rZ   rZ      sS     &%S)!&wGG!*//A%K%%dK8D;;wT**r   c                    |>| j                   dk7  r| j                         } |j                         }| j                   dz
  }t        | |f|      S )Nr   rW   )rX   flattenrD   )arrvaluesrA   s      r   appendra      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_listr6   type)tensorindices_or_sectionsrA   stricts       r   _split_helperrj      s\    %s+ )<dFKK	'$	7!&$/B*CTJJ..A)B(CDEEr   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(   rc   NotImplementedErrorr   rY   rX   shaper5   r&   split)	rg   rh   rA   ri   lnnumszlsts	            r   rd   rd      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*   rl   rm   lenra   zipr&   rn   )rg   rh   rA   xrs   	num_extrar   bs           r   re   re      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   rj   aryrh   rA   s      r   array_splitr     s    1488r   c                     t        | ||d      S )NTri   r|   r}   s      r   rn   rn     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   rX   r5   rj   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~   rh   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   rz   s     r   r   r         ::ar   c                0    t        j                  | ||      S r   )r&   vander)rx   N
increasings      r   r   r   #  s    <<1j))r   Tc                    |dk7  s|s|st         |t        j                         j                  }t	        j
                  | |||      S Nr   r   )rl   r   default_dtypesfloat_dtyper&   linspace)startstoprq   endpointretstepr   rA   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)rl   r&   powloglogspace)r   r   rq   r   r   rA   r   logbases           r   	geomspacer   ;  st     qy!!99TE\3#'?3DiioG>>		%7"		$'!	 r   c                P    |dk7  s|st         t        j                  | ||||      S )Nr   )r   r   )rl   r&   r   )r   r   rq   r   r   r   rA   s          r   r   r   O  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.0rx   s     r   	<genexpr>zarange.<locals>.<genexpr>t  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>z  s     
UA<44Q7
Ur   r   )ZeroDivisionErrorr6   anyr   r   r   	int_dtype
is_complexr&   float64rl   emptyaranger   cast_if_needed)r   r   stepr   r   
work_dtyperH   s          r   r   r   ]  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   rm   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   rm   rH   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(   rc   r   r)   r*   r&   full)rm   
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   rm   rH   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   rm   rH   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   rW   )rX   viewrm   mTr   rD   )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   )rl   r   r   r&   float16is_cpufloat32r   r   corrcoefto)	rx   yr   biasddofr   	xy_tensoris_halfrH   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   rH   s
             r   r   r   0  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   rm   rl   r&   nn
functionalconv1d)r   vmodedtr   aavvrH   s           r   _conv_corr_implr   N  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   )rm   r&   flipr   r   r   r   s      r   convolver   e  sD    wwqzAGGAJ!1 	

1dA1a&&r   c                F    t        j                  |      }t        | ||      S r   )r&   conj_physicalr   r   s      r   	correlater   p  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_emptyrc   r   r   r   r   r   r&   bincount)rx   weights	minlengthr   s       r   r  r  x  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)r5   r   r&   boolr   r#   )	conditionrx   r   rH   s       r   r#   r#     sy     	
T	qDy!LMM%**$LL,	yQYY' M Y1-Mr   c                    | j                   S r   )rX   r   s    r   rX   rX     s    66Mr   c                ,    t        | j                        S r   )r)   rm   r
  s    r   rm   rm     s    >r   c                D    || j                         S | j                  |   S r   )r  rm   )r   rA   s     r   sizer    s!    |wwywwt}r   c                d    t        j                  | j                  |      }| j                  |      S r   )r   expand_shaperm   r   )r   rA   rm   s      r   expand_dimsr    s&    qww-E66%=r   c                    |t        t        | j                              }n t        j                  || j                        }t        j                  | |      S r   )r)   rangerX   r   normalize_axis_tupler&   r   )r   rA   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  rX   r&   rot90)r   kaxess      r   r  r    s+    %%dAFF3D;;q!T""r   c                0    t        j                  | |      S )N)r  )r&   broadcast_to)arrayrm   r   s      r   r  r    s    e%00r   c                 &    t        j                  |  S r   )r&   broadcast_shapes)argss    r   r"  r"    s    !!4((r   )r   c                &    t        j                  | S r   )r&   broadcast_tensors)r   r#  s     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   )ru   r   r'  r   )r   ru   r   )ru   r   )rv   r5   	enumerater   r&   r%  r   r*   )	r   r(  r)  xirX   s0irx   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   r4   r   r   )r)   rv   r&   r   r,  r   r   )	
dimensionsr   r(  r   rm   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rp   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>  )rX   r5   r&   r@  rm   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  )rX   r5   r&   rD  rm   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   rg   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   rz   rR  rS  rT  r   s         r   rU  rU  9  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)rm   r&   isnanallitem)a1a2rT  conds       r   _tensor_equalra  G  sS    	xx2888Du{{2R8988:??r   c                    t        | ||      S )NrT  )ra  )r^  r_  rT  s      r   array_equalrd  Q  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  U  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)rx   r   rk  rl  rm  reims          r   rn  rn  _  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 )NrW   .)r   rB   rY   rX   slice)r   r6  rA   r8   r   r5  rH   s          r   takeru  n  sY     ((6JDQ$%%dAFF3D;.4
7C.
0CsVFMr   c                    t        j                  | |      \  \  } }t        j                  || j                        }t	        j
                  | ||      S NrW   )r   rB   rY   rX   r&   take_along_dim)r_   r6  rA   s      r   take_along_axisry  |  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   )rf   r   r  	unsqueezeexpandrm   r^   put_)r   r6  r`   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   rB   rY   rX   r&   r%  r   r   scatterr    r   rm   )r_   r6  r`   rA   rH   s        r   put_along_axisr    s    **3T:LFSD%%dCHH5D--gv>OGV!!&#))4F]]3gv6FIIfnnSYY'(r   c           
     h   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<   |t        |         j                  d      S c c}}w )Nr   r   r   )
r&   rZ   r%  r,  rm   r   r   rX   r)   squeeze)r   choicesr8   r   r/  r4  idx_lists          r   chooser    s     kk%117;<G  .As 	Stax3&047<<!;Ka;O3PPQH 
 HQK5?#++A..s   AB.rc  c                   t        j                  | |      \  \  } }t        j                  || j                        }t	        j
                  | |||      }|S )NrW   )return_inversereturn_countsr4  )r   rB   rY   rX   r&   unique)arreturn_indexr  r  rA   rT  rH   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maxr8   s       r   clipr    s     ;;q#s##r   c                0    t        j                  | ||      S r   )r&   repeat_interleave)r   repeatsrA   s      r   repeatr    s    ""1gt44r   c                T    t        |t              r|f}t        j                  | |      S r   )r(   rc   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(   rc   r^   r5   r  r&   r   r   rI   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   rY   rX   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dim2ru   r   )r&   rM  sum)r   r?  r  r  r   r8   rH   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  )rp   r   r   s      r   identityr  -  s    99Qe$$r   c                .    t        j                  | |      S r   )r&   diagr   r  s     r   r  r  1  r   r   c                .    t        j                  | |      S r   )r&   diagflatr  s     r   r  r  5  s    >>!Qr   r   c                8    t        j                  |       }|f|z  S r   )r&   r   )rp   rX   r5  s      r   diag_indicesr  9  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   ru   z/All dimensions of input must be of equal lengthr   )rX   r5   rm   r  )r_   ss     r   diag_indices_fromr  >  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   )rX   r5   r  fill_diagonal_r|  rm   rM  r    r&   r   r  )
r   valwraptallr  max_min_r5  moddivs
             r   fill_diagonalr  I  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'   rX   r^   r   r<   r   r   r  r   uint8r   r   vdotr   )r   rz   t_at_br   r   is_boolrH   s           r   r  r  k  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)   rc   r   r<   r   r   r&   	tensordot)r   rz   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   rX   matmulr   )r   rz   r8   r   r  rH   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   rz   r   r   r  rH   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   rz   r8   s      r   r  r    s    ;;q!r   c                b   |
|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(  ro|j
                  d   dk(  r|
|z  ||z  z
  |	d<   |	S |j
                  d   dk7  rt        d|j
                  d          |z  d<   |
 |z  d<   |
|z  ||z  z
  d<   n| j
                  d   dk7  rt        d| j
                  d          |j
                  d   dk(  r+|z  |z  z
  d<   ||z  |
|z  z
  d<   |
|z  ||z  z
  d<   nL|j
                  d   dk7  rt        d|j
                  d           |z  d<   ||z  d<   |
|z  ||z  z
  d<   t        j                  |	d|      S )Nr   ru   zDincompatible dimensions for cross product
(dimension must be 2 or 3))r   r   ).r   )r   r   ).r   ).r   r   r   .zb.shape[-1] must be 3, got za.shape[-1] must be 3, got zb.shape[-1] must be 2, got )r   rY   rX   r&   moveaxisrm   r5   r"  rv   r   r<   r   r   AssertionError)r   rz   axisaaxisbaxiscrA   msgrm   r   cpa0r^  r_  b0b1b2cp0cp1cp2s                      r   crossr    sV    #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wwr{a$'B1772;-%PQQ BwCHsRxCHBwb(CH772;! #>qwwr{m!LMM772;!Bwb(CHBwb(CHBwb(CHwwr{a$'B1772;-%PQQsRxCHBwCHBwb(CH>>"b%((r   r   )r8   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   ru   r   c              3  4   K   | ]  }|j                     y wr   )r   )r   ts     r   r   zeinsum.<locals>.<genexpr>7  s     3NAHH3Ns   )
opt_einsumTautoF)'_ndarrayr  _normalizationsr  r  r  r  r  r(   r6   rl   strr   r<   r&   r   r\  r   r  int8int16int32int64r   r   torch.backendsr  is_availablebackendsstrategyenabledrv   r*   	itertoolschainfrom_iterablerw   ra   einsum)r8   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
sublistoutrH   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 supportedrW   stable)r   r   rl   r   rB   rY   rX   )rg   rA   kindr   r  s        r   _sort_helperr  m  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&   sortr`   )r   rA   r  r   r  rH   s         r   r  r  x  s4    "1dD%8OAtVZZtF3F==r   c                V    t        | |||      \  } }}t        j                  | ||      S r  )r  r&   argsort)r   rA   r  r   r  s        r   r  r    s+    "1dD%8OAtV==V44r   c                    | j                   j                  rt        d| j                          t        j                  | |||      S )Nzsearchsorted with dtype=)sidesorter)r   r   rl   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  rX   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   rY   rX   r&   swapaxes)r   r  r  s      r   r(  r(    sA    &&uaff5E&&uaff5E>>!UE**r   c                r   | 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        |            }|j                  |       |j                  ||       | j                  |      S )Nr   z5'%s' arg requires %d <= %s < %d, but %d was passed inr   r   )	rX   r   rY   	AxisErrorr*   r  removeinsertr   )r   rA   r   rp   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  rX   r(   r)   rv   r&   roll)r   shiftrA   s      r   r0  r0    sM    ))$M%'Hs4y(E::a%%r   c                    |dk(  r| }|S || j                         }|S t        |t              r| }|D ]  }| j                  |      } |S | j                  |      }|S )Nr4   )r  r(   r)   )r   rA   rH   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{  )rv   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)r4   Nr   r   r   )r)   reversedr  rX   rv   permute)r   r  s     r   	transposer8    sF     ""XeAFFm,-	TaAw99T?r   c                ,    t        j                  |       S r   )r&   r^   )r   r   s     r   ravelr:    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   )rA   prependra   )	r   rY   rX   r5   r*   rm   r&   r  diff)r   rp   rA   r<  ra   rm   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  degrH   s      r   r@  r@  
  s)    [[^F
3>*Mr   c                ,    t        j                  |       S r   )r&   sincrx   s    r   rD  rD        ::a=r   )rA   
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   ru   g       @g      g      g      ?g       g      ?)rX   r   ndarrays_to_tensorsr)   r  r  rv   r   	is_scalarr*   r,  r&   	as_tensorr5   rm   r   is_floating_pointr   doubler=  r\  r6   rt  python_type_for_torchrc   r  r   rw   r   r   ra   )frA   rG  varargsr   r  len_axesrp   dxr/  	distancesdiffxoutvalsslice1slice2slice3slice4otypeax_dxr8   uniform_spacingdx1dx2r   rz   crm   dx_0dx_ns                                r   gradientrd    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)rN  r&   roundr   complexro  rp  )r   rf  r8   rH   s       r   rg  rg    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_closero    si    A
Qw EKK(,,,99QVVs"DXXZ166&Q&r   c                ,    t        j                  |       S r   )r&   ro  r
  s    r   ro  ro    rF  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  rE  s    r   	iscomplexrs    s5    vv{AUZZ00r   c                    t        j                  |       r| j                  dk(  S t        j                  | t         j                        S r   )r&   r   rp  r   r  rE  s    r   isrealru    s3    vv{??1EJJ//r   c                ,    t        j                  |       S r   r&   r   rE  s    r   iscomplexobjrx    s    Ar   c                .    t        j                  |        S r   rw  rE  s    r   	isrealobjrz     s    """r   c                ,    t        j                  |       S r   )r&   isneginfrx   r8   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i0rE  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  2  r  r   c                 $   d}d}| D ]n  }|j                   }t        |      rd}|j                  s|j                  sd}n"t        j                  |      }|t        d      t        j                  ||      }p |rt        d   |   S t        d   |   S )NFr   Tr   z+can't get common type for non-numeric arrayr   )
r   rx  rN  r   array_precisiongetr6   builtinsr  
array_type)r=   r   	precisionr   r  ps         r   common_typer  I  s    JI 
/GG?J##q||A##A&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  )r5   r   r   rl   rN  rO  r   r   r(   r&   TensorrX   operatorindex	histogramr  long)
r   binsr  normedr  r  is_a_intis_w_inthrz   s
             r   r  r  `  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   )rv   r5   r6   histogramdd)
rx   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(   rc   )r   rz   s     r   r   zhistogramdd.<locals>.<genexpr>  s     -OQjC.@-Os   r   )r4  r   ru   r  r  )r5   r  r  r  r(   r*   r)   Tr&   r0   r   rN  r   rO  rc   r  r\  r   r   r^   tolistaminmaxrC   r   r  r  rw   )sampler  r  r  r  r  r  r  bins_is_arrayrz   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   rj  r   	complex64r  ro  r  rp  
complex128rN  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)rl   r  r   rP  r   r&   r  rX   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   CastingModes | Noner#   r   )r,   r	   )NNr   )r   NNr   )r   r  )rG   Sequence[ArrayLike]r8   OutArray | Noner   DTypeLike | Noner   r  )r7   r  r   r  r   r  )r   N)r[   r  r8   r  r   r  r   r  r   )r_   r	   r`   r	   )Fr   )r~   r	   )r   r	   rz   r	   rZ  )rx   r	   )2   TFNr   )r   r	   r   r	   r   r  )r  TNr   )r  Tg      $@Nr   )r   r  )NNr   N)
r   ArrayLikeOrScalar | Noner   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)rx   r	   r   ArrayLike | Noner   r  )NTFNNN)
r   r	   r   r  r   r  r   r  r   r  )r   )r   r	   r   r	   )validr  )r  r  rx   r	   )NN)r  r	   rx   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)rx   r	   r   r   )NNraise)r   r	   r6  r	   r8   r  r   r   )r_   r	   r6  r	   )r  )r   r   r6  r	   r`   r	   r   r   )r_   r	   r6  r	   r`   r	   )Nr  )r   r	   r  r  r8   r  r   r   )FFFN)r  r	   r  r   rT  r   )NNN)r   r	   r  r  r  r  r8   r  )r   r	   r  r
   )r  r	   )r   r   r   )r   r   r   NN)r   r	   r   r  r8   r  )Nr   Nr  )r   r	   )r   )r   r	   r  r	   )r   r	   rz   r	   r8   r  )ru   ru   ru   N)ru   NN)r   r	   r   r   )leftN)r   r	   r   r	   r"  r  )r  )r   ru   NN)r   r	   r<  r  ra   r  )r  r	   )rQ  r	   )r   r	   r8   r  )d   )rx   r	   r8   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   collections.abcr   r  r	   r
   r   r   r   r   r   r   r$   r'   r0   r2   r9   r?   rD   rI   rM   	row_stackrQ   rS   rU   rZ   ra   rj   rd   re   r   rn   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#   rX   rm   r  r  r   r  r  r  r  r"  r&  r1  rc   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-  r0  r  r   r8  r:  r=  r@  rD  rd  rg  aroundround_ro  ro  rp  rs  ru  rx  rz  r|  r  r  r  r  r  r  r  r  r   r   r   r  r  r  r  r  r  r  r  r  r  r4   r   r   <module>r     sC
   #       ! (   PU+:L $/ $			 ! 	

  KV$4G$ 
"#.	!	 
	 		
 !	 ##.	!	! ! !	! 	 ##.	!	! ! !	! ##.	
!	
! 
! !	
!  ##.	'	' ' !	'  
+
 ##.++ 
+
 + !+ 2F*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 36e ...DD "	*  $* 	* *"JK6% QU	J	J*	J$ 
& 
	
 4  '	  	*  &	// / 
/ 	/2 (-	 %)$ "&+6 ! 	$$	$ 
$ 
	$5!<3 

"		
 	 
	 " #  $ 	
  $%d % 
(D@,(.H)V d#vPU W z 5 IM>>>5E>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   