
    iN                        d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ ddlmZ ej6                  d        Zd Zd	 Zd
 Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1ejd                  jg                  ddji                               d        Z5d  Z6ejd                  jo                  e d!"      d#        Z8d$ Z9d% Z:ejd                  jw                   e jx                         d&k(  d'd()      d*        Z=d+ Z>d, Z?d- Z@d. ZAd/ ZBd0 ZCy)1    N)Counter)AdamCupyOpsDropoutLinearModelReluShimSoftmaxchainchange_attr_valuesconcatenateset_dropout_rateuse_ops
with_debugwrap_model_recursive)has_cupy_gpu   )make_tempdirc                      t               S N)r        m/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/tests/model/test_model.pymodel_with_no_argsr      s	    8Or   c                     t        | d       S )Nc                     | d fS )Nc                     | S r   r   dYs    r   <lambda>z0create_model.<locals>.<lambda>.<locals>.<lambda>%   s     r   r   Xs    r   r!   zcreate_model.<locals>.<lambda>%   s    !]!3 r   r   names    r   create_modelr'   $   s    344r   c                 <    t        | j                  t              rJ y r   )
isinstanceopsr   )r   s    r   test_model_defaults_to_cpur+   (   s    ,00'::::r   c                 b    t               }t               }|j                  |j                  k7  sJ y r   )r   id)r   model1model2s      r   test_models_get_different_idsr0   ,   s&    XFXF99		!!!r   c                      G d dt               } t        d      }t        dd dd dt        j                  d      d d	|d d
ddi | d       g||g      }|j                  d      sJ |j                  d      j                  dk(  sJ |j                  d      J t        j                  t              5  |j                  d       d d d        t        j                  t              5  |j                  d       d d d        |j                  dt        j                  d             |j                  d      sJ |j                  d      j                  dk(  sJ |j                  |j                  dft        j                  d      i      5  t        j                  |j                  d      t        j                  d            sJ 	 d d d        t        j                  |j                  d      t        j                  d            sJ |j!                  d      rJ |j!                  d      rJ t        j                  t              5  |j#                  d       d d d        |j                  d|j$                  j'                  d             |j)                  d|j$                  j'                  d             t        j                  t*              5  |j-                  dt        j                  d             d d d        |j/                  d      sJ |j1                  d      dk(  sJ t        j                  t              5  |j1                  d       d d d        t        j                  t*              5  |j1                  d       d d d        |j3                  d      sJ |j5                  d      j6                  dk(  sJ |j3                  d      rJ t        j                  t              5  |j5                  d       d d d        |j3                  d      J t        j                  t*              5  |j5                  d       d d d        |j9                  d|       |j3                  d      sJ |j5                  d      j6                  dk(  sJ t        j                  t*              5  |j9                  dt        d             d d d        d|j:                  v sJ d|j:                  vsJ |j:                  d   dk(  sJ t        j                  t              5  |j:                  d    d d d        d|j:                  d<   |j=                         }|j6                  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# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   UxY w# 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   xY w# 1 sw Y   xY w)Nc                       e Zd ZdZy)test_model_init.<locals>.MyShimtestshimN__name__
__module____qualname__r&   r   r   r   MyShimr3   3       r   r9   atestc                     | d fS )Nc                     | S r   r   r   s    r   r!   z3test_model_init.<locals>.<lambda>.<locals>.<lambda>9        r   r   r"   s    r   r!   z!test_model_init.<locals>.<lambda>9       1m$ r   
   nInOrA   Wbr;   rH   foobardimsparamsrefsattrsshimslayersrG   rH   r#   xyz)   r   rC   rD   cbaz)r
   r'   r   numpyzeros	has_param	get_paramshapepytestraisesKeyError	set_param
use_paramsr-   onesarray_equalhas_gradget_gradr*   alloc1fset_grad
ValueErrorinc_gradhas_dimget_dimhas_refget_refr&   set_refrP   copy)r9   model_amodel
model_copys       r   test_model_initrr   2   s     3G$d#[['d3&end|n!	E ??3??3%%...??3'''	x	  	x	  	OOCU+,??3??3%%...			EHHc?EJJu,=>	? J  !5uzz%7HIIIJU__S15;;u3EFFF~~c"""~~e$$$	x	  s	OOC**2./	NN3		))"-.	z	" 1sEKK/01===="$$$	x	  e	z	" d====""c)))}}U###	x	  e==%%%	z	" c	MM#w====""c)))	z	" .c<,-.EKK###;;u&&&	x	  EEKKJ??f$$$Y  
J J
 1 1  
  
. .
 s   5U&(U3;V 	V&VV'5V4.W4W,WW(&U03U= V
VV$'V14V>WWW%(W1c                      G d dt               } t        d      }t        dd dd dd d d|d d	d
di | d       g||g      }t        j                  t
              5  |j                  dd       d d d        |j                  ddd       |j                  d|j                  j                  d             |j                  d|j                  j                  d             |j                  d      sJ |j                  d      dk(  sJ t        j                  t              5  |j                  dd       d d d        t        j                  t
              5  |j                  dd       d d d        t        j                  t
              5  |j                  ddd       d d d        y # 1 sw Y   <xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)Nc                       e Zd ZdZy)"test_model_set_dim.<locals>.MyShimr4   Nr5   r   r   r   r9   ru   t   r:   r   r9   r;   r<   c                     | d fS )Nc                     | S r   r   r   s    r   r!   z6test_model_set_dim.<locals>.<lambda>.<locals>.<lambda>z   r?   r   r   r"   s    r   r!   z$test_model_set_dim.<locals>.<lambda>z   r@   r   rT   rB   rF   rI   rJ   rK   rL   rC   rA   T)forcerG   rS      )r
   r'   r   r\   r]   rg   set_dimr_   r*   re   rf   ri   rj   r^   )r9   ro   rp   s      r   test_model_set_dimr{   s   s     3G$T"%&end|n!	E 
z	"  dB  
MM$$M'	OOC**2./	NN3		))"-.===="$$$	x	  !eR !	z	"  dB  
z	" ,dBd+, ,   ! !   , ,s0   F)#F6GG)F36F?GGc                      t        d      } | j                  t               k(  sJ | j                  dd        | j                  dk(  sJ | j                  dd        | j                  dk(  sJ y )Ntmpparam1r~   param2)r~   r   )r'   param_namestupler_   rp   s    r   test_param_namesr      sg    E'''	OOHd#+++	OOHd# 4444r   c                  $   t        d      } | j                  t               k(  sJ | j                  d| j                  j                  dd             | j                  d| j                  j                  dd      dz          | j                  dk(  sJ y )Nr}   r~         r   )r'   
grad_namesr   r_   r*   alloc2frf   r   s    r   test_grad_namesr      sy    Euw&&&	OOHeii//156	NN8UYY..q!4q89{***r   c                  >    t        dd      } | j                  dk(  sJ y )NrT      )rD   rC   )r   	dim_namesr   s    r   test_dim_namesr      s    1aLE??l***r   c                     t        d      } t        d      }t        d      }| j                  j                  |       | j                  t	               k(  sJ | j                  d|       | j                  dk(  sJ | j                  d      |u sJ |j                  j                  |       t        j                  t              5  | j                  d       d d d        | j                  d|       | j                  d      |u sJ | j                  |       ||j                  vsJ | j                  d      rJ y # 1 sw Y   exY w)Nparentchildkid)r   grandkid	grandkind)r'   rR   append	ref_namesr   rm   rl   r\   r]   r^   remove_noderk   )r   r   
grandchilds      r   test_model_set_referencer      s   (#F!Eg&J
MMuw&&&
NN5% x'''>>% E)))	LL
#	x	  #z"#
NN:z*>>*%333
z"U\\)))~~k****# #s   D88Ec                  "   t        d      } | j                  d      J | j                  dd       | j                  d      dk(  sJ | j                  d      J | j	                  d      J | j                          | j	                  d      J y )NrT   rC   r   boorG   )r   maybe_get_dimrz   maybe_get_refmaybe_get_param
initializer   s    r   test_maybe_methodsr      s    1IEt$,,,	MM$t$)))u%---  %---	  %111r   c                 j    t               5 }| j                  |dz         d d d        y # 1 sw Y   y xY wNthinc_model)r   to_disk)r   paths     r   test_model_can_save_to_diskr      s1    	 94""4-#789 9 9s   )2c                     t               5 }| j                  |dz         | j                  |dz        }d d d        | j                         j                         k(  sJ y # 1 sw Y   -xY wr   )r   r   	from_diskto_bytes)r   r   m2s      r   test_model_can_load_from_diskr      si    	 @4""4-#78))$*>?@ &&(BKKM999@ @s   )A  A)c                     |dz  }| j                  |       | j                  |      }| j                         |j                         k(  sJ y r   )r   r   r   )r   pathy_fixturer   r   s       r   +test_model_can_roundtrip_with_path_subclassr      sG    =(Dt$		%	%d	+B&&(BKKM999r   c                     | }d|_         d|j                  d<   t        |ddddi       |j                  d   du sJ d|j                  vsJ y )NtargetFhas_varT)r   errorr   )r&   rP   r   r   rp   s     r   test_change_attr_valuesr      sY    EEJ"EKK	uxTD)IJK;;y!T)))%++%%%r   c                      t               } | j                  d   dk(  sJ t        | d       | j                  d   dk(  sJ y )Ndropout_rate        皙?)r   rP   r   r   s    r   test_set_dropoutr      sA    IE;;~&#---UC ;;~&#---r   c                 t    | }d|_         d|j                  d<   t        |d       |j                  d   dk(  sJ y )Ndropoutr   r   r   )r&   rP   r   r   s     r   test_set_dropout_2r      s=    EEJ"%EKKUC ;;~&#---r   c                      t        j                  dd i      5  t        d      t        d      z   } | dk(  sJ 	 d d d        y # 1 sw Y   y xY w)N+c                 2    | j                   |j                   fS r   r%   rI   s     r   r!   z test_bind_plus.<locals>.<lambda>   s    AFFAFF3C r   r;   r%   rH   rI   )r   define_operatorsr'   ms    r   test_bind_plusr      sK    			&C D	E c"\s%;;J  s   !AAc                      t        j                  dd i      5  t        d      t        d      z   t        d      z   t        d      z   } | j                  dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   c                     | S r   r   rI   s     r   r!   z!test_plus_chain.<locals>.<lambda>   s    1 r   r;   r%   rH   rU   d)r   r   r'   r&   r   s    r   test_plus_chainr      sr    			n 5	6 c"$%$% $% 	
 vv}}  s   AA((A1c                     t        j                  t        d      } t        j                  t        d      }|j                          | j                          | j	                          |j	                          t        j                  t        d      } t        j                  t        d      }|j                          | j                          | j	                          |j	                          y)zGTest we can create a model in a child thread with overloaded operators.)r   r   r   args)*r   )r   r   )r   r   N)	threadingThread_overload_plusstartjoin)worker1worker2s     r   $test_overload_operators_in_subthreadr     s    
 n8DGn8DGMMOMMOLLNLLNn8DGn8DGMMOMMOLLNLLNr   c                 ,   t        d      }t        d      }t        j                  | d i      5  t        j                  |       | dk(  r||z   }n||z  }d d d        dk(  sJ t        j
                  j                         i k(  sJ y # 1 sw Y   4xY w)Nr;   r%   rH   c                 4    | j                   |j                   z   S r   r%   rI   s     r   r!   z _overload_plus.<locals>.<lambda>  s     r   r   ab)r'   r   r   timesleep_context_operatorsget)operatorr   m1r   values        r   r   r     s    	3	B	3	B			+G H	I 

5s?GEGE D==##'')R/// s   &B

Bc            	         t        d      } t        d      }t        j                  j                         i k(  sJ t        j                  dd i      5  | |z   }t        j                  t              5  | |z  }d d d        t        j                  dd i      5  t        j                  t              5  | |z   }d d d        | |z  }t        j                  dd	 i      5  t        j                  t              5  | |z   }d d d        | |z
  }d d d        t        j                  t              5  | |z   }d d d        | |z  }d d d        | |z   }t        j                  t              5  | |z  }d d d        d d d        d
k(  sJ t        j                  j                         i 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# 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   xY w# 1 sw Y   xY w)Nr;   r%   rH   r   c                 4    | j                   |j                   z   S r   r%   rI   s     r   r!   z/test_nested_operator_contexts.<locals>.<lambda>(  s    166AFF? r   r   c                 4    | j                   |j                   z   S r   r%   rI   s     r   r!   z/test_nested_operator_contexts.<locals>.<lambda>,  s    qvv r   -c                 4    | j                   |j                   z   S r   r%   rI   s     r   r!   z/test_nested_operator_contexts.<locals>.<lambda>0  s    166AFF? r   r   )r'   r   r   r   r   r\   r]   	TypeError)r   r   r   s      r   test_nested_operator_contextsr   $  s   	3	B	3	B##'')R///			&B C	D R]]9% 	GE	##S*F$GH 
	y)  R GE''.J(KL  ]]9- $GE$R  y)  R GE
	 R]]9% 	GE	!$ D==##'')R///#	 	   $ $      
	 
		 	! s   G;3F&9 G;G#3F39%G#G8F?	>G!G#,G2G#?&G;%G/+G;&F0	+G;3F<8G#?GGGG#G G##G,	(G;/G8	4G;;Hopz+ - * @ / // % ** << >> & ^ |c                    t               }t               }t        j                  | d i      5  | dk(  r||z   }n't        j                  t
              5  ||z   }d d d        | dk(  r||z
  }n't        j                  t
              5  ||z
  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r|j                  |      }n3t        j                  t
              5  |j                  |      }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | d	k(  r||z  }n't        j                  t
              5  ||z  }d d d        | d
k(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r||z	  }n't        j                  t
              5  ||z	  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        | dk(  r||z  }n't        j                  t
              5  ||z  }d d d        d d d        t        j                  j                         i 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# 1 sw Y   QxY w# 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   xY w# 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   NxY w# 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   xY w)Nc                 4    | j                   |j                   z   S r   r%   rI   s     r   r!   z$test_all_operators.<locals>.<lambda>B  s    !&&166/ r   r   r   r   @/z//^%z**z<<z>>&|)	r   r   r   r\   r]   r   
__matmul__r   r   )r   r   r   r   s       r   test_all_operatorsr   >  s   	B	B			%A B	C J 9GEy)  R 9GEy)  R  9GEy)  R  9MM"%Ey) *b)* 9GEy)  R  :"HEy) !b!9GEy)  R 9GEy)  R :FEy) B:"HEy) !b!:"HEy) !b!9GEy)  R 9GEy)  R 9GEy)  R SJ V ##'')R///O   
      * *   ! !
   
   
 
! !
! !
   
   
   SJ  J s[  %O#L.,O#L;
,O#6M<8O#4M,O#2M"8,O#$M/*,O#M<,O#N	,O#:N ,O#,N#2,O#N0$,O#N=,O#O
,O#4O:O#.L8	3O#;M	 O#M	O#M	O#"M,	'O#/M9	4O#<N	O#	N	O#N 	O##N-	(O#0N:	5O#=O	O#
O	O#O 	O##O,c                     g } d }d}t        |       dk  r~g }t        d      D ]1  }t        j                  || |f      }|j	                  |       |dz  }3 |D ]  }|j                           |D ]  }|j                           t        |       dk  r~t        |       t        t        t        |                   k(  sJ y)z<Create a bunch of threads and assert they all get unique IDsc                 T    | j                  t        d|       j                         y )Nworkerr%   )r   r'   r-   )id_listindexs     r   get_model_idz3test_unique_id_multithreading.<locals>.get_model_id  s     |6%)9:==>r   r   i  2   r   r   N)	lenranger   r   r   r   r   listset)list_of_idsr   counterworkersiws         r   test_unique_id_multithreadingr     s     K? G
k
T
!r 	A  K;QRANN1qLG	  	AGGI	 	AFFH	 k
T
! {s4K(8#9::::r   zneeds CuPy GPU)reasonc                     t        j                  d       dd l} t        d      5  d}d}| j	                         \  \  }}\  }}t        t        ||      t        ||      t                     }|j                  j                  |      }|j                  j                  |      }|j                  j                  |      }|j                  j                  |      }|j                  |d d |d d        t        d	      }d
}	t        d      D ]  }
|j                  j                  |	||d      }|D ]5  \  }}|j                  |      \  }} |||z
         |j                  |       7 d}d}|j                  j                  |	||      D ]^  \  }}|j!                  |      }||j#                  d      |j#                  d      k(  j%                         z  }||j&                  d   z  }`  	 d d d        y # 1 sw Y   y xY w)Nml_datasetsr   cupy    r   )rD   r   rT   r#   YgMbP?   r   T)shuffler   )axis)r\   importorskipr  r   mnistr   r	   r   r*   asarrayr   r   r   
multibatchbegin_updatefinish_updatepredictargmaxsumr[   )r  n_hiddenr   train_Xtrain_Ydev_Xdev_Yrp   	optimizer
batch_sizer   batchesr#   r  Yhbackpropcorrecttotals                     r   test_model_gpur     s   
&	 %-8->->-@*'NUEHg.Hg.I
 ))##G,))##G,		!!%(		!!%(72A;'"1+6K	
q 	%Aii**:wQU*VG /1$11!4Ha ##I./
 GE		,,ZF %1]]1%BII1I-q1AAFFHH!$%	%'% % %s   GG55G>c            	      Z   t        d      } t        d      }t        | |      }t        |       }t        dd | || |g| || d      }|j	                  | |       |j
                  d   |k(  sJ |j
                  d   |k(  sJ |j
                  d   |k(  sJ |j                  d	      |k(  sJ |j                  d
      |k(  sJ |j                  d      |k(  sJ |j
                  d   |k(  sJ |j
                  d   j
                  d   |k(  sJ |j
                  d   j
                  d   |k(  sJ y )NrT   r<   c                     | d fS )Nc                     | S r   r   r   s    r   r!   z5test_replace_node.<locals>.<lambda>.<locals>.<lambda>  r?   r   r   r"   s    r   r!   z#test_replace_node.<locals>.<lambda>  r@   r   )relu1relu2relu3)rR   rO   r   r   r   r$  r%  r&  r   )r	   r   r   r   replace_noderR   rl   )r$  r%  
relu_chainrelu1_debugdebugs        r   test_replace_noder+    sC   GEGEue$JU#K$ueZ0uu=	E 
uk*<<?k)))<<?e###<<?k)))==![000==!U***==![000 <<?j(((<<?!!!$333<<?!!!$---r   c                     d }  | dg       } | d|g      }t        |      } | d|g      }|j                  d|       t        ||      }d|_        |j	                  ||       |j
                  d   j
                  d   |k(  sJ |j
                  d   j
                  d   j
                  d   |k(  sJ |j
                  d   j                  d      |k(  sJ y )Nc                      t        | d |      S )Nc                      yN.r   rp   r#   is_trains      r   r!   zOtest_replace_node_with_indirect_node_ref.<locals>.dummy_model.<locals>.<lambda>      r   rR   r$   r&   rR   s     r   dummy_modelz=test_replace_node_with_indirect_node_ref.<locals>.dummy_model      T9&IIr   yxrH   r;   r   r   )r   rm   r   r&   r'  rR   rl   )r5  r7  r8  y_debugrH   r;   s         r   (test_replace_node_with_indirect_node_refr:    s    J 	CAC!AmGC!AIIc1aAAFNN1g88A;a G+++88A;a ''*g55588A;s#w...r   DarwinzSSL: CERTIFICATE_VERIFY_FAILEDF)r  strictc                  v   t        j                  d       dd l} | j                         \  \  }}\  }}t	               fd}fd}fd}t               }t        t               |||      }	t        ||	|	      }
|
j                  |d d |d d         |
|d d d	
      \  }} ||d d        ddddk(  sJ y )Nr  r   c                       dxx   dz  cc<   y )Ninitr   r   _countss    r   on_initz test_with_debug.<locals>.on_init  s    v!r   c                       dxx   dz  cc<   y )Nforwardr   r   r@  s    r   
on_forwardz#test_with_debug.<locals>.on_forward  s    yQr   c                       dxx   dz  cc<   y )Nr  r   r   r@  s    r   on_backpropz$test_with_debug.<locals>.on_backprop  s    zar   )rC  rF  rH  rT   r  F)r#   r1  r   r   )r?  rE  r  )	r\   r  r  r  r   r	   r   r   r   )r  r  r  r  r  rC  rF  rH  relur%  chainedrA  r  rB  s                @r   test_with_debugrK    s     &)4):):)<&WgYF  6DJKE D%'G!4GBQK%8KAx WRa[ aA1====r   c                      d t        d      } t        | |       }t        |fd      }|j                  dk(  sJ |j                  d   |u sJ |j                  d   j                  d   j                  dk(  sJ |j                  d   j                  d   j                  d   | u sJ |j                  d   j                  d   j                  dk(  sJ |j                  d   j                  d   j                  d   | u sJ y )Nc                      t        | d |      S )Nc                      yr/  r   r0  s      r   r!   z:test_recursive_wrap.<locals>.dummy_model.<locals>.<lambda>-  r2  r   r3  r$   r4  s     r   r5  z(test_recursive_wrap.<locals>.dummy_model,  r6  r   rT   c                 4     d| j                    d| g      S Nzdummy()r%   rp   r5  s    r   r!   z%test_recursive_wrap.<locals>.<lambda>7  s    {VEJJ<q+AE7K r   zdummy(relu>>relu)r   dummy(relu)r   )r	   r   r   r&   rR   )rI  rJ  chained_debugr5  s      @r   test_recursive_wraprU  +  s   J 7DD$G(KM !4444"g---"))!,11]BBB"))!,33A6$>>>"))!,11]BBB"))!,33A6$>>>r   c                  n   d t        d      } t        | |       }t        |||       }t        |fd      }d}|j	                         D ]#  }|j
                  j                  d      s|dz  }% |dk(  sJ |j                  d   j                  d   j                  d   j                  d   j
                  dk(  sJ |j                  d   j                  d   j                  d   j                  d   j
                  dk(  sJ |j                  d   j                  d   j                  d   j                  d   j
                  dk(  sJ |j                  d   j                  d   j                  d   j                  d   j
                  dk(  sJ |j                  d   j                  d	   j
                  dk(  sJ y )
Nc                      t        | d |      S )Nc                      yr/  r   r0  s      r   r!   zAtest_recursive_double_wrap.<locals>.dummy_model.<locals>.<lambda>D  r2  r   r3  r$   r4  s     r   r5  z/test_recursive_double_wrap.<locals>.dummy_modelC  r6  r   rT   c                 4     d| j                    d| g      S rP  r%   rR  s    r   r!   z,test_recursive_double_wrap.<locals>.<lambda>J  s    kF5::,a*@5'J r   r   dummyr   r   rS  r   )r	   r   r   r   walkr&   
startswithrR   )rI  rJ  concatconcat_wrappedn_debugrp   r5  s         @r   test_recursive_double_wrapr`  B  s   J 7DD$G'40F)JN G$$& ::  )qLG a<<  #**1-44Q7>>qAFF-WWW  #**1-44Q7>>qAFF-WWW  #**1-44Q7>>qAFF-WWW  #**1-44Q7>>qAFF-WWW  #**1-22mCCCr   c                      t        d      } t        d      }t        | |       }t        ||      }|j                  d|        t        |t               y )NrT   rI  )r	   r   rm   r   r   )rI  r%  rJ  chained2s       r   test_wrap_non_child_referencesrc  _  sF    7DGED$GUG$HVT":.r   c                      t        d      } t        d      }t        | |      }t        ||      }t        |j                  d            ||| |gk(  sJ t        |j                  d            | |||gk(  sJ y )NrT   dfs_preorderdfs_post)r	   r   r   r[  )rI  r%  inner_chainrJ  s       r   test_walk_dfsrj  i  s    7DGEe$KK-G9-.7Ku2UUUU:./	4   r   c                      t        d      } t        j                  t        d      5  | j	                  d       d d d        y # 1 sw Y   y xY w)NrT   zInvalid order)matchdfs_post_orderrf  )r	   r\   r]   rg   r[  )rI  s    r   test_walk_bfs_post_order_failsrn  w  s=    7D	z	9 *		(	)* * *s   AAc                      G d dt               } t        d      } | d       }t        dd dddt        j                  d      d d	|d d
ddi|g||g      }t        dd dddt        j                  d      d d	|d d
ddi|g||g      }t        d      }t        ||||      }|j                         }|j                  |j                                |j                  dk(  sJ |j                  d   |j                  d   k(  sJ t        |j                  d   j                  d         t        |j                  d   j                  d         k(  sJ y )Nc                       e Zd ZdZd Zd Zy))test_model_copy_with_loop.<locals>.MyShimr4   c                     t         S r   )r:  )selfs    r   r   z2test_model_copy_with_loop.<locals>.MyShim.to_bytes  s    ;;r   c                      y r   r   )rs  bytess     r   
from_bytesz4test_model_copy_with_loop.<locals>.MyShim.from_bytes  s    r   N)r6   r7   r8   r&   r   rv  r   r   r   r9   rq  ~  s    	<	r   r9   r;   r<   c                     | d fS )Nc                     | S r   r   r   s    r   r!   z=test_model_copy_with_loop.<locals>.<lambda>.<locals>.<lambda>  r?   r   r   r"   s    r   r!   z+test_model_copy_with_loop.<locals>.<lambda>  r@   r   rT   rB   rE   rF   rI   rJ   rK   rL   test2c                     | d fS )Nc                     | S r   r   r   s    r   r!   z=test_model_copy_with_loop.<locals>.<lambda>.<locals>.<lambda>  r?   r   r   r"   s    r   r!   z+test_model_copy_with_loop.<locals>.<lambda>  r@   r   ztest>>relu>>test>>test2r   r   r   )r
   r'   r   rW   rX   r	   r   rn   	from_dictto_dictr&   rR   r-   rQ   )r9   ro   working_shimlayerlayer2rI  rp   r/   s           r   test_model_copy_with_loopr  }  s[     3G$<L$Q[['d3&enn!	E $Q[['d3&enn!	F 7D%uf-EZZ\F	OOFNN$%;;3333==v}}Q////fmmA$$Q'(Bv}}Q/?/E/Ea/H,IIIIr   )Dplatformr   r   collectionsr   rW   r\   	thinc.apir   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   thinc.compatr   utilr   fixturer   r'   r+   r0   rr   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizesplitr   r   skipifr   r+  r:  xfailsystemrK  rU  r`  rc  rj  rn  r  r   r   r   <module>r     s            " &   5;">%B,@5++
+&29
::&..(
004 >DDFGN0 HN0b;. $-=>#% ?#%L.2/< HOO!+  
>
>B?.D:/*&Jr   