
    h                        S SK r S SKrS SK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JrJr  SSKJr  \ /r S SKr\R)                  \5        \R,                  R/                  S\ R0                  " S	5      S
4\ R2                  " S5      S 4\ R2                  " SS/5      S4\ R0                  " S5      \ R0                  " S5      /S4\" \ R0                  " S5      \ R0                  " S5      5      S4\" \ R0                  " S5      \ R0                  " S5      \ R2                  " SS /5      \ R2                  " S S/5      5      S4/ S 4/5      S 5       r\R,                  R/                  SSSS\ R2                  " S 5      0/5      S 5       r\R,                  R/                  S\5      S 5       r\" \R:                  " SSSS9S9S 5       rS rg! \ a     GNf = f)    N)given)PaddedRagged	get_width)
ArgsKwargs)convert_recursiveget_array_moduleis_cupy_arrayis_numpy_arrayto_categorical   )
strategiesz	obj,width)r            r   r   r   r   r   )r   r   r   c                 &    [        U 5      U:X  d   eg N)r   )objwidths     O/home/james-whalen/.local/lib/python3.13/site-packages/thinc/tests/test_util.pytest_get_widthr      s    * S>U"""    r   i  fooac                     [         R                  " [        5         [        U 5        S S S 5        g ! , (       d  f       g = fr   )pytestraises
ValueErrorr   r   s    r   test_get_width_failr!   2   s!    	z	"# 
#	"	"s   0
>xpc                 p   Sn[         R                  " [        US9   [        S5        S S S 5        U R	                  S5      n[        U5      nX0:X  d   eU [
        :X  a%  [        U5      (       d   e[        S5      (       a   eg [        U5      (       d   e[        S5      (       a   eg ! , (       d  f       N= f)NzOnly numpy and cupy arrays are supported, but found <class 'int'> instead. If get_array_module module wasn't called directly, this might indicate a bug in Thinc.matchr   r   )r   r   r   r	   zerosnumpyr   r
   )r"   errorr&   xp_s       r   !test_array_module_cpu_gpu_helpersr*   8   s    	8 
 
z	/ 
0HHVE
5
!C99	U{e$$$$!&)))))U#### ((((( 
0	/s   B''
B5g        g      ?T)	min_value	max_valueexclude_maxlabel_smoothingc           
      
   [        [        R                  " SS/SS95      nUR                  S:X  d   eSn/ SQnSU4SU4S	SU4SS	SU4SSU4SSSU4/nU Vs/ s H#  n[        R                  R                  S
X%5      PM%     nnU Vs/ s H  n[        Xr5      PM     nnU Vs/ s H  n[        XrU S9PM     n	n[        [        U5      5       GH  n
Xj   nX   nXJ   nX   nUR                  U:X  d   eUR                  U:X  d   e[        R                  " XR                  [        5      5      (       d   e[        R                  " UR                  SS9S:H  5      (       d   e[        R                  " [        R                  " US5      R                  UR                  5      U:H  5      (       d   e[        R                  " UR                  SS9UR                  SS9:H  5      (       d   e[        R                  " [        R                  " [        R                  " USS9S5      5      (       d   e[        R                  " [        R                   " U5      SU -
  5      (       d   e[        R                  " [        R"                  " U5      XR                  S   S-
  -  5      (       a  GM   e   [        R$                  R'                  [        [        R                  " / SQ5      S5      S/S/S//5        [        R$                  R'                  [        [        R                  " / SQ5      5      S/S/S//5        [(        R*                  " [,        SS9   [        [        R                  " / SQ5      S
5        S S S 5        [        R$                  R'                  [        [        R                  " / SQ5      SSS9SS/SS/SS//5        [        R$                  R'                  [        [        R                  " / SQ5      SS9SS/SS/SS//5        [(        R*                  " [,        SS9   [        [        R                  " / SQ5      SSS94  S S S 5        [(        R*                  " [,        SS9   [        [        R                  " / SQ5      SS94  S S S 5        [(        R*                  " [,        SS9   [        [        R                  " / SQ5      SS9  S S S 5        [(        R*                  " [,        SS9   [        [        R                  " / SQ5      SS9  S S S 5        g s  snf s  snf s  snf ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   i)dtype)r   r      ))r   )r   )r   r   )r3   r   r   )r   r   )r   r   r   r   r   r   r.   )axisg      ?)r   r   r   zn_classes should be at least 1r$   )r   r   r   g{Gz?gGz?z:n_classes should be greater than 1.*label smoothing.*but 1zlabel_smoothing parameter)r   r   r   r   r   g?g)\(?)r   r'   asarrayshaperandomrandintrangelenarray_equalastypeboolallsumargmaxreshapeisclosemaxmintestingassert_allcloser   r   r   )r/   one_hotncshapesexpected_shapesr7   labelslabelone_hotssmoothsr1   expected_shapesmooths                r   test_to_categoricalrR   M   su   
 U]]Aq6=>G==F""" 
B?F	
B	
B	
Ar
	
Aq"	
Ar
	
Aq"O ?EEfUell""1b0fFE7=>veu)vH>PVPVuu/BPV   3'(	+(+}}...||~---  ..*>????yy"-23333yygr2::5;;G5PQQQQyyB/7>>r>3JJKKKKyyuyyb'A3GHHHH}}UYYv.O0CDDDD}}IIf,,r2BQ2FG
 
 	
 
 )$ 
MM!!u}}Y/3secUSE5J 
MM!!u}}Y/0C53%#2G 
z)J	Ku}}Y/3 
L 
MM!!u}}Y/DI
d|dD\2 
MM!!u}}Y/F
d|dD\2 
W
 	u}}Y/DIJ
 
W
 	u}}Y/FG

 
z)E	Fu}}_5sK 
G 
z)E	Fu}}_5tL 
G	Fk F>6 
L	K
 

 

 
G	F 
G	FsN   *TT"T #T%##T7'"U*!U,!U*%
T47
U
U
U'*
U8c                  >   S n S nSSSSSSS./S.00n[        XU5      nUS   S	   S
   S:X  d   eUS   S	   S   SSSS./:X  d   eS[        SSS0/4SSS/05      0n[        XU5      nUS   R                  SSS0/4:X  d   eUS   R                  SSS/0:X  d   eg )Nc                     U S:H  $ )Nr    r    s    r   <lambda>(test_convert_recursive.<locals>.<lambda>   s    3%<r   c                 "    U R                  5       $ r   )upperr    s    r   rV   rW      s
    syy{r   r   )br   r   )r   r   )ef)cd)rZ   FOOr]   r_   r^   )r   r_   rZ   x)r   r   argskwargs)is_matchconvert_itemr   results       r   test_convert_recursiverf      s    'H*Ll%uE
6S.TUVC xs;F#;|$S)U222#;|$S)e5z5R-SSSS
ES%L>2S3,4GH
ICxs;F#;e~6666#;#U|!4444r   ) r'   r   
hypothesisr   	thinc.apir   r   r   thinc.typesr   
thinc.utilr   r	   r
   r   r    r   ALL_XPcupyappendImportErrormarkparametrizer&   arrayr   r!   r*   floatsrR   rf   rU   r   r   <module>rt      s      / / "  
	
MM$
 	\	"A&	Q	aV	a 
++f
u{{A/	0!4	F#U[[^	4a8I&AQF#QF#	 	
 
Q(#)(# usEKKN.C DE F
 v&) ')( %%sPTUFMFMR5G  		s   G GG