
    hw%              
          S SK Jr  S SKrS SKrS SKJrJr  S SKJrJ	r	J
r
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  S SKJrJrJrJrJrJr  S S	KJ r   S S
K!J"r"  S r#S r$S r%S r&S r'S r(S r)S r*\RV                  RY                  SS \\(" 5       4S \\#" 5       4S \\$" 5       4/5      S 5       r-\RV                  RY                  SS \\(" 5       \&4S \\#" 5       \&4S \\$" 5       \&4/5      S 5       r.\RV                  RY                  SS S\\(" 5       \&4S S\\#" 5       \&4S S\\$" 5       \&4/5      S 5       r/\RV                  RY                  S\ SSS.4/5      S 5       r0S r1S  r2S! r3S" r4S%S# jr5S$ r6g)&    )ListN)assert_array_almost_equalassert_array_equal)AdamLogisticRaggedReluchainfix_random_seedreduce_meanset_dropout_rate)English)	sentences)_get_span_indicesextract_spans)MaxoutWindowEncoderMultiHashEmbedbuild_bow_text_classifier build_simple_cnn_text_classifierbuild_spancat_modelbuild_Tok2Vec_model)StaticVectors)registryc                      SSSSS.$ )NT   F"   )exclusive_classes
ngram_sizeno_output_layernO r!       Q/home/james-whalen/.local/lib/python3.13/site-packages/spacy/tests/test_models.pyget_textcat_bow_kwargsr$       s    ! 	 r"   c                      [        5       SSS.$ )NF   )tok2vecr   r    )make_test_tok2vecr!   r"   r#   get_textcat_cnn_kwargsr)   )   s    (*bQQr"   c                     / nU R                  5        HD  nUR                   H1  nUR                  UR                  U5      R	                  5       5        M3     MF     WR
                  R                  R                  U5      $ N)walkparam_namesappend	get_paramravelopsxpconcatenate)modelparamsnodenames       r#   get_all_paramsr8   -   s`    F

$$DMM$...4467 %  88;;""6**r"   c                      [        5       n [        U R                  [        SR	                  [        5      /-   5      5      $ )N )r   listpipeEN_SENTENCESjoin)nlps    r#   get_docsr@   5   s.    
)C,)?(@@ABBr"   c                    [        XR                  R                  R                  5      (       am  U R                  R	                  UR
                  UR                  S9nX R                  R                  R                  R                  SSUR
                  5      -  nU$ [        U[        5      (       a  U Vs/ s H  n[        X5      PM     sn$ [        S[        U5       35      es  snf )Ndtypeg      g      ?z Could not get gradient for type )
isinstancer1   r2   ndarrayallocshaperC   randomuniformr   get_gradient
ValueErrortype)r4   YdYys       r#   rJ   rJ   :   s    !YY\\))**YY__QWWAGG_4
iill!!))$QWW==		At		0121U&22;DG9EFF 3s   5C$c                  <    [        S/ SQ/ SQSS9[        SSSSS9S	.$ )
N      rS   rS   NORMPREFIXSHAPEFwidthrowsattrsinclude_static_vectors   r   )rY   depthmaxout_pieceswindow_size)embedencode)r   r   r!   r"   r#   get_tok2vec_kwargsrc   E   s5       -#(	
 &AQA

 
r"   c                  (    [        S0 [        5       D6$ Nr!   )r   rc   r!   r"   r#   r(   r(   T   s    6!3!566r"   c                  ~   [        S/ SQ/ SQSS9n U R                  5        Vs/ s H  oR                  S:X  d  M  UPM     nn[        U5      S:X  d   e[	        [        S U 5       5      5      / S	Q:X  d   e[        [        S
 U 5       5      5      S:X  d   eU Vs/ s H  o3R                  S5      PM     sn/ SQ:X  d   e[        S/ SQ/ SQSS9n U R                  5        Vs/ s H  oR                  S:X  d  M  UPM     nnU Vs/ s H  o3R                  S5      PM     sn/ SQ:X  d   eg s  snf s  snf s  snf s  snf )NrQ   rR   rT   FrX   	hashembed   c              3   >   #    U  H  oR                   S    v   M     g7f)columnNr[   .0hes     r#   	<genexpr>(test_multi_hash_embed.<locals>.<genexpr>b   s     @Kbxx)K   )r   r   r]   c              3   >   #    U  H  oR                   S    v   M     g7f)seedNrk   rl   s     r#   ro   rp   d   s     :k88F#krq   nV)i  2      )r   r,   r7   lenr;   sortedsetget_dim)ra   r6   hash_embedsrn   s       r#   test_multi_hash_embedr|   X   s#   )$	E %*JJLMLDII4L4LKM{q   @K@@AYNNNs:k::;q@@@'23{JJt{3FFF)$	E %*JJLMLDII4L4LKM'23{JJt{3FFF! N 4 N3s"   D+D+D0"D59D5D:zseed,model_func,kwargsc                 8   [        U 5        U" S0 UD6nUR                  5         [        U 5        U" S0 UD6nUR                  5         [        U5      n[        U5      n[        UR                  R                  U5      UR                  R                  U5      5        g re   )r   
initializer8   r   r1   to_numpy)rs   
model_funckwargsmodel1model2params1params2s          r#   #test_models_initialize_consistentlyr   r   s     D!&!F
D!&!F
V$GV$Gvzz**73VZZ5H5H5QRr"   zseed,model_func,kwargs,get_Xc                 ,   [        U 5        U" S0 UD6R                  5       nUR                  U" 5       5      n[        U 5        U" S0 UD6R                  5       nUR                  U" 5       5      nUR                  S5      (       a  UR	                  S5      R                  U" 5       5      nUR	                  S5      R                  U" 5       5      n	[        [        U5      5       H  n
[        [        X   5      5       Hs  n[        [        R                  " UR                  R                  X   U   5      5      [        R                  " UR                  R                  X   U   5      5      5        Mu     M      UR                  R                  U5      nUR                  R                  U5      n[        U[        R                  5      (       a  [        XW5        g [        U[        5      (       aq  [        U5      [        U5      :X  d   e[!        XW5       HG  u  p UR                  R                  U5      nUR                  R                  U5      n[        X5        MI     g [#        S[%        U5       35      e! [         a     Nf = f! [         a     NCf = f)Nr'   zCould not compare type r!   )r   r~   predicthas_refget_refrangerw   r   numpyasarrayr1   r   	ExceptionrD   rE   r   ziprK   rL   )rs   r   r   get_Xr   Y1r   Y2tok2vec1tok2vec2ijy1y2s                 r#    test_models_predict_consistentlyr      s
    D!&!,,.F		 BD!&!,,.F		 B~~i  >>),44UW=>>),44UW=s8}%A3x{+,"MM&**"5"5hk!n"EFMM&**"5"5hk!n"EF - &ZZ  $ZZ  $ "emm$$2"	B		2w#b'!!!"kFBZZ((,ZZ((, r& " 248*=>>    s$   86I6 6J6
JJ
JJz$seed,dropout,model_func,kwargs,get_Xg?c                    ^ ^^^^ UUUUU 4S jnU" 5       nU" 5       n[        UR                  R                  [        U5      5      UR                  R                  [        U5      5      SS9  g )Nc                  &  > [        T5        [        S5      n T" S0 T
D6R                  5       n[        U5      n[	        UT5        [        S5       H?  nUR                  T	" 5       5      u  pE[        X5      nU" U5        UR                  U 5        MA     [        U5      n[        R                  " [        5         [        UR                  R                  U5      UR                  R                  U5      5        S S S 5        U$ ! , (       d  f       U$ = f)NgMbP?   r!   )r   r   r~   r8   r   r   begin_updaterJ   finish_updatepytestraisesAssertionErrorr   r1   r   )	optimizerr4   initial_params_rM   get_dXrN   updated_paramsdropoutr   r   r   rs   s           r#   get_updated_model:test_models_update_consistently.<locals>.get_updated_model   s    K	$V$//1'.(qA**573IAe'B2J	*	 
 (.]]>*		"">2EII4F4F~4V + 	 +* s   8?D
Dr   )decimal)r   r1   r   r8   )rs   r   r   r   r   r   r   r   s   `````   r#   test_models_update_consistentlyr      sX     $  F F

N623

N623r"   zmodel_func,kwargs   i,  )r    nMc                 
   [        5       nU " S0 UD6R                  5       n[        S5       HO  n[        U5       Vs/ s H
  oR" S5      PM     nnUR                  U5        UR	                  U5      u  pxU" U5        MQ     g s  snf )Nrh    r!   )r   r~   r   r   r   )	r   r   r?   r4   n_docsr   docsoutputbackprops	            r#   test_empty_docsr      ss    
)C  ++-E(!&v/AB/d --d3 /s   B c                  4    [        5       R                  5         g r+   )r   r~   r!   r"   r#   test_init_extract_spansr      s    O r"   c                  L   [        5       R                  5       n [        U R                  R	                  SS/SS/SS//SS9U R                  R	                  SS/SS95      nU R                  R	                  SS	/SS9n[        U R                  X5      n[        U5      / S
Q:X  d   eg )Nr   rh   r]   r      r   rB   r   
   )r   r   r]   r]   r      )r   r~   r   r1   r   r   r;   )r4   spans	x_lengthsindicess       r#   test_extract_spans_span_indicesr      s    O&&(E		Aq6Aq6Aq62#>		1a&,E 		!!1b'!5I		5<G=0000r"   c                     [        5       R                  5       n [        U R                  R	                  SS5      U R                  R                  SS/SS95      n[        U R                  R                  SS/S	S/SS
//SS9U R                  R                  S	S/SS95      nU R                  X45      u  p4[        UR                  5      / SQ:X  d   eUR                  R                  S:X  d   eU" U5      u  pVXbL d   eUR                  R                  UR                  R                  :X  d   e[        UR                  5      [        UR                  5      :X  d   eg )N      r   r   r   rB   r   rh   r]   r   r   )rh   r   r]   )   r   )r   r~   r   r1   alloc2fr   r   r;   lengthsdataXdrG   )r4   Xr   rM   r   dXspans2s          r#   #test_extract_spans_forward_backwardr      s*   O&&(Euyy  Q'):):Ar7#):)NOA		Aq6Aq6Aq62#>		1a&,E $$aZ0KA		?i'''88>>V###!JB??99??ahhnn,,,

tAII...r"   c                      [        [        S0 [        5       D6[        5       [	        5       5      n U R                  5         g re   )r   r   rc   r   r   r~   )r4   s    r#   test_spancat_model_initr     s1    3023[]HJE 
r"   c           
         [        S0 [        5       D6n[        5       n/ n/ nU H<  nUR                  US S 5        UR                  USS 5        UR                  S5        M>     [	        UR
                  R                  U Vs/ s H  ofR                  UR                  /PM     snSS9UR
                  R                  USS95      n[        U[        5       [        [        U S9[        5       5      5      R                  X'4S9nU" X'4SS	9u  pU	R                  UR                   R                  S
   U 4:X  d   eU
" U	5        g s  snf )Nr]   r   r   r   rB   )r    )r   T)is_trainr   r!   )r   rc   r@   r.   r   r1   r   startendr   r   r
   r	   r   r~   rG   r   )r    r'   r   
spans_listr   docsr   r4   rM   r   s              r#   #test_spancat_model_forward_backwardr     s.   !9$6$89G:DJG#bq'"#a(#q  zBz!ggquu-zB#NG3/E  dbk8: >jD=j! 
 5KA77u||))!,b1111QK Cs   !E c            
          [         R                  R                  S5      n [        5       n[        R
                  " [        SS9   U " USSSSSS9  S S S 5        g ! , (       d  f       g = f)Nzspacy.TextCatReduce.v1z(must be used with at least one reduction)matchF)r'   r   use_reduce_firstuse_reduce_lastuse_reduce_maxuse_reduce_mean)r   architecturesgetr(   r   r   rK   )textcat_reducer'   s     r#    test_textcat_reduce_invalid_argsr   "  sW    ++//0HIN!G	z)T	U#"! !	
 
V	U	Us   A
A&)r   )7typingr   r   r   numpy.testingr   r   	thinc.apir   r   r   r	   r
   r   r   r   spacy.lang.enr   spacy.lang.en.examplesr   r=   spacy.ml.extract_spansr   r   spacy.ml.modelsr   r   r   r   r   r   spacy.ml.staticvectorsr   
spacy.utilr   r$   r)   r8   r@   rJ   rc   r(   r|   markparametrizer   r   r   r   r   r   r   r   r   r   r!   r"   r#   <module>r      s      G	 	 	 " < C  1 R+C
G7G4 	
!3!56	
%'='?@	
,.D.FG	S	S "	
!3!5x@	
%'='?J	
,.D.FQ#?#?L *	
C$&8&:HE	
C*,B,DhO	
C13I3KXV8 ,cQT?U/V.WX
 Y
!1/ ,
r"   