
    &Vf5                     P    d dl Z d dlmZ d dlmZ 	 	 	 	 	 	 	 	 d
dZd Zd Zd	 ZdS )    N)tree)convert_to_tensorFTc           	      |   	
./01234567 pj         d         d }|st          j        |          t          j                  }|d         j         d         }|}|n|j        t
          j        k    r|                    t
          j                  }t          |j                   dk    rt          j	        |d          }|s ||          }g dd.|r|st          d          t                    }g }g }fd}t          j                  rt          j        |          6n |          f66fd	}|t          j        |          }rt          j        ||j         
          }t          |          D ]8} ||          }||         3  |t          |          t                    z             \  }} .3|          }|st          j        |          }n|d         }t          j        |||          }t          j        |          }t          j        |          }t          .3fd|D                       }t          d t%          |||          D                       }t          j        ||          }
r,|                    |           |                    |           2|g}|g}:|d         }|d         }t          j        |          }	rlt          j         .|d         |          |t          j        |                    }t          j         .||d          |t          j        |                    }nt          |          D ]l} ||          }  |t          |          t                    z             \  }}
r+|                    |           |                    |           f|g}|g}m|d         }|d         }t          j        |          }n*t                    }t          fd|D                       2t          j        d |D                       }   | t                    t                    z             \  }!}"
r|nd}#g }$t          j        |!          D ]b}%t-          |%          }&t          |%          |#k     r)|&                    g g|#t          |%          z
  z             |$                    |&           ct          j        dt
          j                  }'|}(n6t5          d          r$t7                    t          j                  }(n}(|Drt          j        |dg          }t-          t          j        |                    44fd5.fd0n[t;          t
          j                  r?r4t          j        d          })t          j        |)dz
            77fd5nfd5d 0nd 55t          d t          j        |!          D                       10125
 	f	d}*d}+|$|1}}},|'|k     r:|+|(k     r4 |*|'|,|g|R  }-|-d d         \  }'},}|-dd          }|+dz  }+|'|k     r|+|(k     4nN2
 fd}*d}+|$},|}|'|k     r8|+|(k     r2 |*|'|,g|R  }-|-d d         \  }'},|-dd          }|+dz  }+|'|k     r|+|(k     2d /|-d         }$t          /fd|$D                       }t          d |D                       }t          j        |!|          }t          j        |!|          }|st          j        ||          }|||fS ) N   c                     t          t          t          | j                                      }d\  |d<   |d<   t	          j        | |          S )N)r   r   r   r   )listrangelenshapetorchpermute)input_taxess     X/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/torch/rnn.pyswap_batch_timestepz rnn.<locals>.swap_batch_timestep   sE    E#gm,,--..Qa}Wd+++    r      c                    t          j        |           rt          d|            t          j        |          rt          d|           t          |j                  t          | j                  z
  }t          |          D ]}t          j        | d          } dg|z  t          |j        |d                    z   }t          j	        | |          S )Nz)mask_t is expected to be tensor, but got z*input_t is expected to be tensor, but got r   r   )
r   	is_nested
ValueErrorr
   r   r	   r   	unsqueezer   tile)mask_tr   	fixed_dim	rank_diff_	multipless         r   _expand_maskzrnn.<locals>._expand_mask.   s    >&!! 	DFDD   >'"" 	FWFF   &&V\):)::	y!! 	1 	1A_VR00FFC)Od7=+D&E&EE	z&),,,r   z/Unrolling requires a fixed number of timesteps.c                 J    t          j        |           } r| d d d         } | S )Nr   )r   unbind)r   go_backwardss    r   _process_single_input_tz$rnn.<locals>._process_single_input_tI   s.    l7++G (!$$B$-Nr   c                 L      fdD             }t          j        |          S )Nc                      g | ]
}|         S  r&   ).0t_times     r   
<listcomp>z2rnn.<locals>._get_input_tensor.<locals>.<listcomp>W   s    6662d8666r   )r   pack_sequence_as)r)   inpinputsprocessed_inputs   ` r   _get_input_tensorzrnn.<locals>._get_input_tensorV   s0    6666o666C(555r   )dimsc              3   0   K   | ]} |          V  d S Nr&   )r'   sr   r   s     r   	<genexpr>zrnn.<locals>.<genexpr>p   s@       % %01LL++% % % % % %r   c              3   J   K   | ]\  }}}t          j        |||          V  d S r2   r   where)r'   mr3   pss       r   r4   zrnn.<locals>.<genexpr>s   sJ       * * 1b K1b))* * * * * *r   r   c           	   3      K   | ]\}s!t          t          j        |                    n4t          t          j        t          j        |d g                              V  ]dS )r   N)r   r   r!   flip)r'   input_r"   s     r   r4   zrnn.<locals>.<genexpr>   sy       
 
  $AU\&))***%,uz&1#'>'>??@@	
 
 
 
 
 
r   c                     g | ]
}|d          S )r   r&   )r'   r,   s     r   r*   zrnn.<locals>.<listcomp>   s    888SV888r   )dtype__len__c                     |          S r2   r&   )r)   mask_tas    r   
masking_fnzrnn.<locals>.masking_fn   s    t}$r   c                      t           fd|D                       }t          d t          |||          D                       S )Nc              3   X   K   | ]$} |t          j                             V  %dS )r:   N)r
   r   )r'   or   r   s     r   r4   z5rnn.<locals>.compute_masked_output.<locals>.<genexpr>   sR       % % !Lc&,6G6GHHH% % % % % %r   c              3   J   K   | ]\  }}}t          j        |||          V  d S r2   r6   )r'   r8   rF   fms       r   r4   z5rnn.<locals>.compute_masked_output.<locals>.<genexpr>   sJ         1b K1b))     r   tuplezip)r   flat_out	flat_masktiled_mask_tr   s   `   r   compute_masked_outputz"rnn.<locals>.compute_masked_output   sz    $ % % % % %%% % %       $'h	$J$J     r   )dimc                 .    t          j        |           S r2   )r   less)r)   rev_input_lengths    r   rC   zrnn.<locals>.masking_fn   s     :&6===r   c                 .    t          j        |           S r2   )r   greater)r)   input_lengths    r   rC   zrnn.<locals>.masking_fn   s     =t<<<r   c                 V     t           fdt          ||          D                       S )Nc              3   J   K   | ]\  }}t          j        ||          V  d S r2   r6   )r'   rF   zor   s      r   r4   z5rnn.<locals>.compute_masked_output.<locals>.<genexpr>   sI        B K2..     r   rI   )r   rL   rM   s   `  r   rO   z"rnn.<locals>.compute_masked_output   sE        #&x#;#;     r   c              3   >   K   | ]}t          j        |          V  d S r2   )r   
zeros_liker'   rF   s     r   r4   zrnn.<locals>.<genexpr>   s>       % %() ##% % % % % %r   c                 f  	  t           fdD                       }t          j        |          }            } |t          |          t                    z             \  }}t          j        |          }rnt          j        |          }	 |||	          }
t          j        |          }t          j        |          } |||          }t          j        ||          }r nd}t	          ||
          D ]
\  }}|||<    dz   |t          |
          ft          |          z   S )as  RNN step function.

                Args:
                    time: Current timestep value.
                    output_ta_t: TensorArray.
                    prev_output: tuple of outputs from time - 1.
                    *states: List of states.

                Returns:
                    Tuple: `(time + 1, output_ta_t, output) + tuple(new_states)`
                c              3   (   K   | ]}|         V  d S r2   r&   r'   tar)   s     r   r4   z%rnn.<locals>._step.<locals>.<genexpr>	  '      %B%B2bh%B%B%B%B%B%Br   r   r   rJ   r   r+   flattenrK   )r)   output_ta_tprev_outputstatescurrent_inputr   output
new_statesflat_outputflat_mask_outputflat_new_output
flat_stateflat_new_stateflat_final_stateta_index_to_writer`   outrO   	constantsflat_zero_outputinput_tar-   rC   return_all_outputsstep_functionzero_output_for_masks   `                r   _stepzrnn.<locals>._step   s    !&%B%B%B%B%B%B%B B B $ 5fm L L#D))%2]!5==53C3C#C& &"
 #l622 ,3$$k22 !
 #8"7K)9# #
 "\&11
!%j!9!9#8#8NJ$ $  "2:?OPP
,>$EDDA!";@@ 0 0GB,/B())q+u_/E/EFJ J  r      c                     t           fdD                       }t          j        |          } |t          |          t                    z             \  }}t          j        |          }t          j        |          }r nd}t	          ||          D ]
\  }	}
|
|	|<   t          j        |          } dz   |ft          |          z   S )a)  RNN step function.

                Args:
                    time: Current timestep value.
                    output_ta_t: TensorArray.
                    *states: List of states.

                Returns:
                    Tuple: `(time + 1,output_ta_t) + tuple(new_states)`
                c              3   (   K   | ]}|         V  d S r2   r&   r_   s     r   r4   z%rnn.<locals>._step.<locals>.<genexpr>F  ra   r   r   r   rb   )r)   rd   rf   rg   rh   ri   rn   rj   rp   r`   rq   rr   initial_statesrt   r-   ru   rv   s   `          r   rx   zrnn.<locals>._step;  s     !&%B%B%B%B%B%B%B B B $ 5fm L L%2]!5==53C3C#C& &"
 "&j!9!9"l622,>$EDDA!";<< 0 0GB,/B())!2"N 
 q+.z1B1BBBr   c                     t          d | D                       }g }t          |           D ]%\  }}|j        |k    r|                    |           &t	          j        |          S )Nc                     g | ]	}|j         
S r&   )ndim)r'   ts     r   r*   z'rnn.<locals>._stack.<locals>.<listcomp>a  s    999QV999r   )max	enumerater   appendr   stack)tensor_list	max_ndimsmax_listir   s        r   _stackzrnn.<locals>._stack`  sn    99[999::IH!+.. ' '16Y&&OOA&&&;x(((r   c              3   .   K   | ]} |          V  d S r2   r&   )r'   rF   r   s     r   r4   zrnn.<locals>.<genexpr>j  s+      55aq		555555r   c              3   &   K   | ]}|d          V  dS )r   Nr&   r\   s     r   r4   zrnn.<locals>.<genexpr>k  s&      33aAbE333333r   )r   ) r   r   map_structurerc   r?   r   booltyper
   r   r   rJ   r   r!   r<   r	   r[   r7   rK   r+   r   r   r   extendtensorint32hasattrr   r   
isinstanceTensorsubtract)8rv   r-   r|   r"   maskrr   unrollrV   
time_majorrw   ru   r   flattened_inputs
time_stepstime_steps_trf   successive_statessuccessive_outputsr#   r/   	mask_listr   r,   rh   ri   rN   re   flat_statesflat_new_statesflat_final_stateslast_outputoutputsinput_time_zerooutput_time_zeror   output_ta_size	output_tarq   out_listr)   max_iterationsmax_lenrx   itrd   final_outputsr   r   rO   rs   rt   r   rB   rC   r.   rS   s8   ```` ` ` ``                                   @@@@@@@@@@r   rnnr      s	     26<?L, , ,  A#$7@@|F++!!$*1-JL:##99UZ((Dtz??a?4,,D 	-&&t,,D	- - - -  qK 	PNOOO~&&	 	 	 	 	 >&!! 	A"0' OO  76v>>@O	6 	6 	6 	6 	6 	6 T**I H!JyyGGG	:&& !1 !1''**"1%2]vy)9)99& &"
  ,|FF;;) 9"'"26":":KK"4R"8K\6;GG"l622"&,z":":$ % % % % %5@% % %     %* * *$'$o{% %* * * % %! .v7HII% 1&--f555%,,V4444*0&)/%%,R0K*2.Jk"455G# 
#k L2<<$[11 
  + Lw!<<<$W--  :&& 
1 
1''**!.vy)9)99" " & 1&--f555%,,V4444*0&)/%%,R0K*2.Jk"455GG ~&&  
 
 
 
 +
 
 
 
 
 /88'7888
 
 ,mU>22U95E5EE
 
! *<B	< 011 	' 	'CCyyH3xx.((S(A BCCCX&&&&|AU[111)NN|Y// .0>>!&<!8!8!- -z$,,5<--..G% % % % %      el33 	 
=)La888#(>'A+|#L#L > > > > > >
= = = = =    J!  % % %-1\:J-K-K% % %    , , , , , , , , , , , , ,\ B  &1K
 %%"~*=*= %+{!5?! ! ! 2?rr1B.k;*122.
a %%"~*=*=C C C C C C C C C C8 B#KJ%%"~*=*= %dK E* E E E$1"1"$5!k*122.
a	 %%"~*=*=	) 	) 	) "!$	555595555533733333'(8'BB+,<kJJ C$%8'BB++r   c                      dS )NFr&   argskwargss     r   cudnn_okr   v  s    5r   c                      t           r2   NotImplementedErrorr   s     r   lstmr   z      
r   c                      t           r2   r   r   s     r   grur   ~  r   r   )FNNFNFFT)	r   	keras.srcr   keras.src.backend.torch.corer   r   r   r   r   r&   r   r   <module>r      s           : : : : : : 	l, l, l, l,^        r   