
    VpfF                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dlm
Z
 e j        Ze j        Ze j        Ze j        Zej        Zej        Zej        Zej        Zd Zej        Zej        Zej        Zej        Zej        Zej        Zej         Z ej!        Z!ej"        Z"ej#        Z#ej$        Z%ej&        Z&d Z'ej(        Z(ej)        Z)ej*        Z*ej+        Z+ej,        Z-ej.        Z/ej0        Z1ej2        Z2ej3        Z3ej4        Z5ej6        Z7ej8        Z9d Z:d Z;d Z<d	 Z=ej>        j?        Z@ej>        jA        ZBd
 ZCd ZDd ZEd ZFd ZGejH        ZHejI        ZId ZJd ZKejL        ZMejN        ZOejP        ZPejQ        ZQejR        ZRejS        ZSejT        ZTejU        ZVejW        ZXd ZYd ZZej[        Zej\        Zej]        Z^ej_        Z`d Zad Zbejc        Zdeje        Zfejg        Zheji        Zjejk        Zlejm        Znd Zod Zpd Zqd Zrd Zsd Ztd Zuejv        Zvd Zwd Zxd Zyd Zzej{        Z{ej|        Z|d9d Z}d! Z~d" Zej        Zd9d#Zd$ Zd% Zej        Zd& Zd' Zej        Zd:d)Zd* Zd+ Zd, Zd- Zd;d.Zd/ Zd0 Zd1 Zd2 Zd3 Z ej        d4d5d6g          Z eej[        j        e           eej\        j        e           eejT        j         eejT                             eejW        j         eejW                             eejW        j         eejW                             eej        j         eej                             eej        j         eej                            d7Zd8 ZdS )<    N)dtypes)utilc                    t          j        | t          j        t          j        t          j        d| j                  t          j        d| j                  | j                  |           z                                 | j                  S )Ng      ?dtype        )nptrunccopysign	nextafterarrayr   astypexs    V/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/jax/_src/lax_reference.pyroundr   %   s~    	BL"AG!<!<!<!#"AG!<!<!<'(w0 0 012	4 	4 4
5 
5 6<VAG__E    c                 T    t          j        |           t          j        |           z  S N)r	   	ones_likesqrtr   s    r   <lambda>r   :   s    ",q//BGAJJ. r   c                 h    ddt          j        |            z   z                      | j                  S )N   )r	   expr   r   r   s    r   logisticr   I   s*    a"&!**n-55ag>>>r   c                 t    t           j                            | ||                              |j                  S r   )scipyspecialbetaincr   r   )abr   s      r   r    r    J   s+    U]221a;;BB17KKKr   c                 p    t           j                            |                               | j                  S r   )r   r   gammalnr   r   r   s    r   lgammar%   K   s'    em++A..55ag>>>r   c                 p    t           j                            |                               | j                  S r   )r   r   digammar   r   r   s    r   r'   r'   L   s'    u},,Q//66qw???r   c                 p    t           j                            |                               | j                  S r   )r   r   erfr   r   r   s    r   r)   r)   O   s'    5=$$Q''..qw777r   c                 p    t           j                            |                               | j                  S r   )r   r   erfcr   r   r   s    r   r+   r+   P   s'    EM&&q))00999r   c                 p    t           j                            |                               | j                  S r   )r   r   erfinvr   r   r   s    r   erf_invr.   Q   s'    u}++A..55ag>>>r   c                 p    t           j                            |                               | j                  S r   )r   r   i0er   r   r   s    r   
bessel_i0er1   S   '    %-++A..55ag>>>r   c                 p    t           j                            |                               | j                  S r   )r   r   i1er   r   r   s    r   
bessel_i1er5   T   r2   r   c                 T    t          j        |           t          j        d          z   S )Nr   )r	   conj	complex64r   s    r   r7   r7   Y   s    	bl1oo	%%r   c                 6    | t          j        d          |z  z   S )Ny              ?)r	   r8   )r   ys     r   complexr;   \   s    	
R\"!	!!r   c                    t          j        t          j        |           t          j                  rt          j        | |          }t          j        t          j        |           t          j        |          k    t          j        | |          dk              }t          j	        ||dz   |          S t          j
        | |          S )Nr   r   )r   
issubdtyperesult_typer	   integerfloor_dividelogical_andsign	remainderwheredivide)lhsrhsquotientselects       r   divrJ   k   s    v)#..
;; sC((H^BGCLLBGCLL8\#s33q8: :F8FHqL(3339S#r   c                     t          j        |           t          j        t          j        |           t          j        |                    z  S r   )r	   rB   rC   abs)rF   rG   s     r   remrM   t   s1    	RVC[["&++>>	>>r   c                    t          j        | j        t           j                  sJ | j        }t          j        | j                  }t          j        | j                  j        dk     rA|j        dv sJ |                     |j        dk    rt           j        nt           j	                  } |j        dk    r4| 
                    dt          j        | j                  j                   } | j        t           j        t           j        fv sJ t          j        d          t          j        d          t          j        d          t          j        d	          t          j        d
          t          j        d          g}| j        t           j        k    r/t          t          t           j        |d d                             }| |d         z  | dz	  |d         z  z   } | |d         z  | dz	  |d         z  z   } | |d         z  | dz	  |d         z  z   } | |d         z  | dz	  |d         z  z   } | |d         z  | dz	  |d         z  z   } | j        t           j        k    r| |d         z  | dz	  |d         z  z   } |                     |          S )N    )iurQ   rP   uintl   UU*UU* l   33ffL l   <<xxl    l     l    r   r                     )r	   r=   r   r?   iinfobitskindr   uint32int32viewuint64listmap)r   r   rZ   ms       r   population_countrd   ~   s@   	qw
	+	++++
'%
(17

%Xagb  :####	ejC//RX>>A
Z3	.bhqw'',..//A	
RY	*	*	*	*	*i"##i"##i"##i"##i"##i"##! W	SAcrcF##$$A1Q4xQ1W!$%!1Q4xQ1W!$%!1Q4xQ1W!$%!1Q4xQ1W!$%!1Q4xQ"W!$%!W		
QqTqBw!A$&'A	
%r   c                    t          j        | j        t           j                  sJ t          j        | j                  j        }dt          j        || j                  z  d d d         }| d         |z                      t           j                  }t          j	        |d                              | j                  }||| dk    <   |S )NrT   r   rS   ).Naxisr   )
r	   r=   r   r?   rZ   r[   aranger   bool_argmax)r   nbitsmaskr[   outs        r   clzrn      s    	qw
	+	++++
(17


 %
ryag...
."	5$
I,
	%	%bh	/	/$
	$R   ''00##a1f+	*r   c                 .    t          j        | |          S Nr   )r	   asarrayoperandr   s     r   convert_element_typert      s    	G5	)	)	))r   c                 P    t          j        |                               |          S r   )r	   rq   r_   rr   s     r   bitcast_convert_typerv      s     	G			!	!%	(	((r   c                     t          j        |t          j        | d |          |                              |j                  S r   )r	   clipr   r   )minrs   maxs      r   clampr{      s4    	"'#tS113	7	7	>	>w}	M	MMr   c                 .    t          j        | |          S )Nrf   )r	   concatenate)operands	dimensions     r   r}   r}      s    	y	1	1	11r   c                 ~    t          | j        dd          |j        dd          ||          }t          | |||          S NrT   )padtype_to_padsshape_conv)rF   rG   window_stridespaddingpadss        r   convr      s=    	122	!""~w	O	O$	sC	.	..r   c                 ^    t          t          | |          t          ||          ||          S r   )r   _dilate)rF   rG   r   r   lhs_dilationrhs_dilations         r   conv_with_general_paddingr      s1    	wsL))73+E+Ew
( 
( (r   c                    t          |          \  }}}	t          |t                    rRt          t	          j        | j        |          dd          t	          j        |j        |          dd          ||          }t          | |          }
t          ||          }t          |
|||||          }t          |t	          j	        |	                    S r   )
_conv_general_permutations
isinstancestrr   r	   taker   	transposer   argsort)rF   rG   r   r   r   r   dimension_numberslhs_permrhs_permout_perm	trans_lhs	trans_rhsrm   s                r   conv_general_dilatedr      s    !;<M!N!N(Hh 7bgci::122> gci::122>,g7 7G X&&)X&&)!)Y".	> 	>#	3
8,,	-	--r   c                    |\  \  }}\  }}t          j                    fd| j        D             }fd|j        D             }|d d          }	|d d          }
t          ||          D ](\  }}t	                    }|||<   |||<   d |	|<   d |
|<   )g }t          ||          D ]=\  }}t	                    }|||<   |||<   d |	|<   d |
|<   |                    |           >d }t          |||	z   |
z             }| j        |j        k    sJ | j        t          j	        k    rt          j        nd }t          j        | |||||          }| j        t          j	        k    r|                    t          j	                  n|S )Nc                 .    g | ]}t                    S  next.0_new_ids     r   
<listcomp>zdot_general.<locals>.<listcomp>       2221$v,,222r   c                 .    g | ]}t                    S r   r   r   s     r   r   zdot_general.<locals>.<listcomp>   r   r   c                 
    | d uS r   r   r   s    r   r   zdot_general.<locals>.<lambda>   s
    q} r   r   )	itertoolscountr   zipr   appendfilterr   r   bfloat16r	   float32einsumr   )rF   rG   r   lhs_contractingrhs_contracting	lhs_batch	rhs_batchlhs_axis_idsrhs_axis_idslhs_out_axis_idsrhs_out_axis_idslhs_axisrhs_axis	shared_id	batch_idsnot_noneout_axis_idsr   rm   r   s                      @r   dot_generalr      s   ?P<$?O&<y)?&2222	222,2222	222,!!!!_!!!!_AA & &hVI&L&L!%X!%X)	955    hVI&L&L!%X!%XY$$(!$447GGI I,	ci					V_44"**$%
	#|S,	  	  	 #(+	V_(D(DFO	$	$	$#Mr   c                 :   | j         \  }}|j         \  }}}||k    sJ ||j         d         k    sJ | j        |j        k    sJ t          j        ||f| j                  }t          j        t          j        |j         d                   t          t          d|j                                      }	d}
t          |          D ]\  }}|t          j
        t          j        |
|	k    |	|
|z   k               t          j        d| ||ddddf         | j        t          j        k    rt          j        nd          t          j        |j         |j                            z  }|
|z  }
| j        t          j        k    r|                    t          j                  n|S )z$Reference ragged dot implementation.r   r   r   z	nk,km->nmN)r   r   r	   zerosexpand_dimsrh   ra   rangendim	enumeraterD   rA   r   r   r   r   r   )rF   rG   group_sizesrc   lkgroup_countrknrm   result_iotastartrP   sizes                r   
ragged_dotr      s    )%!Ry+r1	r	)!,	,	,	,	,	ci				
!Qsy)))#ry166U1ch=O=O8P8PQQ+
%;''  ga28
u+[EDL-IJJ
	


aAAAg,!i6?::

		
 	
 	
 	#),,,	 	 	C 
TMEE(+	V_(D(DFO	$	$	$#Mr   c                 V    t          j        | |t          j        |           z             S r   )r	   broadcast_tor   )rs   sizess     r   	broadcastr     s#    	%"(7*;*;";	<	<<r   c                     t          j        t          |          t           j                  }t	          |          D ]\  }}| j        |         ||<   t          j        t          j        | |          |          S rp   )r	   oneslenr^   r   r   r   reshape)rs   r   broadcast_dimensions
in_reshaperP   bds         r   broadcast_in_dimr     sj    ws5zz222*-.. & &ea]1%JrNN	GZ88%	@	@@r   c                     |.t          t          t          j        |                               }t          j        t          j        | |          |          S r   )r   r   r	   r   r   r   )rs   	new_sizes
dimensionss      r   r   r     sE    s28G,,--..J	BL*55y	A	AAr   c                 t   t          j        |          \  }}}t          j        |dd           t          j        |dd           }}t          j        t          j        t          j        ||          | j                  t          j        |t          j        | j        d                              }t          j        ||| j	                  }	t          d t          ||t          j        d|                    D                       }
| |	|
<   t          d t          ||          D                       }|	|         S )Nr   r   c              3   b   K   | ]*\  }}}t          |d k    r|nd |d k    r| nd|          V  +dS r   N_slice)r   lhsteps       r   	<genexpr>zpad.<locals>.<genexpr>)  sj       Q Q#At QAAAQUUrrdKK Q Q Q Q Q Qr   c              3   ^   K   | ](\  }}t          |d k     r| nd |d k     r|nd          V  )dS r   r   )r   r   r   s      r   r   zpad.<locals>.<genexpr>,  s^       . .A 1q55aRRaa!eeFF . . . . . .r   )r   unzip3r	   rx   addr   multiplysubtractfullr   tupler   )rs   padding_valuepadding_configlohiinteriorlo_poshi_posoutshaperm   
lhs_slicestrim_slicess               r   padr   !  s/   [00"b(72q$''Q)=)=&&VBF26&&117=AA[2;w}a+H+HIIK K(
-77# Q Q'*6626!X;N;N'O'OQ Q Q Q Q*#j/ . .!$R. . . . .+	[	r   c                     t                    fdt          t          j        |                     D             }| t	          |                   S )Nc              3   `   K   | ](}|v rt          d d d          nt          d           V  )d S )NrS   r   )r   dr   s     r   r   zrev.<locals>.<genexpr>2  sV       / / ()JVD$###F4LL / / / / / /r   )	frozensetr   r	   r   r   )rs   r   indexers    ` r   revr   0  s[    $$*/ / / /BGG,,--/ / /'	w	  r   c                     |9t          j        t          |                                        t                    }t          t          t          |||                    }| |         S r   )r	   r   r   r   intr   _mapr   )rs   start_indiceslimit_indicesstridesslicess        r   slicer  8  sQ    _gc-(())0055Gfm]GDDEE&	r   c                     t          j        || j                  }t          d t	          ||          D                       }| |         }||t          d |j        D                       <   |S )Nr   c              3   B   K   | ]\  }}t          |||z             V  d S r   r   )r   r   r   s      r   r   z dynamic_slice.<locals>.<genexpr>@  sP       B B% UE$J'' B B B B B Br   c              3   6   K   | ]}t          d |          V  d S r   r   )r   stops     r   r   z dynamic_slice.<locals>.<genexpr>C  s,      994F4999999r   )r	   r   r   r   r   r   )rs   r  slice_sizesrm   idxsections         r   dynamic_slicer  >  s    
GM222# B B!$]K!@!@B B B 	B 	B#CL'=D#e997=99999:	*r   c           
          t          t          t          |t          j        ||j                                      }t          j        |           }|||<   |S r   )r   r  r   r	   r   r   copy)rs   updater  r  updated_operands        r   dynamic_update_slicer  F  sH    fmRVM6<-P-PQQRR&GG$$/"/&	r   c                     t          ||          } || t          |                                        t          j        |           j                  S r   )_make_reducerr   r   r	   rq   r   )rs   
init_valuecomputationr   reducers        r   reducer  N  sF    +z22'	%
++	,	,	3	3BJw4G4G4M	N	NNr   c                    | ||}	}}t          |t                    rt          |j        ||	|          }
n|}
|                    d|j        z             }|rt          |||          }t          |d|z   |	|
|          d         }|                    |j        ddt          |          z            dz             }t          ||          } ||d          S )N)r   r   )	pad_valuer   r   rS   rS   rf   )	r   r   r   r   r   r   
_conv_viewr   r  )rs   r  r  window_dimensionsr   r   base_dilationopdimsr  r   r_   r  s                r   reduce_windowr"  R  s    0.Gd" 28T7G<<DDD	zz&28#$$" 0	]J	/	/B	Bw(
* 
* 
**+
-$	dj1SYY;/%7	8	8$+z22'	B			r   rS   c                     t          t          j        d | j        D                        }t          j        | |          ||<   | t          |                   |t          |                   fS )Nc                 6    g | ]}t          j        |          S r   )r	   rh   )r   r   s     r   r   z sort_key_val.<locals>.<listcomp>g  s     888ry||888r   rf   )ra   r	   ix_r   r   r   )keysvaluesr   idxss       r   sort_key_valr)  f  s`    	bf88TZ8889	:	:$Jt)444$y/	eDkk	F5;;/	//r   c                 p    t          | |j        ||d          \  }}}}t          j        |||||d          S )Nr   T)use_blas)r  r   
opt_einsumcontract)rF   rG   r   r   r_   	view_axesrhs_axesout_axess           r   r   r   m  sN    (2	39ndB)0 )0%$	8X		
IsHh
? 
? 
? ?r   c                    |                                 dk    s|                                 dk    rt          j        t          j        | |                                        t
                    }d t          ||||           D             }|                                 dk    rd |D             S d |D             S dgt          |           z  S )NSAME
SAME_LOWERc                 P    g | ]#\  }}}}t          |d z
  |z  |z   |z
  d          $S )r   r   )_max)r   out_sizestridefilter_sizein_sizes        r   r   z#padtype_to_pads.<locals>.<listcomp>v  sS     L L L;Xv{G x!|v-;gEqII L L Lr   c                 (    g | ]}|d z  ||d z  z
  fS rT   r   r   pad_sizes     r   r   z#padtype_to_pads.<locals>.<listcomp>z  s7       8@8q=(X]2
3  r   c                 (    g | ]}||d z  z
  |d z  fS r;  r   r<  s     r   r   z#padtype_to_pads.<locals>.<listcomp>~  s7       8@8h!m#X]
3  r   r   r   )upperr	   ceiltrue_divider   r   r   r   )in_shapefilter_shaper   r   	out_shape	pad_sizess         r   r   r   s  s    ]]__'--//\"A"Ax@@AAHHMMIL L	><JJL L LI }}&   DM    DM    8c(mm##r   c                    t          | j        t          |                    dk     s/| j        t          |          k    s| j        d         |d         k    rt	          d          t          |          t          |          dz
  k    rt	          d          t          |          t          |          dz
  k    rt	          d          t          | dgdz  t          |          z   |          } | j        dd         }|dd         }t          |          }t          j        || j	        dd                   }| j	        dd         t          |          z   | j	        dd         z   }	t          j        t          j        ||          |          dz   }
| j        dd         t          |
          z   |dd         z   }t          j        j                            | ||	          }t          t!          |j                            }|| dz
  d         }|j        g|z   }d|j        gt          t!          d|dz                       z   }||||fS )	zECompute the view (and its axes) of a convolution or window reduction.rT   r   zDimension mismatchz.Wrong number of strides for spatial dimensionsz+Wrong number of pads for spatial dimensionsr?  Nr   )_minr   r   r   
ValueError_padra   r	   r   r  r   r@   r   libstride_tricks
as_stridedr   )rF   	rhs_shaper   r   r  rC  rD  dimout_stridesview_stridesrE  
view_shaper_   r.  sum_axesr/  r0  s                    r   r  r    s   
38S^^$$q((CHI,F,F	11	%	%
)
*
**C	NNQ...
E
F
FFYY#i..1$$$
B
C
CCS6(Q,d+Y77#Yqrr](122,L#NCKO<<+RaR5#5#55ABBG,ok(L))>; ;=>?)y!}uY///)ABB-?*			(	(j,	G	G$5##$$)tAvww(i[8#(^d5CE??333(	y(H	,,r   c           	      
   t          j        | t          j        d|          d|                              | j                  }t          d t          |t          j        |                     D                       }||         S )Nr   constant)modeconstant_valuesc              3      K   | ]:\  \  }}}t          |d k     rt          |          nd |d k     r||z  nd          V  ;dS r   )r   rL   )r   r   r   rO  s       r   r   z_pad.<locals>.<genexpr>  sr       @ @"Xb"s 266Bqb1ff"s(($OO @ @ @ @ @ @r   )r	   r   maximumr   r   r   r   r   )arrr   r  rm   r  s        r   rJ  rJ    s    
sBJq$''j )	+ 	+ 	++16#)+<+<  @ @&)$&>&>@ @ @ @ @&	Vr   c                    t          j        | j        dd          t          j        t          j        |d          t          j        | j        dd          d                              }t          j        | j        d d         t          |          z   || j                  }t          d |D                       }| |t          d           fdz  |z   <   |S )NrT   r   c              3   8   K   | ]}t          d d |          V  d S r   r   )r   r   s     r   r   z_dilate.<locals>.<genexpr>  s.      BB$VD$--BBBBBBr   )	r	   r   r   r   r   r   r   r   r   )rs   factors
fill_valueoutspacerm   r   s         r   r   r     s     VGM!""%[Wa!8!8"$+gmABB.?"C"CE EF F( 	bqb!E(OO3ZOO#BB'BBBBB**1#vd||oJ&'	*r   c           	      P   | \                       d                               d          ft          d t                    D                       z   }                     d                               d          ft          t          d t                    D             fd                    z   }                     d                               d          ft          t          d	 t                    D             fd
                    z   }|||fS )NOIc              3   (   K   | ]\  }}|d v	|V  dS )>   rb  ra  Nr   r   rP   cs      r   r   z-_conv_general_permutations.<locals>.<genexpr>  s0      OODAq1J;N;Na;N;N;N;NOOr   NCc              3   (   K   | ]\  }}|d v	|V  dS >   rg  rf  Nr   rd  s      r   r   z-_conv_general_permutations.<locals>.<genexpr>  <       6 6DAq!"*!4!4  !4!4!4!46 6r   c                 :                         |                    S r   index)rP   lhs_specrhs_specs    r   r   z,_conv_general_permutations.<locals>.<lambda>      8>>(1++F+F r   )keyc              3   (   K   | ]\  }}|d v	|V  dS ri  r   rd  s      r   r   z-_conv_general_permutations.<locals>.<genexpr>  rj  r   c                 :                         |                    S r   rl  )rP   out_specro  s    r   r   z,_conv_general_permutations.<locals>.<lambda>  rp  r   )rm  r   r   sorted)r   r   r   r   rn  rt  ro  s       @@@r   r   r     sf   !2(Hh~~c""HNN3$7$78OOIh$7$7OOOOOP(~~c""HNN3$7$78f 6 6Ih,?,? 6 6 6!F!F!F!F!FH H H I II( ~~c""HNN3$7$78f 6 6Ih,?,? 6 6 6!F!F!F!F!FH H H I II( 
8X	%%r   c                     t                               t          | d                    }|r(|\  }}| |t          j        |                    k    r|S t          | |          S )zBMake a reducer function given a Python binop and an initial value.__name__)_monoidsgetgetattrr   r>   _reducer_from_pyfunc)py_binopinit_valmonoid_recordr  monoid_identitys        r   r  r    sf     ,,wx<<==- ,G_??6#5h#?#?@@@@n	h	1	11r   c                     t          j        | t          j                  rt          j         nt          j        |           j        S r   )r   r=   r	   floatinginfrZ   ry   dts    r   _get_max_identityr    s/    %b"+66	L"&BHRLL<LLr   c                     t          j        | t          j                  rt          j        nt          j        |           j        S r   )r   r=   r	   r  r  rZ   rz   r  s    r   _get_min_identityr    s-    $R55	K28B<<;KKr   c                       fdS )Nc                 :    t          j        j        |           S rp   )r	   rq   identity)r   r   s    r   r   z"_identity_getter.<locals>.<lambda>  s    rz"+U;;; r   r   )r   s   `r   _identity_getterr    s    	;	;	;	;;r   MonoidRecordr  r  )rz   ry   r   mulr   rA   
logical_orc                      d fd	}|S )Nr   c                    |!t          t          j        |                     n|}t          j        t          j        t          j        |           |          t          j        |           j                  }t          j        |           D ]B\  }}t          t          j        ||                    } ||         | |                   ||<   C|S rp   )
r   r	   r   r   deleter   rq   r   ndenumerater   )rs   rg   resultr  r   out_idxr}  r|  s         r   r  z%_reducer_from_pyfunc.<locals>.reducer  s    &*l5!!"""DWRYrx00$77Jw//57 7 7F.)) @ @QbiT**++g '#,??fWooMr   r   r   )r|  r}  r  s   `` r   r{  r{    s.           
.r   r   r  r  )builtinscollectionsr   numpyr	   r,  scipy.specialr   jax._srcr   r   r  r   rz   r5  ry   rH  rb   r  negativenegrB   floorrA  r   r   isfinite	is_finiter   exp2expm1loglog1ptanhsincosarctan2atan2r   rsqrtcbrtsquare
reciprocaltanarcsinasinarccosacosarctanatansinhcosharcsinhasinharccoshacosharctanhatanhr   r    r%   r'   r   gammaincigamma	gammainccigammacr)   r+   r.   r1   r5   realimagr7   r;   absoluterL   powerpowbitwise_notbitwise_and
bitwise_orbitwise_xorr   r   subr   r  rJ   rM   rY  minimum
left_shift
shift_leftright_shiftshift_right_arithmeticrd   rn   equaleq	not_equalnegreater_equalgegreatergt
less_equallelessltrt   rv   r{   r}   r   r   r   dotr   r   r   r   sumsqueezer   r   r   rD   rI   r  r  r   r  r"  sortr)  r   r   r  rJ  r   r   r  r  r  r  
namedtupler  rA   r  rx  r{  r   r   r   <module>r     s                                    	|||k	w
	wE E E L	K	f	w
f
	wff

	w..	w	]
f	y	y	y	w	w





 > > > K K K > > > ? ? ?		
-
! 7 7 7 9 9 9 > > > > > > > > >	w	w& & &" " " 	khnn]
nfkk  ? ? ? 	jj]
   >   X\Z]W* * *) ) )N N N2 2 2/ / /( ( (
. . . 	fN N NBN N N:= = =A A A 	f
*B B B B
  ! ! ! 
        L	O O O     $ 
w0 0 0 0? ? ?$ $ $"- - ->  	 	 	 	& & & 2 2 2M M ML L L< < < &{%ny*6MNN<
)+<==<
)+<==<'7'7'?'?@@<*,<,<R[,I,IJJR[/--bk::< << 5 0 0 @ @B B,r}3//>>@ @ 	 	 	 	 	r   