
    h&                     
   S SK JrJr  S SKrS SKrS SKrS SKJr  S SKJ	r	J
r
JrJrJr  S SKJr  S SKJr  S SKJrJrJrJrJrJr  S SKJrJr  \" 5       r " S	 S
\5      r\R:                  R=                  / SQSS9r\R:                  R=                  / SQSS9r \R:                  R=                  / SQ/ SQ/ SQ/SS9r!\R:                  R=                  / SQ/ SQ/SS9r"\R:                  RG                  SSS9r$\" \!\R:                  R=                  SS/SS95      r%\" \$\\RM                  / SQ5      \RM                  / SQ5      5      r'\!RP                  S   r)\RF                  " \"RU                  5       S4SS9r+S r,/ S0 \!\!4PSSSS.\!\!4PS0 \!\!4PS0 \!\!4PS0 \!\!4PS0 \!\!4PS0 \!\!4PSS S!S".\!\!4PSSSS.\!\!4PS#0 \!\!4PS#SSS.\!\!4PS#S S!S".\!\!4PS$0 \!\!4PS$S S!S".\!\!4PS%0 \!\!4PS%SSS.\!\!4PS&0 \!\!4PS&SSS.\!\!4PS'0 \!\!4PS'SSS.\!\!4PS(0 \!\!4PS(SSS.\!\!4PS)0 \!\!4PS)SSS.\!\!4PS*0 \!\!4PS*SSS.\!\!4PS+0 \!\!4PS+SSS.\!\!4PS,0 \!\!4PS,SSS.\!\!4PS-0 \!\!4PS-SSS.\!\!4PS.0 \!\!4PS/0 \!\!4PS00 \!\!4PS0SSS.\!\!4PS10 \!\!4PS1SSS.\!\!4PS2S3S40\!\!/\!\!/4P\RZ                  " S5S4\)\)S6.\!\!/\!\!/\R\                  R_                  \(       + S7S89S99Pr0/ \0Q\RZ                  " S5S \)S-  \)S6.\!\!/\!\!/\R\                  R_                  \(       + S7S89S99PS2S3S 0\!\!/\!\!/4PS:0 \%\!4PS;0 \%\!4PS<0 \%\!4PS=0 \!\!4PS=0 \%\%4PS>S\1" \"RU                  5       S-   5      S S!S?.\"\!4PS>S\1" \ RU                  5       S-   5      S@.\ \!4PSAS\1" \"RU                  5       5      S S!S?.\"\!4PSASSS@.\ \!4PSBSCSD0\!\!4PSE0 \%\%4PSF0 \%\%4PSFSGSHS-00\%\%4PSI0 \R<                  " / SQSJS9\\R<                  " SS/SS94\!4PSK0 \R<                  " / SQSJS9\\R<                  " SS/SS94\!4PSLSMS0/ SNQ\"4PSO0 SSP.\Rd                  " / SQ/ SQ/5      Rf                  \"4PSQ0 SSP.\Rd                  " / SQ/ SQ/5      Rf                  \"4Pr4\R\                  Rk                  SR\45      SS 5       r6\R\                  Rk                  SR\05      ST 5       r7\R\                  Rk                  SU\!\%\'\!\!//5      SV 5       r8\R\                  Rk                  SR\45      SW 5       r9SX\
\\4   SY\SZ\4S[ jr:SX\
\\   \\   4   SY\\   SZ\\   4S\ jr;SX\
\\4   SY\SZ\4S] jr<g)^    )ListOptionalN)assert_almost_equal)DropoutModelNumpyOpsregistrywith_padded)r   )	has_torch)Array2dFloats2dFloatsXdPaddedRaggedShape)data_validation	get_widthc                   0    \ rS rSrS\S\\   S\4S jrSr	g)NoDropoutOps   shapedropreturnc                 ^    Ub  US::  a  U R                   R                  USS9$ [        S5      e)Nr   fdtypez0During prediction, dropout should not be applied)xpones
ValueError)selfr   r   s      \/home/james-whalen/.local/lib/python3.13/site-packages/thinc/tests/layers/test_layers_api.pyget_dropout_maskNoDropoutOps.get_dropout_mask   s0    <41977<<S<11OPP     N)
__name__
__module____qualname____firstlineno__r   r   floatr   r#   __static_attributes__r&   r%   r"   r   r      s$    Qe Q8E? Qx Qr%   r   )         r   r   i)   r.   r/   r1   )r-      r/   r-   )	      r2      )r1   r2      )r/   r/   r/   r.   r-   )r-   r.   r/   r1   c                    [        U 5      [        U5      :X  d   e[        U[        R                  R                  5      (       aH  [        U [        R                  R                  5      (       d   eUR
                  U R
                  :X  d   eg [        U[        5      (       ax  [        U [        5      (       d   eUR                  R
                  U R                  R
                  :X  d   eUR                  R
                  U R                  R
                  :X  d   eg [        U[        5      (       a  [        U [        5      (       d   eUR                  R
                  U R                  R
                  :X  d   eUR                  R
                  U R                  R
                  :X  d   e[        UR                  5      [        U R                  5      :X  d   e[        UR                  5      [        U R                  5      :X  d   eg [        U[        [        45      (       a7  [        U [        [        45      (       d   e[        S U  5       5      (       d   eg [         R"                  " S[        U 5       SU  35        g )Nc              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7f)N)
isinstancenumpyndarray).0xs     r"   	<genexpr>$assert_data_match.<locals>.<genexpr>7   s     ;A:a//s   ')zwrong output of z: )typer9   OPSr   r;   ndimr   datalengthsr   	size_at_tlenindiceslisttupleallpytestfail)Yout_datas     r"   assert_data_matchrO   &   s   7d8n$$$(CFFNN++!SVV^^,,,,}}&&&	Hf	%	%!V$$$$}}!!QVV[[000$$		666	Hf	%	%!V$$$$}}!!QVV[[000!!&&!++*:*::::8##$AII6668##$AII666	HtUm	,	,!dE]++++;;;;;;&tAwir!56r%   zDish.v1r1   )nOnIz
Dropout.v1zLayerNorm.v1z	Linear.v1zLogistic.v1z	Maxout.v1T皙?)	normalizedropoutzMish.v1zRelu.v1z
Sigmoid.v1zClippedLinear.v1zReluK.v1zHardSigmoid.v1zHardTanh.v1zHardSwish.v1zHardSwishMobilenet.v1zSwish.v1zGelu.v1zsigmoid_activation.v1zsoftmax_activation.v1z
Softmax.v1z
Softmax.v2zLSTM.v1biFzPyTorchLSTM.v1)rU   rP   rQ   zneeds PyTorch)reason)markszreduce_max.v1zreduce_mean.v1zreduce_sum.v1zexpand_window.v1zEmbed.v1)rP   nVcolumnrT   )rP   rX   zHashEmbed.v1zMultiSoftmax.v1nOs)r-   r/   zParametricAttention.v1zParametricAttention.v2key_transform@layerszSparseLinear.v1uint64zSparseLinear.v2zremap_ids.v1r   )ar-   g      @zremap_ids.v2)mapping_tablerY   zpremap_ids.v1zname,kwargs,in_data,out_datac                 P   SU 0UEn[         R                  " SU05      n[        R                  " U5      (       d   e[         R                  " SU05      S   nSU ;   a  [        U5      nSn[        U5         UR                  X#5        U" USS9u  pUR                  S5      (       a   [        U5      UR                  S5      :X  d   e[        X5        U	" U5      n
[        X5        UR                  [        5       5        UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr\   configLSTMTis_trainrP   )r	   fillsrslyis_json_serializableresolver
   r   
initializehas_dimr   get_dimrO   _to_opsr   predict)namekwargsin_datarN   cfg
filled_cfgmodelvalidrM   backpropdXs              r"   test_layers_from_configrw      s    d
%f
%C#/J%%j1111h_-h7E~E"E		+Gd3==Q<5==#6666!&a["&ln%g 
 		s   5BD
D%c                     SSU 0UES.n[         R                  " SU05      S   nSU ;   a  [        U5      nUR                  X#5        U" USS9u  pg[	        Xc5        U" U5      n[	        X5        g )Nzresidual.v1r\   )r\   layerra   rb   Trc   )r	   rh   r
   ri   rO   )	rn   ro   rp   rN   rq   rs   rM   ru   rv   s	            r"   test_layers_with_residualrz      su    #y$.I&.I
JCh_-h7E~E"	W'$/KAa"	!Bb"r%   rC   c                     [        S5      nUR                  X 5        U" U SS9u  p#[        X 5        U" U5      n[        X@5        g )NrR   Frc   )r   ri   rO   )rC   rs   rM   ru   rv   s        r"   test_dropoutr|      s@    CLE	T u-KAa	!Bbr%   c                 F   SU 0UEn[         R                  " SU05      S   nSU ;   a  g SU ;   a  [        U5      n[        XRU5        g [	        U[
        R                  R                  5      (       aU  UR                  S:X  aE  [	        U[
        R                  R                  5      (       a  UR                  S:X  a  [        XRU5        [	        U[        5      (       aH  [	        U[
        R                  R                  5      (       a  UR                  S:X  a  [        XRU5        g g g g )Nr\   ra   expand_windowrb   r.   )r	   rh   r
   util_batch_unbatch_listr9   rA   r   r;   rB   util_batch_unbatch_arrayr   util_batch_unbatch_ragged)rn   ro   rp   rN   rq   rs   s         r"   test_layers_batching_allr      s    d
%f
%Ch_-h7E$~E"9gsvv~~..7<<13D(CFFNN338J(Bgv&&(CFFNN338J)%(C 9K3 'r%   rs   rp   rN   c                    U Vs/ s H  o0R                   R                  USS5      PM!     nn[        S5         U R                  X5        U R	                  U5      R                  5       nU Vs/ s H$  o`R	                  U5      S   R                  5       PM&     nn[        XWSS9  S S S 5        g s  snf s  snf ! , (       d  f       g = f)Nr-   Tr   r1   decimal)ops	reshape2fr   ri   rm   tolistr   )rs   rp   rN   r^   	unbatched	Y_batcheduY_not_batcheds           r"   r   r      s     9@@1$$Q2.I@		+MM'*113	?HIy!q)!,335yIIa@	 
	 A J 
	s"   &B-5B7-+B2B72B77
Cc                     [        S5         U R                  X5        U R                  U5      nU Vs/ s H  o@R                  U/5      S   PM     nn[        X5SS9  S S S 5        g s  snf ! , (       d  f       g = fNTr   r1   r   )r   ri   rm   r   )rs   rp   rN   r   r   r   s         r"   r   r      sk    
 
	+MM'*	8?@1s+A.@Ia@	 
	 A 
	s   'A+A&A+&A++
A9c                    [        S5         U R                  X5        U R                  U5      n[        [	        U5      5       Vs/ s H  o@R                  X   5      S   PM     nn[        X5SS9  S S S 5        g s  snf ! , (       d  f       g = fr   )r   ri   rm   rangerF   r   )rs   rp   rN   r   r0   r   s         r"   r   r      sv     
	+MM'*	?DS\?RS?R!wz215?RSIa@	 
	 T 
	s   9A>A9$A>9A>>
B)=typingr   r   r:   rK   rf   numpy.testingr   	thinc.apir   r   r   r	   r
   thinc.backendsthinc.compatr   thinc.typesr   r   r   r   r   r   
thinc.utilr   r   rA   r   r   asarrayarray1d
array1dintarray2d
array2dintzerosarray3dragged	asarray1ipaddedr   widthmaxvectorsrO   parammarkskipifTEST_CASES_SUMMABLEintarrayT
TEST_CASESparametrizerw   rz   r|   r   r   r   r   r&   r%   r"   <module>r      s	   !    - E E # " J J 1jQ8 Q &&..#.
.VV^^IS^1

&&..,lC3.
OVV^^Y	2#^>

&&,,y,
,	Ac:	;	WcmmL13==3N
 	a
++z~~'+3
77,-GW%- q"GW5- 2w(	-
 R'*- "gw'- B)- "gw'- 5wH- !$gw7- GW%- q"GW5- ds3WgF- GW%- ds3WgF-  2w(!-" !1%w8#-$ Wg.%-& +Wg>'-( Wg&)-* #Wg6+-, r7G,--. aq)7G</-0 B)1-2 1A&93-4 R'*5-6 AQ'':7-8 b'739-: Qa0'7C;-< Wg&=-> #Wg6?-@ GW%A-B q"GW5C-D b'73E-F b'73G-H 2w(I-J !1%w8K-L 2w(M-N !1%w8O-T u1GW3EFU-V LL!%uE#JWV]L^ahjq`r  {A  {F  {F  {M  {M  R[  N[  ds  {M  {t  uW- ^!!
LL519E2	'	'kk  Y G! tw07G2DE! b&'*! r67+! b&'*!  Wg.!!" VV,#!$ Z^^%5%9!:aTWXZdfmn%!& Z^^%5%9!:;ZQ'!( AS)9%:aTWXZdfmn)!* AQ'W=+!, ':-!0 r6621!2 r6623!4 )Y1GH&RXY5!6 U]]9HEwPUP]P]_`bc^dloPpqsz{7!8 U]]9HEwPUP]P]_`bc^dloPpqsz{9!: gs^]J?;!< rQ7iQZE[9\9^9^`jk=!> a8%++yR[F\:]:_:_akl?!
H 7D E* 79LM	# N	# '66GW;M!NO  P  7DD ED"A7"#A.6ABIA	AgW-.	A']	A 7m	AA!A,2A>EAr%   