
    hN                        S SK r  S SKJrJr  S SKJrJrJ	r	  S SK
r
S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJrJrJr  S
SKJr  \ R6                  R9                  S5      S 5       rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(\ R6                  RS                  SSS0SS0SS0/0 SSSS.4SS0SS 0SS!0/0 S"SS#S.4S$S%S&.SS0S'S'S(./0 S)S*SS+S+S,.4S!S-S&.S S S../0 S/S0S*S*S1.4S'S'S&.SS0/0 SS2S&.4S'S3S&./0 SS3S&.4S'S'S&.SS0/SS30S3SS&.4S3S3S&.SS30/0 S3S3S3S.4S3S3S&.SS0/0 S3S3SS.4S3S3S&.SS30/SS/0S3S3SS.4S'S'SSS1./S3S3S&.S3S3S'S'S1.4S'S'SSS1./S3S3S3S4.S3S3S'S'S3S5.4/5      S6 5       r*S7 r+S8 r,S9 r-S: r.S; r/ " S< S=5      r0\ R6                  RS                  S>S S? S@ 4SA\0\0" SS5      4/5      SB 5       r1SC r2g! \ a    S SKJrJr   GNf = f)D    N)	StrictInt	StrictStr)ConfigValidationErrorLinearModel)German)English)Language)DEFAULT_TOK2VEC_MODEL)Doc)SimpleFrozenDictcombine_score_weightsregistry   )make_tempdiri  c                    ^ Sn Sm[         R                  " U 5       " U4S jS5      5       n[        5       nUR                  U TS9nUR                  S:X  d   e[        5        nUR                  U5        STSS	000n[        R                  " XES
9nUR                  T5      R                  S	:X  d   e S S S 5        g ! , (       d  f       g = f)Ntest_issue5137my_componentc                   8   > \ rS rSr Y S4S jrS rS rS rSrg)	#test_issue5137.<locals>.MyComponent   all_categoriesc                 (    Xl         X0l        X l        g N)nlp
categoriesname)selfr   r   r   s       b/home/james-whalen/.local/lib/python3.13/site-packages/spacy/tests/pipeline/test_pipe_factories.py__init__,test_issue5137.<locals>.MyComponent.__init__   s    H(OI    c                     g r    r   docs     r   __call__,test_issue5137.<locals>.MyComponent.__call__!       r"   c                     g r   r$   )r   pathkwargss      r   to_disk+test_issue5137.<locals>.MyComponent.to_disk$   r)   r"   c                     g r   r$   )r   r+   cfgs      r   	from_disk-test_issue5137.<locals>.MyComponent.from_disk'   r)   r"   )r   r   r   N)	__name__
__module____qualname____firstlineno__r    r'   r-   r1   __static_attributes__)	pipe_names   r   MyComponentr      s    %.;K 	
			r"   r9   r   r   
componentsr   my_categoriesconfig)
r
   factoryr	   add_piper   r   r-   spacyloadget_pipe)factory_namer9   r   r   tmpdir	overridesnlp2r8   s          @r   r   r      s    #LIl#  $ )C<<9<=L""&6666	6F!Io/N#OP	zz&3}}Y'22oEEE	 
s   "AB;;
C	c                  ^   Sn [         R                  " U 5      S[        S[        4S j5       nU [        R                  ;   d   e[        5       n[
        R                  " [        5         UR                  U5        S S S 5        UR                  U 5        XR                  ;   d   eUR                  U    U :X  d   e[         R                  " U 5      (       d   eUR                  U 5      (       d   eUR                  U 5      nX1:X  d   eUR                  U 5      nX1:X  d   eg ! , (       d  f       N= f)Ntest_componentr&   returnc                     U $ r   r$   r&   s    r   	component/test_pipe_function_component.<locals>.component7   s    
r"   )r
   rM   r   r   	factoriespytestraises
ValueErrorr@   
pipe_namespipe_factoriesget_factory_metaget_pipe_metarC   create_pipe)r   rM   r   pipes       r   test_pipe_function_componentrY   4   s   Ds s   8%%%%%
*C	z	"Y 
#LL>>!!!d#t+++$$T****T""""<<D??4 D 
#	"s   'D
D,c                    ^ Sn Sn[         R                  " U 5       " S S5      5       n " S S5      m[         R                  " U5      U4S[         4U4S jjj5       n[        5       nX4UT44 GHJ  u  pVU[        R                  ;   d   e[        R
                  " [        5         UR                  U" XE5      5        S S S 5        UR                  U5        XTR                  ;   d   eUR                  U   U:X  d   e[         R                  " U5      (       d   eUR                  U5      (       d   eUR                  U5      n[        Xv5      (       d   e[        UR                  [         5      (       d   eUR                  U5      n[        Xv5      (       d   e[        UR                  [         5      (       a  GMK   e   g ! , (       d  f       GN	= f)	Ntest_class_component1test_class_component2c                   8    \ rS rSrS\S\4S jrS\S\4S jrSr	g	)
2test_pipe_class_component_init.<locals>.Component1N   r   r   c                     Xl         g r   r   r   r   r   s      r   r    ;test_pipe_class_component_init.<locals>.Component1.__init__P       Hr"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   ;test_pipe_class_component_init.<locals>.Component1.__call__S       Jr"   ra   N
r3   r4   r5   r6   r
   strr    r   r'   r7   r$   r"   r   
Component1r^   N   s(    	 	 		 	 	r"   rj   c                   8    \ rS rSrS\S\4S jrS\S\4S jrSr	g	)
2test_pipe_class_component_init.<locals>.Component2V   r   r   c                     Xl         g r   ra   rb   s      r   r    ;test_pipe_class_component_init.<locals>.Component2.__init__W   rd   r"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   ;test_pipe_class_component_init.<locals>.Component2.__call__Z   rg   r"   ra   Nrh   r$   r"   r   
Component2rl   V   s(    	 	 		 	 	r"   rr   r   c                    > T" X5      $ r   r$   )r   r   rr   s     r   r?   /test_pipe_class_component_init.<locals>.factory]   s    #$$r"   )r
   r?   r   rO   rP   rQ   rR   r@   rS   rT   rU   rV   rC   
isinstancer   rW   )	name1name2rj   r?   r   r   	ComponentrX   rr   s	           @r   test_pipe_class_component_initry   J   s   #E#Ee    e$) %X % % *C"/%1DEx)))))]]:&LL3-. 'T~~%%%!!$'4///((....  &&&&||D!$****$((H----t$$****$((H---- F&&s   $F>>
G	c                     Sn [         R                  " U 5       " S S5      5       n[        R                  " U 5       " S S5      5       n[        5       n[        R                  " [
        5         UR                  U 5        S S S 5        [        R                  " [
        5         UR                  U SSS.S	9  S S S 5        [        R                  " [        5         UR                  U S
SSS.S	9  S S S 5        UR                  U 5      n[        UR                  [         5      (       d   eUR                  S
:X  d   eUR                  S:X  d   eUR                  SL d   eUR                  U :X  d   e[        5       n[        R                  " [
        5         UR                  U SSS.S	9  S S S 5        UR                  U S
SS.S	9  UR                  U 5      n[        UR                  [        5      (       d   eUR                  S
:X  d   eUR                  S:X  d   eUR                  SL d   eg ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       N= f)Ntest_class_component_configc                   @    \ rS rSrS\S\S\S\4S jrS\	S\	4S	 jr
S
rg)3test_pipe_class_component_config.<locals>.Componentv   r   r   value1value2c                 B    Xl         X0l        X@l        SU l        X l        g )NT)r   r   r   is_baser   r   r   r   r   r   s        r   r    <test_pipe_class_component_config.<locals>.Component.__init__x   s     H K KDLIr"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   <test_pipe_class_component_config.<locals>.Component.__call__   rg   r"   )r   r   r   r   r   Nr3   r4   r5   r6   r
   ri   r   r   r    r   r'   r7   r$   r"   r   rx   r}   v   s:    		'*	4=	GP		 	 	r"   rx   c                   @    \ rS rSrS\S\S\S\4S jrS\	S\	4S	 jr
S
rg)5test_pipe_class_component_config.<locals>.ComponentEN   r   r   r   r   c                 6    Xl         X0l        X@l        SU l        g )NF)r   r   r   r   r   s        r   r    >test_pipe_class_component_config.<locals>.ComponentEN.__init__   s     H K K DLr"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   >test_pipe_class_component_config.<locals>.ComponentEN.__call__   rg   r"   )r   r   r   r   Nr   r$   r"   r   ComponentENr      s:    	!	!'*	!4=	!GP	!	 	 	r"   r   10hello)r   r   r=   
   
wrong_name)r   r   r   TF)r
   r?   r	   rP   rQ   r   r@   warnsUserWarningrC   ru   r   r   r   r   r   )r   rx   r   r   rX   nlp_ens         r    test_pipe_class_component_configr   s   s   (Dd   __T
 
 
 *C	,	-T 
.	,	-TTW"EF 
.	k	"B'<P 	 	
 
# <<Ddhh))));;";;'!!!<<499YF	,	-%HI 
.
OODB'!BOC??4 Ddhh((((;;";;'!!!<<5   / 
.	-	-	-	"	" 
.	-s0   -H(!H:II(
H7:
I	
I
I,c                  0   Sn [         R                  " U 5       " S S5      5       n[        5       nUR                  U 5        UR                  U 5      n[	        UR
                  [         5      (       d   eUR                  S:X  d   eUR                  S:X  d   eg )Ntest_class_component_defaultsc            	       `    \ rS rSr\" S5      \" S5      4S\S\S\S\4S jjrS	\	S
\	4S jr
Srg)5test_pipe_class_component_defaults.<locals>.Component   r   r   r   r   r   r   c                 (    Xl         X0l        X@l        g r   r   r   r   r   s        r   r    >test_pipe_class_component_defaults.<locals>.Component.__init__   s     H K Kr"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   >test_pipe_class_component_defaults.<locals>.Component.__call__   rg   r"   r   N)r3   r4   r5   r6   r   r   r
   ri   r    r   r'   r7   r$   r"   r   rx   r      sQ     !*" )' 2		!		! 		! 			!
 		!	 	 	r"   rx   r   r   )r
   r?   r@   rC   ru   r   r   r   )r   rx   r   rX   s       r   "test_pipe_class_component_defaultsr      s    *Dd   *CLL<<Ddhh))));;";;'!!!r"   c                  n   Sn S[         SSSSS.S.SS	.n[        R                  " XS
9 " S S5      5       n[        5       nUR                  U 5        UR	                  U 5      n[        UR                  [        5      (       d   eUR                  S:X  d   e[        UR                  [        5      (       d   eg )Ntest_class_component_modelzspacy.TextCatEnsemble.v2zspacy.TextCatBOW.v3F   )@architecturesexclusive_classes
ngram_sizeno_output_layer)r   tok2veclinear_modelr   )modelr   default_configc                   @    \ rS rSrS\S\S\S\4S jrS\	S\	4S	 jr
S
rg)2test_pipe_class_component_model.<locals>.Component   r   r   r   r   c                 4    Xl         X l        X@l        X0l        g r   r   r   r   r   r   r   r   r   r   s        r   r    ;test_pipe_class_component_model.<locals>.Component.__init__   s    HJ KIr"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   ;test_pipe_class_component_model.<locals>.Component.__call__   rg   r"   r   r   r   r   N)r3   r4   r5   r6   r
   r   ri   r   r    r   r'   r7   r$   r"   r   rx   r      s6    	 	 	c 	9 		 	 	r"   rx   )
r   r
   r?   r@   rC   ru   r   r   r   r   )r   r   rx   r   rX   s        r   test_pipe_class_component_modelr      s    'D 9,"7%*#(		
 N d:  ; *CLL<<Ddhh))));;"djj%((((r"   c                  D   Sn U  S3nSUSSS.S.n[         R                  " XS9 " S S	5      5       n[        R                  " U5      S
[        S[        4S j5       n[        5       nSUSSS.S.nUR                  XS9  UR                  U 5      n[        UR                  [         5      (       d   eUR                  S:X  d   e[        UR                  [        5      (       d   eUR                  R                  S:X  d   e[        5       n[        R                  " [        5         SUSSS.S.nUR                  XS9  S S S 5        [        R                  " [        5         SUSSS.S.nUR                  XS9  S S S 5        g ! , (       d  f       NJ= f! , (       d  f       g = f)N!test_class_component_model_customz.archr   r   )r   nOnI)r   r   r   c            	       R    \ rS rSr\" S5      4S\S\S\S\4S jjrS\	S	\	4S
 jr
Srg)9test_pipe_class_component_model_custom.<locals>.Component   r   r   r   r   r   c                 4    Xl         X l        X@l        X0l        g r   r   r   s        r   r    Btest_pipe_class_component_model_custom.<locals>.Component.__init__   s     HJ KIr"   r&   rJ   c                     U$ r   r$   r%   s     r   r'   Btest_pipe_class_component_model_custom.<locals>.Component.__call__   rg   r"   r   N)r3   r4   r5   r6   r   r
   r   ri   r    r   r'   r7   r$   r"   r   rx   r      sI     !*"
	
	 
	 	
	
 
		 	 	r"   rx   r   r   c                     [        X5      $ r   )r   )r   r   s     r   make_custom_arch@test_pipe_class_component_model_custom.<locals>.make_custom_arch   s    b~r"      r   r=   linear20      ?g       @)r
   r?   r   architecturesr   r@   rC   ru   r   r   r   r   r   rP   rQ   r   )r   archr   rx   r   r   r>   rX   s           r   &test_pipe_class_component_model_customr      s   .DV5>D !t1TU,VWNd:  ;  D!Y I  " *CAQ%OPFLLL%<<Ddhh))));;"djj%((((::??h&&&
*C	,	- d!ST+UVT) 
. 
,	-DSV)WXT) 
.	- 
.	- 
.	-s   #F F 
F
Fc                      [         R                  " [        5         [        R                  S[
        S[        4S j5       n S S S 5        [         R                  " [        5         [        R                  S[
        S[        4S j5       nS S S 5        [         R                  " [        5         [        R                  " S5      S[
        S[        4S j5       nS S S 5        g ! , (       d  f       N= f! , (       d  f       Nm= f! , (       d  f       g = f)Nfoobarc                     g r   r$   r   r   s     r   rM   4test_pipe_factories_wrong_formats.<locals>.component      r"   c                     g r   r$   r   s     r   factory13test_pipe_factories_wrong_formats.<locals>.factory1  r   r"    test_pipe_factories_missing_argsc                     g r   r$   r   s     r   factory23test_pipe_factories_wrong_formats.<locals>.factory2%  r   r"   )rP   rQ   rR   r
   rM   intri   r?   )rM   r   r   s      r   !test_pipe_factories_wrong_formatsr     s    	z	"				3 	S 	 
	 
# 
z	"				# 	C 	 
	 
# 
z	"			<	=	# 	C 	 
>	 
#	" 
#	" 
#	" 
#	"s#   %C"%C.)+C?
C+.
C<?
Dc                     [        5       n U R                  SSS9  U R                  S5        U R                  S5      (       d   eU R                  S5      (       d   eU R	                  S5      (       d   eU R                  S5      (       d   eU R                  S5      (       d   eU R	                  S5      (       d   eU R                  SS5        U R                  S5      (       d   eU R	                  S5      (       d   e[        R                  " [        5         U R                  S5        SSS5        U R                  S5        SU R                  ;  d   eSU R                  ;  d   e[        R                  " [        5         U R                  SS5        SSS5        U R                  SS5        U R                  S5      (       d   eU R                  S5      R                  S:X  d   eg! , (       d  f       N= f! , (       d  f       Nk= f)zTest that component-specific meta and config entries are represented
correctly and cleaned up when pipes are removed, replaced or renamed.nerner_componentr:   textcattcNparser)r
   r@   rU   rV   get_pipe_configrename_piperP   rQ   rR   remove_pipe
_pipe_meta_pipe_configsreplace_piper?   ra   s    r   %test_pipe_factory_meta_config_cleanupr   *  s    *CLL_L-LL&&&&_----////	****Y''''y))))OOIt$T""""t$$$$	z	" 
#OOO$#..000#"3"3333	z	"H- 
#T8$))))T"**h666 
#	"
 
#	"s   G(G9(
G69
Hc                      Sn [         R                  " U S0 0S9S[         S[        S[        4S j5       n[        5       nUR	                  U 5        g)zaTest that default config values can be empty dicts and that no config
validation error is raised.&test_pipe_factories_empty_dict_defaultr   r   r   r   c                     g r   r$   )r   r   r   s      r   r?   7test_pipe_factories_empty_dict_default.<locals>.factoryK  s    r"   N)r
   r?   ri   dictrW   )r   r?   r   s      r   r   r   E  sV     4DdE2;7X S t  8 *COODr"   c                     Sn Sn[         R                  " U S S9  [        R                  " U S S9  [        R                  " US S9  [         R                  " U 5      (       d   e[         R                  " U5      (       a   e[        R                  " U 5      (       d   e[        R                  " U5      (       a   e[        R                  " U 5      (       d   e[        R                  " U5      (       d   e[        5       nUR                  U 5      " 5       S:X  d   e[        R                  " [        5         UR                  U5        SSS5        [        5       nUR                  U 5      " 5       S	:X  d   e[        R                  " [        5         UR                  U5        SSS5        [        5       nUR                  U 5      " 5       S:X  d   eUR                  U5      " 5       S
:X  d   eg! , (       d  f       N= f! , (       d  f       Nb= f)zbTest that language sub-classes can have their own factories, with
fallbacks to the base factories.specific_component1specific_component2c                      g)Nbaser$   r$   r"   r   <lambda>7test_pipe_factories_language_specific.<locals>.<lambda>X  s    6r"   funcc                      g)Nenr$   r$   r"   r   r   r   Y  s    $r"   c                      g)Nder$   r$   r"   r   r   r   Z  s    r"   r   Nr   r   )	r
   rM   r	   r   has_factoryrW   rP   rQ   rR   )rv   rw   r   r   nlp_des        r   %test_pipe_factories_language_specificr   S  s    "E!Eu>2e,/
U.&&&&##E****u%%%%""5))))e$$$$e$$$$
*C??5!#v---	z	" 
#YFe$&$...	z	"5! 
#XFe$&&000e$&$... 
#	" 
#	"s   5G,G=,
G:=
Hc                     [        [        R                  [        5      (       d   e[        R
                  " [        5         S[        R                  S'   SSS5        [        5       n [        U R                  [        5      (       d   e[        U R                  5      (       d   e[        R
                  " [        5         SU R                  S'   SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z\Test that assigning directly to Language.factories is now invalid and
raises a custom error.r   r   N)ru   r
   rO   r   rP   rQ   NotImplementedErrorlenra   s    r   test_language_factories_invalidr  p  s     h((*:;;;;	*	+$)5! 
,
*Ccmm%56666s}}	*	+$e 
,	+ 
,	+
 
,	+s    C=C'
C$'
C5zweights,override,expectedar   bcgQ?)r  r  r  2   d   g{Gz?Q?ffffff?g333333?)r  r        ?)degq=
ףp?皙?(\?)r  r  r  r  r  i,  )r  r  皙?g333333?)r  r  r  r  gq=
ףp?        )r  r  f)r  r  r  r  r  c                 f    [        X5      n[        UR                  5       5      S;   d   eX2:X  d   eg )N)gGz?r   r  )r   sumvalues)weightsoverrideexpectedresults       r   -test_language_factories_combine_score_weightsr  }  s5    L #75Fv}}#3333r"   c                     Sn S nSSS.nSSSS.n[         R                  " U  S	3X!S
9  [         R                  " U  S3X1S
9  [         R                  " U  S	35      nUR                  U:X  d   e[         R                  " U  S35      nUR                  U:X  d   e[        5       n0 UR                  S   S'   UR                  U  S	35        UR                  U  S35        UR                  S   nSSSSSS.nUS   U:X  d   eUR                  R                  5       n	SU	S   S   S'   SU	S   S   S'   [        R                  " U	5      nUR                  S   S   n
SSSSSS.nX:X  d   eUR                  R                  5       n	S U	S   S   S'   [        R                  " U	5      nUR                  S   S   n
S SSSSS.nX:X  d   eg )Ntest_language_factories_scoresc                     S $ )Nc                     U $ r   r$   rL   s    r   r   Btest_language_factories_scores.<locals>.<lambda>.<locals>.<lambda>      r"   r$   r   r   s     r   r   0test_language_factories_scores.<locals>.<lambda>      _r"   r  )a1a2r  r  r  )b1b2b31)default_score_weightsr   2trainingscore_weightsg      ?gffffff?g?)r%  r&  r'  r(  r)  r  r%  g?r)  gQ?r  g?r
  )
r
   r?   rU   r+  _configr@   r>   copyr	   from_config)r   r   weights1weights2meta1meta2r   r0   expected_weightsr>   r.  r  s               r   r  r    s   +D,D%HC0HvQZxKvQZxK%%aj1E&&(222%%aj1E&&(222
*C/1CKK
O,LLD6LLD6
**Z
 C"$cTR#3333ZZ__F03F:'-03F:'-


f
%CJJz*?;MTTJH$$$ZZ__F04F:'-


f
%CJJz*?;M$d$dKH$$$r"   c                     [        5       n U R                  SSS9  [        5       n[        R                  " [        5         UR                  SSS9  SSS5        UR                  SU S9  SUR
                  ;   d   e[        R                  " [        5         UR                  SU S9  SSS5        g! , (       d  f       Nd= f! , (       d  f       g= f)z+Test adding components from a source model.tagger	my_taggerr:   en_core_web_smsourceNcustom)r	   r@   rP   rQ   rR   rS   KeyError)
source_nlpr   s     r   test_pipe_factories_from_sourcer@    s    J{3
)C	z	"[)9: 
#LLZL0#..(((	x	 Xj1 
!	 	 
#	" 
!	 s   B.B?.
B<?
Cc                    ^  " S S[         R                  5      m[        R                  " S5       " U4S jS[         5      5       n [        5       nUR	                  S5        U " 5       nUR	                  SUS9  SUR
                  ;   d   e[        5       nUR	                  SUS9  SUR
                  ;   d   e[        5       nUR                  R                  R                  S5        UR                  R                  R                  S	/ S
QS9  [        R                  " [        5         UR	                  SUS9  S S S 5        g ! , (       d  f       g = f)Nc                   (    \ rS rSr\" SS/5      rSrg)Ptest_pipe_factories_from_source_language_subclass.<locals>.CustomEnglishDefaultsi  r=  stopr$   N)r3   r4   r5   r6   set
stop_wordsr7   r$   r"   r   CustomEnglishDefaultsrC    s    (F+,
r"   rG  	custom_enc                       > \ rS rSrSr Y rSrg)Htest_pipe_factories_from_source_language_subclass.<locals>.CustomEnglishi  rH  r$   N)r3   r4   r5   r6   langDefaultsr7   )rG  s   r   CustomEnglishrJ    s    (r"   rM  r8  r;  )r      cat)r   r      rN  )vector)r	   rL  r   	languagesr@   rS   r   vocabvectorsresizeaddrP   r   r   )rM  r?  r   rG  s      @r   1test_pipe_factories_from_source_language_subclassrW    s   - 0 0 - $) ) %) J! /CLL*L-s~~%%% (CLL*L-s~~%%% )CIIV$II%5	k	"Xj1 
#	"	"s   %D??
Ec                     Sn [         R                  " U SS0S9S[        4S j5       n[        5       nUR	                  S5        UR	                  U SS0S9  [        5       nUR	                  XS	9  XR
                  ;   d   eUR                  U 5      R                  S   S:X  d   eUR                  S
   U    nUS   U :X  d   eUS   S:X  d   eg)zBTest adding components from a source model with custom components.&test_pipe_factories_from_source_customargr   r   c                     S $ )Nc                     U $ r   r$   rL   s    r   r   Ntest_pipe_factories_from_source_custom.<locals>.test_factory.<locals>.<lambda>      3r"   r$   r   r   rZ  s      r   test_factory<test_pipe_factories_from_source_custom.<locals>.test_factory      r"   r8  worldr=   r;  r;   r?   N)	r
   r?   ri   r	   r@   rS   rV   r   r>   )r   r`  r?  r   r>   s        r   rY  rY    s    3DdE7+;<S  = J!eW%56
)CLLL)>>!!!T"11%8GCCCZZ%d+F)$$$%=G###r"   c                     Sn [         R                  " U SS0S9S[        4S j5       n[        5       nUR	                  S5        UR	                  U SSS0S	9  S
SS/S.n[        5        nUR                  U5        SS0[        U5      SS.S.nX5S.n[        R                  " U5      nS S S 5        WR                  SS/:X  d   eUR                  SU S.:X  d   eUR                  S5      nUR                  U :X  d   eUR                  S   S:X  d   eUR                  S   S   n	U	S   U :X  d   eU	S   S:X  d   eg ! , (       d  f       N= f)N&test_pipe_factories_from_source_configrZ  r   r   c                     S $ )Nc                     U $ r   r$   rL   s    r   r   Ntest_pipe_factories_from_source_config.<locals>.test_factory.<locals>.<lambda>  r^  r"   r$   r_  s      r   r`  <test_pipe_factories_from_source_config.<locals>.test_factory  rb  r"   r8  yolorc  )r   r>   r   r   r=  rK  pipeliner?   )r<  rM   )r   r=  r   r;   r;   )r
   r?   ri   r	   r@   r   r-   r1  rS   rT   rV   r   r>   )
r   r`  r?  dest_nlp_cfgtempdirdest_components_cfgdest_configr   metar>   s
             r   re  re  
  so   3DdE7+;<S  = J!65'2BC x.BCL	77# (+!$WFC
 +N!!+. 
 >>h1111H!EEEEX&D<<4u%000ZZ%h/F)$$$%=G### 
s   '?D88
Ec                        \ rS rSrS rS rSrg)PipeFactoriesIdempotenti'  c                     g r   r$   rb   s      r   r     PipeFactoriesIdempotent.__init__(      r"   c                     g r   r$   r%   s     r   r'    PipeFactoriesIdempotent.__call__+  rw  r"   r$   N)r3   r4   r5   r6   r    r'   r7   r$   r"   r   rt  rt  '  s    r"   rt  zi,func,func2c                     S $ )Nc                     U $ r   r$   rL   s    r   r   <lambda>.<locals>.<lambda>2  s    #r"   r$   r"  s     r   r   r   2  s    or"   c                     U $ r   r$   rL   s    r   r   r   2  s    3r"   r   c                 l   SU  3n[        S5       H  n [        R                  " X1S9  M     [        5       nUR                  U5        [        R                  " X1S9  U S3n[        S5       H  n [        R                  " XRS9  M     [        5       nUR                  U5        [        R                  " XRS9  g)zCheck that decorator can be run multiple times if the function is the
same. This is especially relevant for live reloading because we don't
want spaCy to raise an error if a module registering components is reloaded.
)test_pipe_factories_decorator_idempotent_   r   r,  N)ranger
   r?   r@   rM   )ir   func2r   r   rw   s         r   (test_pipe_factories_decorator_idempotentr  /  s     7qc:D1X) 
*CLLT% fAJE1X5- 
*CLLu)r"   c                      Sn S n[         R                  " XS9  SU /S.U SU 00S.n[        R                  " U5      nUR                  U /:X  d   eUR                  U 5      nUSU 0:H    UR                  U    SU 0:X  d   eg)	zvTest that the extra values we temporarily add to component config
blocks/functions are removed and not copied around.
'test_pipe_factories_config_excludes_nlpc                     S $ )Nc                     U $ r   r$   rL   s    r   r   Ktest_pipe_factories_config_excludes_nlp.<locals>.<lambda>.<locals>.<lambda>P  r!  r"   r$   r"  s     r   r   9test_pipe_factories_config_excludes_nlp.<locals>.<lambda>P  r$  r"   r   r   rk  r?   rm  N)r
   r?   r	   r1  rS   r   r   )r   r   r>   r   pipe_cfgs        r   r  r  K  s     5D,DT%4&1i./F 

f
%C>>dV###""4(HD!!T"y$&7777r"   )3rP   pydantic.v1r   r   ImportErrorpydantic	thinc.apir   r   r   rA   spacy.lang.der   spacy.lang.enr	   spacy.languager
   spacy.pipeline.tok2vecr   spacy.tokensr   
spacy.utilr   r   r   utilr   markissuer   rY   ry   r   r   r   r   r   r   r   r   r  parametrizer  r  r@  rW  rY  re  rt  r  r  r$   r"   r   <module>r     s   .0 ; :    ! # 8  H H  4F F<,&.R6!r"6 )F)*X(76/:
% *sCj3*	-rDt3TU*sBi#s	,b4d2STS!C:Ss/CDSt$TB	
 S!"#56Cc4	

 #
c
	+Rt$1GH#
	3S%9:#
c
	+c3Zs9MN#
c
	+Rs31OP#
c
	+Rs31OPS!C:.#JCc*	
 Ss56C Cc4	
 Ss56Cc*Cc#>	
9!$JK$J %F
22<$($:  	
-?	
#%<T4%HI***8M  .--.s   G GG