
    &Vf                     T    d dl Zd dlmZ 	 	 	 	 	 	 	 	 ddZd Zd ZddZdd	Zd
 Z	dS )    N)treeFTc           	      h   	!"# d }|st          j        |          t          j                  }|d         j        d         }|[|j        dk    r|                    d          }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        |          #n |          f##fd}|t          |          }r|                                 t          |          D ]8} ||          }||         "  |t          |          t          |          z             \  }} !"|          }|st          j        |          }n|d         }t          j        |||          }t          j        |          }t          j        |          }t          !"fd|D                       }t          d t#          |||          D                       }t          j        ||          }|
r,|                    |           |                    |           2|g}|g}:|d         }|d         }t          j        |          }nt          |          D ]l} ||          }  |t          |          t          |          z             \  }}|
r+|                    |           |                    |           f|g}|g}m|d         }|d         }t          j        |          }nK| 	fd}|f} n fd}} t+          ||| |          \  }}rt          j        |d          }|d         }|st          j        ||          }|||fS )Nc                     t          t          t          | j                                      }d\  |d<   |d<   t	          j        | |          S )N)   r   r   r   )listrangelenshapenp	transpose)input_taxess     X/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/numpy/rnn.pyswap_batch_timestepz rnn.<locals>.swap_batch_timestep   sE    E#gm,,--..Qa|GT***    r   bool   axisr   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   expand_dimsr   tile)mask_tr   	fixed_dim	rank_diff_	multipless         r   _expand_maskzrnn.<locals>._expand_mask*   s    >&!! 	DFDD   >'"" 	FWFF   &&V\):)::	y!! 	0 	0A^FB//FFC)Od7=+D&E&EE	wvy)))r   z/Unrolling requires a fixed number of timesteps.c                 R    t          |           } r|                                  | S N)unstackreverse)r   go_backwardss    r   _process_single_input_tz$rnn.<locals>._process_single_input_tE   s-    g&&G "!!!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>S   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_tensorR   s0    6666o666C(555r   c              3   0   K   | ]} |          V  d S r#   r*   )r+   sr!   r   s     r   	<genexpr>zrnn.<locals>.<genexpr>l   s@       % %01LL++% % % % % %r   c              3   J   K   | ]\  }}}t          j        |||          V  d S r#   r   where)r+   mr5   pss       r   r6   zrnn.<locals>.<genexpr>o   sJ       * * 1b HQ2&&* * * * * *r   c                 R   |\  }}t          j        t          j        |          dd           ||           \  }}	r)t          j        t          j        |          |          }n| d         }t          j        ||          }fdt          | |          D             }||fS )Nr   T)r   keepdimsr   c                 B    g | ]\  }}t          j        ||          S r*   r8   )r+   r5   ns	is_maskeds      r   r.   z&rnn.<locals>._step.<locals>.<listcomp>   s;       2 HY2..  r   )r   alllogical_notr9   
zeros_likezip)
statescurrent_inputcurrent_maskoutput_t
new_statesmasked_outs
output_tm1r@   step_functionzero_output_for_masks
          @r   _stepzrnn.<locals>._step   s    .;+|FN<00rD  	 (5}]F'K'K$*' L"$(!2=#:#:H# #KK
 "(J"$(9j("K"KK   !$VZ!8!8  
 #K00r   c                 *     ||           \  }}||fS r#   r*   )rE   rF   rH   rI   rL   s       r   rN   zrnn.<locals>._step   s$    '4}]F'K'K$*!8++r   )finitxsr%   mask)r   )r   map_structureflattenr
   dtypeastyper	   r   r   r   tupler   r$   r%   r   rC   r9   rD   r/   appendstack
numpy_scanflip)$rL   r1   initial_statesr&   rS   	constantsunrollinput_length
time_majorrM   return_all_outputsr   flattened_inputs
time_stepsrE   successive_statessuccessive_outputsr'   r3   	mask_listir0   outputrI   tiled_mask_tprev_outputflat_statesflat_new_statesflat_final_stateslast_outputoutputsrN   scan_xsr!   r   r2   s$   `` `     `                       @@@r   rnnrr      s   + + +  A#$7@@|F++!!$*1-J:;;v&&Dtz??a>$R000D 	-&&t,,D	* * * *  F" 	PNOOO~&&	 	 	 	 	 >&!! 	A"0' OO  76v>>@O	6 	6 	6 	6 	6 	6 I $!!###:&& !1 !1''**"1%2]vy)9)99& &"
  ,|FF;;) 9"$-"7"7KK"4R"8K,DD"l622"&,z":":$ % % % % %5@% % %     %* * *$'$o{% %* * * % %! .v7HII% 1&--f555%,,V4444*0&)/%%,R0K*2.Jh122GG :&& 
1 
1''**!.vy)9)99" " & 1&--f555%,,V4444*0&)/%%,R0K*2.Jh122GG 1 1 1 1 1 1. tnGG, , , , , G( 
 
 

G  	/ggA...Gbk C$%8'BB++r   c                      t           r#   NotImplementedErrorargskwargss     r   lstmry          
r   c                      t           r#   rt   rv   s     r   grur|      rz   r   c                 T      fdt           j                           D             S )Nc                 <    g | ]}                     |          S r*   )take)r+   rh   r   xs     r   r.   zunstack.<locals>.<listcomp>   s%    :::AFF1dOO:::r   )r   r
   )r   r   s   ``r   r$   r$      s/    :::::U174=%9%9::::r   c                    |}g }|v|\  }}|rt          j        |d          n|}|rt          j        |d          n|}t          ||          D ]+\  }}	 | |||	f          \  }}
|                    |
           ,nC|rt          j        |d          n|}|D ]&} | ||          \  }}
|                    |
           't          j        |          }|rt          j        |d          }||fS )Nr   r   )r   r\   rD   rY   array)rP   rQ   rR   r%   rS   rE   rp   r   each_x	each_maskri   s              r   r[   r[      s3   FG4")0BGAAq(/9rwt!$$$$T!$Q 	# 	#FIQv	':;;NFFNN6""""	# %,3RWRa     	# 	#AQvq\\NFFNN6""""hwG +''***7?r   c                      dS )NFr*   rv   s     r   cudnn_okr      s    5r   )FNNFNFFT)r   )FN)
numpyr   	keras.srcr   rr   ry   r|   r$   r[   r   r*   r   r   <module>r      s              	~, ~, ~, ~,B    ; ; ; ;   6    r   