
    i              
          d dl mZmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZ  e       Z ede      Z ed	eeeeef         Z e
j,                  d
      ddeeef   dedeeef   fd       Zdeeef   dededeeef   fdZ	 ddeeef   dee   dee   ddfdZdedefdZdeeef   dededeeef   fdZdeeef   dededeeef   fdZdeeef   dededeeef   fdZy)     )CallableOptionalTupleTypeVarUnioncast   )NumpyOps)registry)Model)Array3dArrayXdListXdPaddedRaggedArrayTXd)boundSeqTzwith_array.v1layerpadreturnc                     t        d| j                   dt        t        | gd|i| j                  D ci c]  }|| j                  |       c}      }|S c c}w )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       h/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/with_array.py
with_arrayr$      s_      %
ejj\#wcl:?//J$dE''--J E L Ks   Ar"   Xseqis_trainc                    t        |t              r(t        t        t        t
        f   t        | ||            S t        |t              r(t        t        t        t
        f   t        | ||            S t        |t        t        f      s | j                  d   ||      S t        t        t        t
        f   t        | ||            S )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,u||AtX..E$.)=h+OPP    NXYc                     | j                   d   }|j                  |t        | |      n||t        | |      n|       |j                  D ](  }|j	                  |      }|| j                  ||       * y )Nr   )r/   r0   )r   
initialize
_get_arrayr    r!   set_dim)r"   r/   r0   r   dim_namevalues         r#   r   r   -   s}     &+\\!_E	"#-*UA
Q"#-*UA
Q   OO +##H-MM(E*+r.   c                     t        |t              r|j                  S t        |t              r|j                  S t        |t
        t        f      st        t        |      S | j                  j                  |      S N)r(   r   dataXdr   datar+   r,   r   r   opsflatten)r"   r/   s     r#   r3   r3   ;   sX    !Vxx	Av	vvD%=)GQyy  ##r.   Xsc                 d  	
 | j                   d   | j                  d   
t        j                  |D cg c]  }t	        |       c}      	j
                  j                  |
      } ||      \  }dt        dt        f	
fd}j
                  j                  |	
      |fS c c}w )Nr   r   r   dYsr   c                     j                   j                  |       } |      }j                   j                  |      S )Nr?   )r;   r<   	unflatten)r@   dYfdXfget_dXfr   lengthsr   s      r#   backpropz_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":3s8":;G			23		'BH%KB:f : : :
 99r74h>> #;s   B-Xrc                     | j                   d   } ||j                  |      \  }dt        dt        ffd}t        ||j                        |fS )Nr   dYrr   c                 P    t         | j                        | j                        S r8   )r   r9   rF   )rP   get_dXs    r#   rG   z!_ragged_forward.<locals>.backprop]   s    fSZZ(#++66r.   )r   r9   r   rF   )r"   rN   r&   r   r0   rG   rR   s         @r#   r)   r)   W   sQ     &+\\!_Ebii*IAv7f 7 7 !RZZ (**r.   Xpc                     | j                   d   } ||j                  |      \  }dt        dt        ffd}t        ||j                  |j                  |j
                        |fS )Nr   dYpr   c                     t        | t              sJ  | j                        }t        || j                  | j                  | j
                        S r8   )r(   r   r:   	size_at_trF   indices)rU   dXrR   s     r#   rG   z!_padded_forward.<locals>.backpropi   s>    #v&&&CHHb#--ckkBBr.   )r   r:   r   rW   rF   rX   )r"   rS   r&   r   r0   rG   rR   s         @r#   r*   r*   c   s`     &+\\!_Ebggx(IAvCf C C
 !R\\2::rzz:HDDr.   )r   )NN) typingr   r   r   r   r   r   backendsr
   configr   r"   r   typesr   r   r   r   r   rH   r   r   r   intr$   boolr   r   r3   r-   r)   r*    r.   r#   <module>ra      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.   