
    i              
       v   d dl 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 eZeZ ej                  d      	 dd	e
eef   d
ee
eef      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defdZded	ed
edefdZdededeeef   fdZdededefdZy)    )CallableOptionalTuplecast   )Ops)registry)Model)Paddedzbidirectional.v1Nl2rr2lreturnc                 r    || j                         }t        d| j                   t        | |gt              S )zLStitch two RNN models into a bidirectional layer. Expects squared sequences.bi)layersinit)copyr
   nameforwardr   )r   r   s     k/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/bidirectional.pybidirectionalr      s3    
 {hhj2chhZ'3*4HH    modelXis_trainc                     
  j                   \  }}t         j                  |      } |||      \  }
 |||      \  }t         j                  ||      }dt        dt
        f
 fd}	||	fS )NdZr   c                 n    t        j                  |       \  }} |      } |      }t        ||      S N)_splitops_sum)r   d_l2r_Zd_r2l_ZdX_l2rdX_r2lbp_l2r_Zbp_r2l_Zr   s        r   backpropzforward.<locals>.backprop   s9    !%))R0'"'"FF##r   )r   _reverser!   _concatenateOutTInT)r   r   r   r   r   X_revl2r_Zr2l_ZZr)   r'   r(   s   `         @@r   r   r      sq    ||HCUYY"E!X&OE8%*OE8UYYu-A$T $c $ h;r   Yc                     |t        | j                  |      nd\  }}| j                  d   j                  ||       | j                  d   j                  ||       y )NNNr   )r   r2      )r    r!   r   
initialize)r   r   r2   Y1Y2s        r   r   r   &   sT     &']VEIIq!FB	LLOb)	LLOb)r   r!   Xpc                 z    t        |j                  d d d   |j                  |j                  |j                        S )Nr5   r   data	size_at_tlengthsindices)r!   r9   s     r   r*   r*   .   s+    "''#A#,bjj"**EEr   c                     t        | j                  j                  |j                  |j                  fd      |j                  |j
                  |j                        S )N)axis)r   xpconcatenater<   r=   r>   r?   )r!   r   r   s      r   r+   r+   2   sH    CHHchh/b9	 r   c           	         |j                   j                  d   dz  }|j                   t        t        t        t        f   dt	        d |      f         }|j                   t        t        t        t        f   dt	        |      f         }t        ||j                  |j                  |j                        t        ||j                  |j                  |j                        fS )NrA   r   .)	r<   shaper   r   slicer   r=   r>   r?   )r!   r9   halfX_l2rX_r2ls        r   r    r    ;   s    77==!DGGDue|,sE$4E.FGHEGGDue|,sE$K.@ABEubllBJJ

;ubllBJJ

; r   Ypc                     t        | j                  |j                  z   | j                  | j                  | j                        S r   r;   )r9   rK   s     r   r"   r"   F   s,    "''BGG#R\\2::rzzJJr   r   r4   )typingr   r   r   r   backendsr   configr	   r   r
   typesr   r-   r,   r   r   boolr   r   r*   r+   r    r"    r   r   <module>rS      sq   2 2     #$=AI	sDy	I (sDy)9 :I
39I %I5d#  t dHn@U " KO*d* (*9A$*	*F# F6 Ff Fc  V    E&&.$9 KV K KF Kr   