
    hU                        S SK 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  \ R                  " SS9SS j5       rS rS rS	 r\ R                  " \\ R$                  " \\ R&                  R)                  \(       + S
S9S9\ R$                  " \\ R&                  R)                  \(       + SS9S9/S9S 5       r\ R&                  R,                  \ R&                  R/                  SS/5      S 5       5       rg)    N)AdamPyTorchWrapperReluSoftmaxTensorFlowWrapperchaincloneget_current_ops)has_tensorflow	has_torchmodule)scopec                     [         R                  " S5        SS KnUR                  5       u  u  p#u  pEUS U  US U  4US U  US U  44$ )Nml_datasetsr   )pytestimportorskipr   mnist)limitr   train_Xtrain_Ydev_Xdev_Ys         W/home/james-whalen/.local/lib/python3.13/site-packages/thinc/tests/layers/test_mnist.pyr   r      sX    
&)4):):)<&WFUOWVe_-fuuVe}/MMM    c           	      P    [        [        [        XS9S5      [        SU 5      5      $ )N)nOdropout   
   )r   r	   r   r   )widthr   nIr   s       r   create_relu_softmaxr"      s"    tu6:GB<NOOr   c                    ^^^ SS K mSS KmSS KJs  Jm   " UUU4S jSTR                  R
                  5      m[        T" XX!5      5      $ )Nr   c                   :   >^  \ rS rSrUU U4S jrU4S jrSrU =r$ ),create_wrapped_pytorch.<locals>.PyTorchModel"   c                 "  > [         TU ]  5         TR                  R                  U5      U l        TR                  R                  U5      U l        TR                  R                  X15      U l        TR                  R                  X5      U l        g N)	super__init__nn	Dropout2ddropout1dropout2Linearfc1fc2)selfr    r   r!   r   PyTorchModel	__class__torchs        r   r*   5create_wrapped_pytorch.<locals>.PyTorchModel.__init__#   sd    ,.0!HH..w7DM!HH..w7DMxxr1DHxxu1DHr   c                    > TR                  U5      nU R                  U5      nU R                  U5      nTR                  U5      nU R                  U5      nU R	                  U5      nTR                  USS9nU$ )N   )dim)relur-   r0   r.   r1   log_softmax)r2   xoutputFs      r   forward4create_wrapped_pytorch.<locals>.PyTorchModel.forward*   sj    q	Aa AAq	Aa AA]]1!],FMr   )r-   r.   r0   r1   )__name__
__module____qualname____firstlineno__r*   r?   __static_attributes____classcell__)r4   r>   r3   r5   s   @r   r3   r%   "   s    	2	 	r   r3   )r5   torch.nntorch.nn.functionalr+   
functionalModuler   )r    r   r!   r   r>   r3   r5   s       @@@r   create_wrapped_pytorchrK      s<    ## uxx $ ,u">??r   c                 &   SSK JnJn  SSKJn  U" 5       nUR                  U" U SU4S95        UR                  U" U5      5        UR                  U" U SS95        UR                  U" U5      5        UR                  U" US S95        [        U5      $ )Nr   )DenseDropout)
Sequentialr:   )
activationinput_shape)rP   )tensorflow.keras.layersrM   rN   tensorflow.keras.modelsrO   addr   )r    r   r!   r   rM   rN   rO   tf_models           r   create_wrapped_tensorflowrV   7   sy    62|HLLubUCDLL!"LLu01LL!"LLrd+,X&&r   zneeds PyTorch)reason)markszneeds TensorFlow)paramsc                     U R                   $ r(   )param)requests    r   create_modelr]   D   s     ==r   )r    nb_epoch	min_score)       g?c                    SnSnUu  u  pxu  pU" XUR                   S   UR                   S   S9nUR                  US S US S S9  [        S5      n/ n/ n[        5       n[	        U5       GH3  nUR
                  R                  XWUSS	9 Hl  u  nnUR                  U5      u  nnUR                  U5      nU" UU-
  5        UR                  U5        UR                  UU-
  S
-  R                  5       5        Mn     SnSnUR
                  R                  XYU
5       Hj  u  nnUR                  U5      nUR                  U5      nUUR                  SS9UR                  SS9:H  R                  5       -  nUUR                   S   -  nMl     UU-  nUR                  U5        GM6     US   US   :  d   U5       eUS   S:  a  US   US   :  d   U5       e[        U Vs/ s H  nUU:  PM
     sn5      (       d   U5       eg s  snf )N   g?r8   )r!   r      )XYgMbP?T)shuffler   r   )axisg      ?)shape
initializer   r
   rangeops
multibatchbegin_updateasarrayfinish_updateappendsumpredictargmaxany)r    r^   r_   r]   r   
batch_sizer   r   r   r   r   model	optimizerlossesscoresrm   ire   rf   Yhbackpropcorrecttotalscores                           r   test_small_end_to_endr   Q   s    JG).&WGMM!,<qAQRE	wr{gbqk2UIFF

C8_II((gt(TDAq --a0LBRBR!V	*MMBFq=--/0 U II((EBDAqq!BRB		q	)QXX1X-==BBDDGRXXa[ E C %e% & ":q	!)6)!ay3bzF1I%-v-%v6ve	!v677??76s   G=)i  )r   	thinc.apir   r   r   r   r   r   r	   r
   thinc.compatr   r   fixturer   r"   rK   rV   r[   markskipifr]   slowparametrizer    r   r   <module>r      s    	 	 	 3 hN  NP@4
'  	+6;;3E3E)m\k3E3lm.fkk6H6H^I[dv6H6wx ;m_M!@ N !@r   