
    i              
          d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZmZ ddlmZ ddlmZmZ ej&                  d	        Zd
 Zd Zej.                  j1                  d       e eddd            d               Zej.                  j1                  d       e eddd            d               Zej.                  j1                  d       ed       e eddd            d                      Zej.                  j1                  d       e eddd             ed      d                      Zej.                  j1                  d       e eddd            d               Zej.                  j1                  d       e eddd            d               Zej&                  d        Zd Z d Z!ej.                  jE                  d ejF                  ddgd !      ddgf ejF                  d"dgd !      d"dgf ejF                  dd"gd !      dd"gf ejF                  d"d"gd !      d"d"gfg      d#        Z$d$ Z%y)%    )	MagicMockN)givensettings)assert_allclose)SGDDropoutLinearchain   )arrays_OI_O_BI)	get_model	get_shapec                      t               } | S N)r	   models    o/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/tests/layers/test_linear.pyr   r      s    HEL    c                 &    | j                   dk(  sJ y )Nlinear)namer   s    r   test_linear_default_namer      s    ::!!!r   c                  X   t        dt        j                        } d| _        d| _        t        dt        j                        }d|_        d|_        t               |_        t               }|j                  | |       |j                  d      J |j
                  j                          y )N)   
   )shapespecr   float32)   nI)
r   numpyndarrayndimdtypemaxr	   
initializeget_dimassert_called_with)Xyr   s      r   test_linear_dimensions_on_datar+      s    emm4AAFAG5==1AAFAGKAEHE	Q==***EEr   zFlaky, skip temporarily)reasonr   )	max_batchmax_outmax_inc                     t        |       }t        |       \  }}}| \  }}}|j                  |      \  }}	|j                  |      }
t	        ||
       y r   )r   r   begin_updatepredictr   )	W_b_inputr   nr_batchnr_outnr_inWbinput_fwd_via_begin_updatefinish_updatefwd_via_predict_batchs              r   !test_begin_update_matches_predictr=   &   s[     i E'	2HfeLAq&*/*<*<V*D'-!MM&1(*?@r   c                 6   t        |       }t        |       \  }}}| \  }}}|j                  |      \  }}	t               fd}
t	        j
                  ||fd      } |	|      }|j                  |
       |j                  D ]  }|j                  |fv rJ  y )Nc                 d    j                  |        |j                  |j                  k(  sJ ||fS r   )addr   )keydatagradientkwargs	seen_keyss       r   sgdz<test_finish_update_calls_optimizer_with_weights.<locals>.sgd;   s/    czzX^^+++X~r   fr$   )	r   r   r1   setr!   onesr;   param_namesid)r3   r   r4   r5   r6   r7   r8   r9   outputr;   rF   grad_BOgrad_BIr   rE   s                 @r   /test_finish_update_calls_optimizer_with_weightsrP   1   s     i E'	2HfeLAq&!..v6FMI
 jj(F+37GG$G	!! -$9,,,-r   d   )max_examplesc                 ^   | \  }}}|j                   \  }}t        ||      }|j                  d|       |j                  d|       t        j                  dt        j
                  |d      t        j
                  |d      d      }||z   }|j                  |      }	t        |	|dd	       y )
Nr7   r8   z	oi,bi->bofloat64rH   Foptimizeg{Gz?rtolatolr   r	   	set_paramr!   einsumasarrayr2   r   
r3   r7   r8   r9   r5   r6   r   	einsummedexpected_outputpredicted_outputs
             r   test_predict_smallrb   G   s     LAq&GGMFE65!E	OOC	OOCay)fI.	I  !mO}}V,$oDtLr         )deadlinec                 ^   | \  }}}|j                   \  }}t        ||      }|j                  d|       |j                  d|       t        j                  dt        j
                  |d      t        j
                  |d      d      }||z   }|j                  |      }	t        |	|dd	       y )
Nr7   r8   z	bi,oi->bor   rH   FrU   g-C6?rW   rZ   r^   s
             r   test_predict_extensiverg   ^   s     LAq&GGMFE65!E	OOC	OOCfI.ay)	I  !mO}}V,$oEOr   c                     t        t        |       t        d            }t        |       \  }}}| \  }}}|j	                  |      \  }}	t        d |j                         D              sJ y )N      ?c              3   &   K   | ]	  }|d k(    yw        N .0vals     r   	<genexpr>z6test_dropout_gives_zero_activations.<locals>.<genexpr>|   s     ;cscz;   )r
   r   r   r   r1   allflatten)
r3   r   r4   r5   r6   r7   r8   r9   fwd_dropped_s
             r   #test_dropout_gives_zero_activationsrw   u   sf     )I&5E'	2HfeLAq&''/NK;[%8%8%:;;;;r   c                    t        t        |       t        d            }t        |       \  }}}| \  }}}|j	                         D ]!  }|j
                  dk(  sd|j                  d<   # |j                  |      \  }	}
t        j                  ||fd      } |
|      }t        d |j                         D              sJ y )Nri   dropoutdropout_raterG   rH   c              3   &   K   | ]	  }|d k(    ywrk   rm   rn   s     r   rq   z4test_dropout_gives_zero_gradients.<locals>.<genexpr>   s     7cscz7rr   )r
   r   r   r   walkr   attrsr1   r!   rJ   rs   rt   )r3   r   r4   r5   r6   r7   r8   r9   noderu   r;   rN   rO   s                r   !test_dropout_gives_zero_gradientsr      s     )I&5E'	2HfeLAq&

 -99	!),DJJ~&- "'!3!3F!;Kjj(F+37GG$G7W__%67777r   c                  :    t        dd      j                         } | S )Nr   )r	   r&   r   s    r   model2r      s    1aL##%ELr   c                     | j                  d      dk(  sJ | j                  d      dk(  sJ | j                  d      J | j                  d      J y )NnOr   r    r7   r8   )r'   	get_param)r   s    r   	test_initr      s^    >>$1$$$>>$1$$$C ,,,C ,,,r   c                    | j                   j                  d| j                  d            }| j                   j                  d| j                  d            }| j                  |      }t	        |d   |d          d| j                  d      d<   d|d<   | j                  |      }t	        ||       d| j                  d      d<   d|d<   | j                  |      }t	        ||       y )	N   r    r   g       @r8   r   r   g      @r   r   )opsalloc2fr'   r2   r   r   )r   r9   target_scoresscoress       r   test_predict_biasr      s    ZZ6>>$#78FJJ&&q&..*>?M^^F#FF1I}Q/0"FS!M$^^F#FFM*"FS!M$^^F#FFM*r   z
X,expectedrl   rG   rH   ri   c                    t        j                  g dd      j                  d      }t        j                  ddgd      }t        |j                  d   |j                  d         }|j                  d|       |j                  d	|       |j                  | j                  d
            }t        |j                         |       y )Nri   rl   rl   ri   rG   rH   r   r   rl   r   r   r7   r8   )r   )	r!   r]   reshaper	   r   r[   r2   r   ravel)r)   expectedr7   biasr   r   s         r   test_predict_weightsr      s     	*#6>>vFA==#s3/D1771:qwwqz*E	OOC	OOC]]199W-.FFLLNH-r   c                  z   t        j                  g dd      j                  d      } t        j                  ddgd      }t        dd      }|j	                  d|        |j	                  d|       t        d	dd
      }d |_        t        j                  ddggd      }t        j                  d	dggd      }t        j                  dd	ggd      }t        j                  d	d	ggd      }|j                  |      \  }}	t        |d   |d          t        j                  ddggd      }
 |	|
       |j                         j                         D ]?  \  }\  }} ||||      \  }}|j	                  |d   |       |j                  |d   |       A |j                  d      }|j                  d      } |d   d	k(  sJ |d   dk(  sJ | d   d	k(  sJ | d   dk(  sJ | d   dk(  sJ | d   d	k(  sJ |j                  |      \  }}t        j                  ddggd      }
 ||
       |j                         j                         D ]  \  }\  } } ||| |        |j                  d      }|j                  d      } |d   d	k(  sJ |d   d	k(  sJ | d   d	k(  sJ | d   dk(  sJ | d   d	k(  sJ | d   d	k(  sJ y )Nr   rG   rH   r   rl   r   r7   r8   ri   )L2	grad_clipr   r   g      r   r   )r   r   )r   r   )r!   r]   r   r	   r[   r   averagesr1   r   get_gradientsitemsset_gradr   )r7   r   r   rF   fftfftttr   backproprC   rA   paramd_paramr8   r;   dWs                    r   test_updater      s   *#6>>vFA==#s3/D1aLE	OOC	OOC
ccS
)CCL	c
|3	/B	c
|3	/B	c
|3	/B	c
|3	/B ))"-FHF4L&,/}}tSk]#6HX!&!4!4!6!<!<!> (eWS%1wA&s1vw'(
 	AAQ43;;Q43;;T7c>>T7c>>T7c>>T7c>> "..r2FM}}sDk]#6H(++-335 WaCBAAQ43;;Q43;; T7iT7iT7j   T7ir   )&unittest.mockr   r!   pytest
hypothesisr   r   numpy.testingr   	thinc.apir   r   r	   r
   
strategiesr   utilr   r   fixturer   r   r+   markskipr=   rP   rb   rg   rw   r   r   r   r   parametrizer]   r   r   rm   r   r   <module>r      s   #   & ) 1 1 ' '  
" 23~1Q78A 9 4A 23~1Q78- 9 4-( 23	s~1Q78M 9  4M( 23~Br:;	4P  < 4P( 23~1Q78< 9 4< 23~1Q78
8 9 4
8  
-+" 	Sz	-Sz:	Sz	-Sz:	Sz	-Sz:	Sz	-Sz:		.	.5 r   