
    h              
          S SK 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OptionalTupleTypeVarUnioncast   )NumpyOps)registry)Model)Array3dArrayXdListXdPaddedRaggedArrayTXd)boundSeqTzwith_array.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nU$ s  snf )zTransform sequence data into a contiguous array on the way into and
out of a model. Handles a variety of sequence types: lists, padded and ragged.
If the input is an 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   models       Q/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/with_array.py
with_arrayr$      sa      %
ejj\#wcl:?//J/$E''--/J E L Ks   Ar"   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   )r/   r0   )r   
initialize
_get_arrayr    r!   set_dim)r"   r/   r0   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      (       a  UR                  $ [        U[
        [        45      (       d  [        [        U5      $ U R                  R                  U5      $ N)r(   r   dataXdr   datar+   r,   r   r   opsflatten)r"   r/   s     r#   r3   r3   ;   sa    !Vxx	Av		vv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$ )Nr?   )r;   r<   	unflatten)r@   dYfdXfget_dXfr   lengthsr   s      r#   backprop_list_forward.<locals>.backpropO   sA    ii-clyy""3S"99r.   )	r   r   	NUMPY_OPS	asarray1ilenr;   r<   r   rB   )r"   r=   r&   seqXfYfrG   rE   r   rF   r   s          @@@@r#   r-   r-   F   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S[        S[        4U4S jjn[        XAR                  5      U4$ )Nr   dYrr   c                 P   > [        T" U R                  5      U R                  5      $ r8   )r   r9   rF   )rQ   get_dXs    r#   rG   !_ragged_forward.<locals>.backprop]   s    fSZZ(#++66r.   )r   r9   r   rF   )r"   rO   r&   r   r0   rG   rS   s         @r#   r)   r)   W   sO     &+\\!_Ebii*IAv7f 7 7 !ZZ (**r.   Xpc                    ^ U R                   S   nU" UR                  U5      u  nmS[        S[        4U4S jjn[        XAR                  UR                  UR
                  5      U4$ )Nr   dYpr   c                    > [        U [        5      (       d   eT" U R                  5      n[        XR                  U R                  U R
                  5      $ r8   )r(   r   r:   	size_at_trF   indices)rW   dXrS   s     r#   rG   !_padded_forward.<locals>.backpropi   s?    #v&&&&CHHb--ckkBBr.   )r   r:   r   rY   rF   rZ   )r"   rU   r&   r   r0   rG   rS   s         @r#   r*   r*   c   s^     &+\\!_Ebggx(IAvCf C C
 !\\2::rzz:HDDr.   )r   )NN) typingr   r   r   r   r   r   backendsr
   configr   r"   r   typesr   r   r   r   r   rI   r   r   r   intr$   boolr   r   r3   r-   r)   r*    r.   r#   <module>rd      s   B B    < <J	 :W-vU6667#BCD 
!eHh./ c %d
BS  " 
Qt
Q$(
Q48
Q
4>
Q MQ+t+!)$+;CD>+	+$ $' $?t?"(?48?
68?"	+t	+"(	+48	+
68	+EtE"(E48E
68Er.   