
    h(              
          S SK JrJrJrJrJrJrJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJrJrJrJrJr  \	" 5       r\" S\S9r\" S	\\\\\4   S9r\R.                  " S
5      SS\\\4   S\S\\\4   4S jj5       rS\\\4   S\S\S\\\4   4S jr SS\\\4   S\\   S\\   SS4S jjrS\S\4S jrS\\\4   S\S\S\\\4   4S jrS\\\4   S\S\S\\\4   4S jrS\\\4   S\S\S\\\4   4S jr g)     )CallableListOptionalTupleTypeVarUnioncast   )NumpyOps)registry)Model)Array2dFloats2dList2dPaddedRaggedValT)boundSeqTzwith_array2d.v1layerpadreturnc                     [        SU R                   S3[        [        U /SU0U R                   Vs0 s H  o"U R                  U5      _M     snS9$ s  snf )zTransform sequence data into a contiguous 2d array on the way into and
out of a model. Handles a variety of sequence types: lists, padded and ragged.
If the input is a 2d array, it is passed through unchanged.
zwith_array()r   )initlayersattrsdims)r   nameforwardr   	dim_namesmaybe_get_dim)r   r   r   s      S/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/with_array2d.pywith_array2dr$      s]     
ejj\#wcl:?//J/$E''--/J  Ks   AmodelXseqis_trainc                    [        U[        5      (       a'  [        [        [        [
        4   [        XU5      5      $ [        U[        5      (       a'  [        [        [        [
        4   [        XU5      5      $ [        U[        [        45      (       d  U R                  S   " X5      $ [        [        [        [
        4   [        XU5      5      $ )Nr   )
isinstancer   r	   r   r   r   _ragged_forwardr   _padded_forwardlisttupler   _list_forward)r%   r&   r'   s      r#   r    r       s     $E$.)?5+QRR	D&	!	!E$.)?5+QRRtUm,,||At..E$.)=h+OPP    NXYc                     U R                   S   nUR                  Ub  [        X5      OUUb  [        X5      OUS9  UR                   H*  nUR	                  U5      nUc  M  U R                  XE5        M,     g )Nr   )r0   r1   )r   
initialize
_get_arrayr!   r"   set_dim)r%   r0   r1   r   dim_namevalues         r#   r   r   -   sr     &+\\!_E	"#-*U
Q"#-*U
Q   OO##H-MM(* $r/   c                    [        U[        5      (       a  UR                  $ [        U[        5      (       ao  U R                  R                  UR                  UR                  R                  S   UR                  R                  S   -  UR                  R                  S   5      $ [        U[        [        45      (       d  [        [        U5      $ U R                  R                  U5      $ Nr      r
   )r)   r   datar   ops	reshape2fshaper,   r-   r	   r   flatten)r%   r0   s     r#   r4   r4   ;   s    !Vvv	Av		yy""FFAFFLLOaffll1o5qvv||A
 	
 D%=))GQyy  ##r/   Xsc                 `  ^^^	^
 U R                   S   mU R                  S   m
[        R                  U Vs/ s H  n[	        U5      PM     sn5      m	TR
                  R                  UT
S9nT" XB5      u  nmS[        S[        4UUU	U
4S jjnTR
                  R                  UT	T
S9U4$ s  snf )Nr   r   r   dYsr   c                 ~   > TR                   R                  U TS9nT" U5      nTR                   R                  UTTS9$ )NrB   )r<   r?   	unflatten)rC   dYfdXfget_dXfr   lengthsr   s      r#   backprop_list_forward.<locals>.backpropQ   sA    ii-clyy""3S"99r/   )	r   r   	NUMPY_OPS	asarray1ilenr<   r?   r   rE   )r%   r@   r'   seqXfYfrJ   rH   r   rI   r   s          @@@@r#   r.   r.   H   s     &+\\!_E
++e
C!!r":r3s8r":;G			23		'B%KB:f : : :
 99r74h>> #;s   B+Xrc                    ^^ U R                   S   nU" UR                  U5      u  nmUR                  R                  mS[        S[        4UU4S jjn[	        XAR
                  5      U4$ )Nr   dYrr   c                 n   > [        T" U R                  5      R                  T5      U R                  5      $ )N)r   dataXdreshaperI   )rT   get_dXx_shapes    r#   rJ   !_ragged_forward.<locals>.backprop`   s(    fSZZ(0093;;GGr/   )r   r;   rV   r>   r   rI   )r%   rR   r'   r   r1   rJ   rX   rY   s         @@r#   r*   r*   Y   se     &+\\!_Ebggx(IAviiooGHf H H H !ZZ (**r/   Xpc                 j  ^ ^ T R                   S   nT R                  R                  UR                  UR                  R                  S   UR                  R                  S   -  UR                  R                  S   5      nU" XB5      u  nmT R                  R                  [        [        U5      UR                  R                  S   UR                  R                  S   UR                  S   5      nS[        S[        4UU 4S jjn[        XaR                  UR                  UR                  5      U4$ )Nr   r:   r
   dYpr   c                 &  > [        U [        5      (       d   eTR                  R                  U R                  U R                  R
                  S   U R                  R
                  S   -  U R                  R
                  S   5      nT" U5      nTR                  R                  X R                  R
                  S   U R                  R
                  S   UR
                  S   5      n[        X0R                  U R                  U R                  5      $ r9   )
r)   r   r<   reshape2r;   r>   	reshape3f	size_at_trI   indices)r]   dYdX2ddXrX   r%   s       r#   rJ   !_padded_forward.<locals>.backpropr   s    #v&&&&YYHHchhnnQ'#((..*;;SXX^^A=N
 bzYY  ((..#SXX^^A%6

1
 b--ckkBBr/   )r   r<   r_   r;   r>   r`   r	   r   r   ra   rI   rb   )	r%   r[   r'   r   r0   Y2dr1   rJ   rX   s	   `       @r#   r+   r+   f   s     &+\\!_E		
q!BGGMM!$44bggmmA6F	A $KC		XsRWW]]1-rww}}Q/?1	A	Cf 	C 	C 	C !\\2::rzz:HDDr/   )r   )NN)!typingr   r   r   r   r   r   r	   backendsr   configr   r%   r   typesr   r   r   r   r   rL   r   r   r   intr$   boolr    r   r4   r.   r*   r+    r/   r#   <module>ro      s   H H H    = =J	 vW%vU6667#BCD 
"#dDj)  E$*<M  $t$(48
4> MQ+t+!)$+;CD>+	+
$ 
$' 
$?t?"(?48?
68?"
+t
+"(
+48
+
68
+EtE"(E48E
68Er/   