
    h<                        S SK r S SKrS SKJr  S SKr S SK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Jr  S SKJrJrJr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%  S SK&J'r'J(r(J)r)  S SK*J+r+  S SK,J-r-J.r.J/r/J0r0J1r1  SSKJ2r2J3r3  \Rh                  S 5       r5\Rl                  Ro                  S5      S 5       r8\Rl                  Ro                  S5      S 5       r9\Rl                  Ru                  SSS/5      S 5       r;\Rl                  Ru                  SSS/5      S 5       r<\Rl                  Ru                  SS/5      S  5       r=SmS% jr>S& r?S' r@S( rAS) rBS* rC\Rl                  Ru                  S+\\S,4\S-\ 3S,4S.S/S0S1S2S3S4/	5      S5 5       rD\Rl                  Ru                  S6/ S7Q5      S8 5       rE\Rl                  Ru                  S9/ S:Q5      S; 5       rF\Rl                  Ru                  S<S,S,S=.S>S,S?S,0S@.04SASBSC.SDSASESB0SF.04SGSH0SISJSKSH0004/5      SL 5       rG\Rl                  Ru                  S<S,S,S=.S>S,S?S,0S@.04SASBSC.SDSASESB0SF.04SMSKSH00SISJSKSH0004/5      SN 5       rHSO rI\Rl                  Ru                  SP/ SQQS#/4/ SRQS!/4/ SSQS#S$/4/ STQS"/4/ SUQS"/4/ SVQS#S#/4/ SWQS#S#/4/ SXQ/ SYQ4/ SZQS#/4/ S[QS!/4/ S\QS$S$/4/ S]QS$S$/4/5      S^ 5       rJ\Rl                  Ru                  SP/ S_QSS$/4/ S`QSS!/4/ SUQSS"/4/ SaQ/ SbQ4/ ScQSS$/4/ SdQ/ SeQ4/5      Sf 5       rKSg rLSh rMSi rNSj rOSk rPSl rQg! \ a
    S SKJr   GN.f = f)n    N)Path)ValidationError)ConfigConfigValidationErrorCupyOpsMPSOpsNumpyOps	Optimizerget_current_opsset_current_ops)has_cupy_gpuhas_torch_mps_gpu)
prefer_gpurequire_cpurequire_gpuutil)__version__)English)Dutch)DEFAULT_CONFIG_PATH)PrecomputableAffine&_backprop_precomputable_affine_padding)ConfigSchemaTrainingTokenPatternTokenPatternSchema)minibatch_by_words)SimpleFrozenListdot_to_objectfind_available_portimport_fileto_ternary_int   )get_random_docmake_tempdirc                       [         R                  " 5       S:H  n U $ ! [         a/    [        R                  R
                  R                  5       S:g  n  U $ f = f)z/Determine if the tests are run as admin or not.r   )osgetuidAttributeErrorctypeswindllshell32IsUserAnAdmin)admins    O/home/james-whalen/.local/lib/python3.13/site-packages/spacy/tests/test_misc.pyis_adminr/   .   sQ    ;		q  L  ;%%335:L;s    5AAi?  c                     U " S5      nUS S nUSS nUSS n[         R                  " X#U45      nX%;   d   eX5;  d   eXE;   d   eg )Nz zero one two three four five six               )r   filter_spans)en_tokenizerdocs1s2s3results         r.   test_issue6207r=   9   sd    
9
:C 
RaB	QqB	QqB|,F<<<<    ir  c                      [        [        5       /S9  [        R                  " [        5         [        / S9  SSS5        g! , (       d  f       g= f)z=Test that the non-empty constraint pattern field is respected)patternN)r   r   pytestraisesr    r>   r.   test_issue6258rD   H   s3     /0 
	'2& 
(	'	's   
A  
Atextzhello/worldzhello worldc                 ^    [         R                  " U 5      n[        U[        5      (       d   eg N)r   ensure_path
isinstancer   )rE   paths     r.   test_util_ensure_path_succeedsrK   S   s%    D!DdD!!!!r>   zpackage,result)numpyT)sfkodskfosdkfpsdpofkspdofFc                 :    [         R                  " U 5      UL d   eg)zHTest that an installed package via pip is recognised by util.is_package.N)r   
is_package)packager<   s     r.   test_util_is_packagerQ   Y   s    
 ??7#v---r>   rP   thincc                 ^    [         R                  " U 5      n[        U[        5      (       d   eg)z7Test that a Path object is returned for a package name.N)r   get_package_pathrI   r   )rP   rJ   s     r.   test_util_get_package_pathrU   a   s'       )DdD!!!!r>   r1   r4   r2      c                    [        XX#S9R                  5       nUR                  S5      R                  X X14:X  d   eUR                  R                  SU45      nUR                  U5      u  pgUR                  UR                  S   S-   X U4:X  d   eUR                  R                  SX45      nUR                  R                  SU45      n	SU	S'   SUS'   UR                  S	5      (       a   e[        XHU	5      n
U
S
   S:X  d   eU	R                  S5        UR                  S5        SUS'   SU	S'   SU	S'   SU	S'   SUS'   SU	S'   SUS'   [        XHU	5      n
U
S   S:X  d   eU
S   S:X  d   eU
S
   S:X  d   eg )N)nOnInFnPW
   r   r"      )r"   rV   pad)r   rV   r   r         ?        )r"   r"   )r"   r   )rV   r   r4   rV   )r   r   r   r   r3   )r   r"   r   r   )
r   
initialize	get_paramshapeopsallocbegin_updatehas_gradr   fill)rX   rY   rZ   r[   modeltensorYget_dXdYidsd_pads              r.   test_PrecomputableAffinerr   h   s   2;FFHE??3%%"")9999YY__b"X&F""6*IA77v||A*BB7777	"b	&B
))//2r(
#CCIBqE~~e$$$$25cBE###HHSMGGCLBqECICICIBqECIBqE25cBE!!!!!!!!!r>   c                  @   [        5       n [        (       a1  [        5       (       d   e[        [        5       [        5      (       d   eOM[
        (       a1  [        5       (       d   e[        [        5       [        5      (       d   eO[        5       (       a   e[        U 5        g rG   )r   r   r   rI   r   r   r   r   current_opss    r.   test_prefer_gpurv      sn    !#K||||/+W5555		|||/+V4444<<K r>   c                      [        5       n [        (       a*  [        5         [        [        5       [        5      (       d   eO4[
        (       a)  [        5         [        [        5       [        5      (       d   e[        U 5        g rG   )r   r   r   rI   r   r   r   r   rt   s    r.   test_require_gpurx      sS    !#K|/+W5555		/+V4444K r>   c                  P   [        5       n [        5         [        [        5       [        5      (       d   e SS Kn[        5         [        [        5       [        5      (       d   e [        5         [        [        5       [        5      (       d   e[        U 5        g ! [         a     NAf = f)Nr   )	r   r   rI   r	   cupyr   r   ImportErrorr   )ru   rz   s     r.   test_require_cpur|      s    !#KMo'2222/+W5555 Mo'2222K 	  s   -B 
B%$B%c                      [        [        5      R                  R                  n U R                  S5       H5  n[	        S UR
                   5       5      (       a  M&   UR
                  5       e   g)zsTest that all filenames in the project are ASCII.
See: https://twitter.com/_inesmontani/status/1177941471632211968
z**/*c              3   >   #    U  H  n[        U5      S :  v   M     g7f)   N)ord).0cs     r.   	<genexpr>'test_ascii_filenames.<locals>.<genexpr>   s     3A3q6C<s   N)r   __file__parentgloballname)rootrJ   s     r.   test_ascii_filenamesr      sP     >  ''D		&!3333>TYY>3 "r>   c                     [         R                  " S5      n U R                  S:X  d   eU R                  / :X  d   e[        R
                  " [        5         [         R                  " S5        SSS5        [        R
                  " [        5         [         R                  " S5        SSS5        g! , (       d  f       NH= f! , (       d  f       g= f)zXTest that using a model name like "blank:en" works as a shortcut for
spacy.blank("en").
zblank:enenz	blank:zxxNzblank:fjsfijsdof)r   
load_modellangpipelinerA   rB   r{   )nlps    r.   test_load_model_blank_shortcutr      s     //*
%C88t<<2 
{	#$ 
$ 
{	#*+ 
$	#	 
$	# 
$	#s   B.B?.
B<?
Czversion,constraint,compatibleTz>=)3.0.0z2.0.0F)3.2.1z>=2.0.0T)z2.2.10a1z>=1.0.0,<2.1.1F)z
3.0.0.dev3>=1.2.3,<4.5.6T)n/ar   N)z1.2.3r   N)r   r   Nc                 :    [         R                  " X5      UL d   eg rG   )r   is_compatible_version)version
constraint
compatibles      r.   test_is_compatible_versionr      s     %%g:jHHHr>   zconstraint,expected)	)r   F)z==3.0.0F)z>=2.3.0T)z>2.0.0T)z<=2.0.0T)z>2.0.0,<3.0.0F)z>=2.0.0,<3.0.0F)z!=1.1,>=1.0,~=1.0T)r   Nc                 :    [         R                  " U 5      UL d   eg rG   )r   is_unconstrained_version)r   expecteds     r.   test_is_unconstrained_versionr      s     ((4@@@r>   za1,a2,b1,b2,is_match))r   3.0z3.0.1r   T)z3.1.0z3.1r   z3.2F)xxxNz
1.2.3.dev0z1.2Fc                     [         R                  " U 5      U:X  d   e[         R                  " U5      U:X  d   e[         R                  " X5      UL d   e[         R                  " X5      UL d   eg rG   )r   get_minor_versionis_minor_version_match)a1a2b1b2is_matchs        r.   test_minor_versionr      sh     !!"%+++!!"%+++&&r.(:::&&r.(:::r>   zdot_notation,expected)z	token.posztoken._.xyztokenxyz)pos_r   g{Gz?)ztraining.batch_sizeztraining.optimizer.learn_ratetraining
learn_rate)
batch_size	optimizerzattribute_ruler.scorer.@scorerszspacy.tagger_scorer.v1attribute_rulerscorerz@scorersc                 v    [         R                  " U 5      nX!:X  d   e[         R                  " U5      U :X  d   eg rG   r   dot_to_dictdict_to_dotdot_notationr   r<   s      r.   test_dot_to_dictr      s9    $ l+FF#|333r>   zattribute_ruler.scorerc                 t    [         R                  " U 5      nX!:X  d   e[         R                  " USS9U :X  d   eg )NT)for_overridesr   r   s      r.   test_dot_to_dict_overridesr     s;    $ l+FF$7<GGGr>   c                  T   SSS0S.SSS00S.n [         R                  " [        5         [        R                  " U S	S
5        S S S 5        [         R                  " [        5         [        R                  " U SS
5        S S S 5        [         R                  " [        5         [        R                  " U SS
5        S S S 5        [        R                  " U SS
5        U S   S   S
:X  d   e[        R                  " U SSS05        U S   S   S   S   S:X  d   eU S   S   S   S:X  d   e[        R                  " U SS5        U S   S:X  d   e[        R                  " U SS5        [        U 5      SSS.:X  d   eg ! , (       d  f       GN:= f! , (       d  f       GN= f! , (       d  f       N= f)Nr"   xybarbazabr   )footestzfoo.bar.bazd   zhello.worldz
test.a.b.czfoo.barr   r   z	foo.baz.xhelloworldr   r   {   )rA   rB   KeyErrorr   set_dot_to_objectdict)configs    r.   test_set_dot_to_objectr   '  sh   Sz2S3*<MNF	x	 v}c: 
!	x	 v}c: 
!	x	 v|S9 
!69c2%=3&&&6;'0BC%=$W-888&>#s#s***65#.%=C6673<38888 
!	 	 	 	 	 s#   E5$FF5
F
F
F'zdoc_sizes, expected_batches)  r      )r   r   r   r2   )r   r   r   r2      )r   r   r   r2   r"   )r   r   r   r2   r"   i  )r   r   r   r2   r"   r   )r   r   r   r2   r"     )r   r   r   r2   r"   r   r   )r2   rV   r"   r"   )r"   rV   r   )r"   rV   r   r"   )r"   r   r   r"   )r"   r   r   r"   c           	      B   U  Vs/ s H  n[        U5      PM     nnSnSn[        [        X5USS95      nU Vs/ s H  n[        U5      PM     snU:X  d   eXUU-  -   nU H.  n[	        U V	s/ s H  n	[        U	5      PM     sn	5      U:  a  M.   e   g s  snf s  snf s  sn	f )N皙?  Tsize	tolerancediscard_oversize)r#   listr   lensum)
	doc_sizesexpected_batchesdoc_sizedocstolr   batchesbatchmax_sizer8   s
             r.   test_util_minibatchr   :  s    $ 6??YN8$YD?
CJ4CRVWG %,,G5CJG,0@@@@,,H.CH./(:::  @ - /s   BB+B
)r   i  r   )r   r   r     r   )r   r   r   r     r   r   )r"   r"   r2   rV   )r"   rV   i'  )r   r"   r   r"   r"   r"   r   )r"   r"   r"   r1   c           	          U  Vs/ s H  n[        U5      PM     nnSnSn[        [        X5USS95      nU Vs/ s H  n[        U5      PM     snU:X  d   egs  snf s  snf )z=Test that oversized documents are returned in their own batchr   r   Fr   N)r#   r   r   r   )r   r   r   r   r   r   r   r   s           r.   test_util_minibatch_oversizer   Y  sm     6??YN8$YD?
CJ4CRWXG %,,G5CJG,0@@@@ @ -s
   AAc                     Sn [        5       R                  U 5      n[        R                  " USS9n[        5       R	                  [
        5      nSUS   S'   [        R                  " USS9n[        U[        5      (       d   e[        U[        5      (       d   eUR                  / :X  d   eUR                  S/:X  d   eUR                  S5      R                  R                  S   S	L d   eUR                  S   S
   S/:X  d   eUR                  S   S
   / :X  d   e[        R                  " [         5         [#        UR                  S5        S S S 5        [        R                  " [         5         [#        UR                  S5        S S S 5        [        R$                  R'                  UR                  S   [(        S9n[        [#        SU0S5      [*        5      (       d   eg ! , (       d  f       N= f! , (       d  f       Nr= f)Na)  
    [nlp]
    lang = "en"
    pipeline = ["textcat"]

    [components]

    [components.textcat]
    factory = "textcat"

    [components.textcat.model]
    @architectures = "spacy.TextCatBOW.v3"
    exclusive_classes = true
    length = 262144
    ngram_size = 1
    no_output_layer = false
    T)	auto_fillnlr   r   textcatmulti_labelFr   znlp.pipeline.taggerznlp.unknownattributer   )schematraining.optimizer)r   from_strr   load_model_from_config	from_diskr   rI   r   r   
pipe_namesget_piperk   attrsr   rA   rB   r   r   registryresolver   r
   )
cfg_string
nlp_configen_nlpdefault_confignl_nlpTs         r.   test_util_dot_sectionr  o  s   J" "":.J((tDFX''(;<N$(N5&!((4HFfg&&&&fe$$$$"""+++??9%++11-@EIII==
+	{:::==
+r111	x	 fmm%:; 
!	x	 fmm%;< 
!fmmJ7@TUAmZO5IJIVVVV 
!	 	 	 s   6G!/G2!
G/2
H c                  (   [        SS/5      n U SS/:X  d   eU R                  S5      S:X  d   e[        R                  " [        5         U R                  S5        S S S 5        [        R                  " [        5         U R                  5         S S S 5        [        R                  " [        5         U R                  S/5        S S S 5        [        R                  " [        5         U R                  5         S S S 5        [        SS/SS9n [        R                  " [        5         U R                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r"   r   zError!)error)	r   indexrA   rB   NotImplementedErrorappendsortextendpop)ts    r.   test_simple_frozen_listr    s   %(A775>Q	*	+	 
,	*	+	 
,	*	+	% 
,	*	+	 
,%x8A	*	+	 
,	+ 
,	+	+	+	+	+	+	+ 
,	+s<   	D?=E0E!%E2$F?
E
E!
E/2
F 
Fc                     SSS00SSS.S.n [         R                  " U S/5      n[        US   [        5      (       d   e[        R
                  " [        5       n[         R                  " U SS/5        S S S 5        WR                  R                  n[        U5      S	:X  d   eUS   S
   SS/:X  d   eg ! , (       d  f       NF= f)Nr   z@optimizerszAdam.v1r   ztraining.xyzr   )r   r   r   r"   locr   r   )
r   resolve_dot_namesrI   r
   rA   rB   r   valueerrorsr   )r   r<   er  s       r.   test_resolve_dot_namesr    s     =)"<=+NCF ##F-A,BCFfQi++++	,	-v8L'MN 
.WW^^Fv;!!9U
E2222	 
.	-s   B33
Cc                     Sn [        5        n[        R                  R                  US5      n[	        US5       nUR                  U 5        S S S 5        [        SU5        SSSSS	0000n[        R                  " U5      nUR                  S5        UR                  5         S S S 5        g ! , (       d  f       Nd= f! , (       d  f       g = f)
NaG  
from spacy import Language

class DummyComponent:
    def __init__(self, vocab, name):
        pass

    def initialize(self, get_examples, *, nlp, dummy_param: int):
        pass

@Language.factory(
    "dummy_component",
)
def make_dummy_component(
    nlp: Language, name: str
):
    return DummyComponent(nlp.vocab, name)
zcode.pywpython_coderc   
componentsdummy_componentdummy_paramr"   )r$   r&   rJ   joinopenwriter    r   from_configadd_piperc   )code_strtemp_dir	code_pathfilehr   r   s         r.   test_import_coder$    s    H& 
8GGLL95	)S!UKK! " 	M9-0AMSTCU/V WX!!&)&' 
!! 
s#   -B;B*AB;*
B8	4B;;
C	c                     [        S5      S:X  d   e[        S 5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S5      S:X  d   e[        S	5      S:X  d   e[        S
5      S:X  d   e[        SS
/5      S:X  d   eg )NTr"   r   Fr_   ra   rb   r4   istring)r!   rC   r>   r.   test_to_ternary_intr'    s    $1$$$$1$$$% B&&&!!!!#!###!!!!#!###"###!"""#"$$$(#r)))1h-(B...r>   c                  *   Sn Sn[        X5      U:X  d   S5       eSSKJnJn  U" XU5       n[        R
                  " [        SS9   [        XSS	9nS S S 5        WUS
-   :X  d   S5       e S S S 5        g ! , (       d  f       N(= f! , (       d  f       g = f)Nz0.0.0.0i  zPort 5001 isn't freer   )demo_appmake_serverzalready in use)matchT)auto_selectr"   zDidn't find next port)r   wsgiref.simple_serverr)  r*  rA   warnsUserWarning)hostportr)  r*  httpd
found_ports         r.   test_find_available_portr4    s    DDt*d2J4JJ2;	T	*e\\+-=>,TTJJ ?TAX%>'>>% 
+	*>> 
+	*s#   BA3B3
B	=B
B)r1   r4   r2   rV   )Rr)   r&   pathlibr   rA   pydantic.v1r   r{   pydantic	thinc.apir   r   r   r   r	   r
   r   r   thinc.compatr   r   spacyr   r   r   r   spacy.aboutr   spacy_versionspacy.lang.enr   spacy.lang.nlr   spacy.languager   spacy.ml._precomputable_affiner   r   spacy.schemasr   r   r   spacy.training.batchersr   
spacy.utilr   r   r   r    r!   r#   r$   fixturer/   markissuer=   rD   parametrizerK   rQ   rU   rr   rv   rx   r|   r   r   r   r   r   r   r   r   r   r   r  r  r  r$  r'  r4  rC   r>   r.   <module>rH     s    	  )+	 	 	 9 < < 4 !  . Q P 6  /   4  4' ' -!?@" A"
 (LM..
 WI." /""8
!!! ?," #	t,	"]O,d3!"-.'
II 
AA ;;  t4d%78	

 %($O<:NOP	

 /0HIJ8P+Q RS	
"4#"4  t4d%78	

 %($O<:NOP	

 &
4L'MNJ8P+Q RS	
"H#"H9& !	1#	aS!	 1a&)	$	$qc*	#aV,	#aV,	(,7	qc	!	Aq6"	Aq6"";#"; !	Aq6"	#aV,	$q!f-	.=	1v	'6
A
A'WT"3@/
?}  )(()s   L9 9M	M	