
    i.<                     n   d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZ d dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/ ddlm0Z0m1Z1 ejd                  d        Z3ejh                  jk                  d      d        Z6ejh                  jk                  d      d        Z7ejh                  jq                  dddg      d        Z9ejh                  jq                  dddg      d        Z:ejh                  jq                  ddg      d         Z;dmd%Z<d& Z=d' Z>d( Z?d) Z@d* ZAejh                  jq                  d+eed,fed-e d,fd.d/d0d1d2d3d4g	      d5        ZBejh                  jq                  d6g d7      d8        ZCejh                  jq                  d9g d:      d;        ZDejh                  jq                  d<d,d,d=d>d,d?d,id@ifdAdBdCdDdAdEdBidFifdGdHidIdJdKdHiiifg      dL        ZEejh                  jq                  d<d,d,d=d>d,d?d,id@ifdAdBdCdDdAdEdBidFifdMdKdHiidIdJdKdHiiifg      dN        ZFdO ZGejh                  jq                  dPg dQd#gfg dRd!gfg dSd#d$gfg dTd"gfg dUd"gfg dVd#d#gfg dWd#d#gfg dXg dYfg dZd#gfg d[d!gfg d\d$d$gfg d]d$d$gfg      d^        ZHejh                  jq                  dPg d_dd$gfg d`dd!gfg dUdd"gfg dag dbfg dcdd$gfg ddg defg      df        ZIdg ZJdh ZKdi ZLdj ZMdk ZNdl ZOy)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                      	 t        j                         dk(  } | S # t        $ r/ t        j                  j
                  j                         dk7  } Y | S w xY w)z/Determine if the tests are run as admin or not.r   )osgetuidAttributeErrorctypeswindllshell32IsUserAnAdmin)admins    f/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/spacy/tests/test_misc.pyis_adminr/   )   sQ    ;		q  L  ;%%335:L;s    4AAi?  c                      | d      }|d d }|dd }|dd }t        j                  |||f      }||v sJ ||vsJ ||v sJ y )Nz zero one two three four five six               )r   filter_spans)en_tokenizerdocs1s2s3results         r.   test_issue6207r=   4   sl    
9
:C 
RaB	QqB	QqBB|,F<<V<<    ir  c                      t        t               g       t        j                  t              5  t        g        ddd       y# 1 sw Y   yxY w)z=Test that the non-empty constraint pattern field is respected)patternN)r   r   pytestraisesr    r>   r.   test_issue6258rD   C   s<     /0 
	' '2&' ' 's   AAtextzhello/worldzhello worldc                 R    t        j                  |       }t        |t              sJ y N)r   ensure_path
isinstancer   )rE   paths     r.   test_util_ensure_path_succeedsrK   N   s"    D!DdD!!!r>   zpackage,result)numpyT)sfkodskfosdkfpsdpofkspdofFc                 6    t        j                  |       |u sJ y)zHTest that an installed package via pip is recognised by util.is_package.N)r   
is_package)packager<   s     r.   test_util_is_packagerQ   T   s    
 ??7#v---r>   rP   thincc                 R    t        j                  |       }t        |t              sJ y)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   \   s$       )DdD!!!r>   r1   r4   r2      c                    t        | |||      j                         }|j                  d      j                  || ||fk(  sJ |j                  j                  d|f      }|j                  |      \  }}|j                  |j                  d   dz   || |fk(  sJ |j                  j                  d| |f      }|j                  j                  d|f      }	d|	d<   d|d<   |j                  d	      rJ t        |||	      }
|
d
   dk(  sJ |	j                  d       |j                  d       d|d<   d|	d<   d|	d<   d|	d<   d|d<   d|	d<   d|d<   t        |||	      }
|
d   dk(  sJ |
d   dk(  sJ |
d
   dk(  sJ y )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   c   s   2";FFHE??3%%"b"b)9999YY__b"X&F""6*IAv77v||A*BB7777	"b"	&B
))//2r(
#CCIBqE~~e$$$25"cBE###HHSMGGCLBqECICICIBqECIBqE25"cBE!!!!!!!!!r>   c                      t               } t        r&t               sJ t        t               t              s:J t
        r&t               sJ t        t               t              sJ t               rJ t        |        y rG   )r   r   r   rI   r   r   r   r   current_opss    r.   test_prefer_gpurv      s]    !#K||/+W555	||/+V444<K r>   c                      t               } t        r$t                t        t               t              s,J t
        r$t                t        t               t              sJ t        |        y rG   )r   r   r   rI   r   r   r   r   rt   s    r.   test_require_gpurx      sH    !#K/+W555	/+V444K r>   c                  0   t               } t                t        t               t              sJ 	 dd l}t                t        t               t              sJ 	 t                t        t               t              sJ t        |        y # t        $ r Y ;w xY w)Nr   )	r   r   rI   r	   cupyr   r   ImportErrorr   )ru   rz   s     r.   test_require_cpur|      sx    !#KMo'222/+W555 Mo'222K 	  s   (B	 		BBc                      t        t              j                  j                  } | j                  d      D ]/  }t	        d |j
                  D              r J |j
                          y)z{Test that all filenames in the project are ASCII.
    See: https://twitter.com/_inesmontani/status/1177941471632211968
    z**/*c              3   8   K   | ]  }t        |      d k    yw)   N)ord).0cs     r.   	<genexpr>z'test_ascii_filenames.<locals>.<genexpr>   s     3A3q6C<3s   N)r   __file__parentgloballname)rootrJ   s     r.   test_ascii_filenamesr      sR     >  ''D		&! ?333>TYY>3?r>   c                  ~   t        j                  d      } | j                  dk(  sJ | j                  g k(  sJ t	        j
                  t              5  t        j                  d       ddd       t	        j
                  t              5  t        j                  d       ddd       y# 1 sw Y   AxY w# 1 sw Y   yxY w)z`Test 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'B3'B03B<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                 8    t        j                  | |      |u sJ y rG   )r   is_compatible_version)version
constraint
compatibles      r.   test_is_compatible_versionr      s     %%gz: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                 6    t        j                  |       |u sJ y 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                     t        j                  |       |k(  sJ t        j                  |      |k(  sJ t        j                  | |      |u sJ t        j                  ||      |u sJ y rG   )r   get_minor_versionis_minor_version_match)a1a2b1b2is_matchs        r.   test_minor_versionr      sl     !!"%+++!!"%+++&&r2.(:::&&r2.(:::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                 p    t        j                  |       }||k(  sJ t        j                  |      | k(  sJ y rG   r   dot_to_dictdict_to_dotdot_notationr   r<   s      r.   test_dot_to_dictr      s;    $ l+FXF#|333r>   zattribute_ruler.scorerc                 t    t        j                  |       }||k(  sJ t        j                  |d      | k(  sJ y )NT)for_overridesr   r   s      r.   test_dot_to_dict_overridesr     s=    $ l+FXF$7<GGGr>   c                     dddiddddiid} t        j                  t              5  t        j                  | d	d
       d d d        t        j                  t              5  t        j                  | dd
       d d d        t        j                  t              5  t        j                  | dd
       d d d        t        j                  | dd
       | d   d   d
k(  sJ t        j                  | dddi       | d   d   d   d   dk(  sJ | d   d   d   dk(  sJ t        j                  | dd       | d   dk(  sJ t        j                  | dd       t        |       dddk(  sJ y # 1 sw Y   (xY w# 1 sw Y   xY w# 1 sw Y   xY w)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   "  s   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#   E&!E3E?&E03E<?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           	      2   | D cg c]  }t        |       }}d}d}t        t        |||d            }|D cg c]  }t        |       c}|k(  sJ |||z  z   }|D ])  }t	        |D 	cg c]  }	t        |	       c}	      |k  r)J  y c c}w c c}w c c}	w )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   5  s    $ 6??N8$?D?
CJ4jCRVWG %,,5CJ,0@@@@J,,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                     | D cg c]  }t        |       }}d}d}t        t        |||d            }|D cg c]  }t        |       c}|k(  sJ yc c}w c c}w )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   T  sj     6??N8$?D?
CJ4jCRWXG %,,5CJ,0@@@@ @ -s
   AAc                     d} t               j                  |       }t        j                  |d      }t               j	                  t
              }d|d   d<   t        j                  |d      }t        |t              sJ t        |t              sJ |j                  g k(  sJ |j                  dgk(  sJ |j                  d      j                  j                  d   d	u sJ |j                  d   d
   dgk(  sJ |j                  d   d
   g k(  sJ t        j                  t               5  t#        |j                  d       d d d        t        j                  t               5  t#        |j                  d       d d d        t        j$                  j'                  |j                  d   t(              }t        t#        d|id      t*              sJ y # 1 sw Y   xY w# 1 sw Y   fxY w)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  j  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< <= =s   *G"GGG'c                     t        ddg      } | ddgk(  sJ | j                  d      dk(  sJ t        j                  t              5  | j                  d       d d d        t        j                  t              5  | j                          d d d        t        j                  t              5  | j                  dg       d d d        t        j                  t              5  | j                          d d d        t        ddgd      } t        j                  t              5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)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;9E+EE E+;EEEE(+E4c                  j   dddiidddd} t        j                  | dg      }t        |d   t              sJ t	        j
                  t              5 }t        j                  | ddg       d d d        j                  j                  }t        |      d	k(  sJ |d   d
   ddgk(  sJ y # 1 sw Y   ?xY w)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+++	,	- Ov8L'MNOWW^^Fv;!!9U
E2222	O Os   B))B2c                     d} t               5 }t        j                  j                  |d      }t	        |d      5 }|j                  |        d d d        t        d|       ddddd	iiii}t        j                  |      }|j                  d       |j                          d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)
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#   -B5B)AB5)B2	.B55B>c                     t        d      dk(  sJ t        d       dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d	      dk(  sJ t        d
      dk(  sJ t        dd
g      dk(  sJ y )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                  "   d} d}t        ||       |k(  sJ d       ddlm}m}  || ||      5 }t	        j
                  t        d      5  t        || d	      }d d d        |d
z   k(  sJ d       	 d d d        y # 1 sw Y   "xY w# 1 sw Y   y xY w)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_portr3    s    DDtT*d2J4JJ2;	T4	* ?e\\+-=> 	K,T4TJJ	KTAX%>'>>%? ?	K 	K? ?s#   B	A9B9B	>BB)r1   r4   r2   rV   )Pr)   r&   pathlibr   rA   pydanticr   	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&  r3  rC   r>   r.   <module>rF     sn    	   $	 	 	 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@/
?r>   