§
    1�Åj¹&  ã                  ó|   — d dl mZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
  G d„ d¦  «        Z G d„ d	e¦  «        ZdS )
é    )Úannotations)ÚAnyN)ÚBase)Úexpectc                  ó.   — e Zd Zdd„Zdd„Zdd„Zdd„ZdS )Ú	RNNHelperÚparamsr   ÚreturnÚNonec                ó  — d}d}d}d}d}d}d}|||g}	|	D ]}
|
|v sJ d|
› �¦   «         ‚Œ|t          |¦  «                 j        d	         | _        |                     |d
¦  «        | _        ||         j        d         }|                     |d	¦  «        }||         }|                     |¦  «        }|dk    r.t          j        |d	d¦  «        }|�t          j        |d	d¦  «        }|j        d         }|                     |t          j        | j        d|z  f|j        ¬¦  «        ¦  «        }|€#t          j        | j        ||f|j        ¬¦  «        }|| _	        ||         | _
        ||         | _        || _        || _        || _        d S )NÚXÚWÚRÚBÚ	initial_hÚ	directionÚlayoutzMissing Required Input: r   Úforwardéÿÿÿÿé   é   ©Údtype)ÚstrÚshapeÚnum_directionsÚgetr   ÚnpÚswapaxesÚzerosr   r   r   r   r   ÚH_0ÚLAYOUT)Úselfr	   r   r   r   r   r!   Ú	DIRECTIONr"   Úrequired_inputsÚiÚhidden_sizer   ÚxÚh_0Ú
batch_sizeÚbs                    úPC:\Projects\Historical\venv\Lib\site-packages\onnx/backend/test/case/node/rnn.pyÚ__init__zRNNHelper.__init__   sª  € àˆØˆØˆØˆØˆØˆ	Øˆà˜a ˜)ˆØ ð 	?ð 	?ˆAØ˜�;�;�;Ð >¸1Ð >Ð >‘;”;�;�;à$¥S¨¡V¤VœnÔ2°1Ô5ˆÔØŸš I¨yÑ9Ô9ˆŒà˜Q”i”o bÔ)ˆà—’˜F AÑ&Ô&ˆØ�1ŒIˆØ�jŠj˜‰oŒoˆØ�QŠ;ˆ;Ý”˜A˜q !Ñ$Ô$ˆAØˆÝ”k # q¨!Ñ,Ô,�à”W˜Q”Zˆ
Ø�JŠJØÝŒHØÔ$ a¨+¡oÐ6Ø”gðñ ô ñ
ô 
ˆð ˆ;Ý”(ØÔ$ j°+Ð>ÀaÄgðñ ô ˆCð ˆŒØ˜”ˆŒØ˜”ˆŒØˆŒØˆŒØˆŒˆˆó    r(   ú
np.ndarrayc                ó*   — t          j        |¦  «        S )N)r   Útanh)r#   r(   s     r,   ÚfzRNNHelper.f?   s   € ÝŒw�q‰zŒzÐr.   r   r   r   r   r!   útuple[np.ndarray, np.ndarray]c           
     ó‚  — g }|}|D ]�}|                       t          j        |t          j        |¦  «        ¦  «        t          j        |t          j        |¦  «        ¦  «        z   t          j        t          j        |d¦  «        Ž z   ¦  «        }	|                     |	¦  «         |	}Œžt          j        |d¬¦  «        }
|}|
|fS )z¢Run a forward pass of the RNN.

        Assumes that the num_directions axis has been squeezed out of the
        inputs. (And returns Y, Yh without it.)
        r   r   ©Úaxis)r2   r   ÚdotÚ	transposeÚaddÚsplitÚappendÚstack)r#   r   r   r   r   r!   Úh_listÚH_tr(   ÚHÚYÚY_hs               r,   Ú_run_forwardzRNNHelper._run_forwardB   s¹   € ð ˆàˆØð 	ð 	ˆAØ—’Ý”�q�"œ, q™/œ/Ñ*Ô*Ý”&˜�bœl¨1™oœoÑ.Ô.ñ/å”&�"œ( 1 a™.œ.Ð)ñ*ñô ˆAð
 �MŠM˜!ÑÔÐØˆCˆCåŒH�V !Ð$Ñ$Ô$ˆØˆØ�#ˆvˆr.   c                óÚ  — | j         dk    ry|                      | j        | j        d         | j        d         | j        d         | j        d         ¦  «        \  }}t          j        |d¦  «        }t          j        |d¦  «        }�n¯| j         dk    r£|                      t          j	        | j        d¬¦  «        | j        d         | j        d         | j        d         | j        d         ¦  «        \  }}t          j	        |d¬¦  «        }t          j        |d¦  «        }t          j        |d¦  «        }�n| j         dk    sJ ‚|                      | j        | j        d         | j        d         | j        d         | j        d         ¦  «        \  }}|                      t          j	        | j        d¬¦  «        | j        d         | j        d         | j        d         | j        d         ¦  «        \  }}t          j	        |d¬¦  «        }t          j
        ||gd¬¦  «        }t          j
        ||gd¬¦  «        }| j        r.t          j        |g d¢¦  «        }t          j        |g d¢¦  «        }||fS )	Nr   r   r   Úreverser5   Úbidirectional)r   r   r   é   )r   r   r   )r   rB   r   r   r   r   r!   r   Úexpand_dimsÚflipr<   r"   r8   )r#   r@   rA   ÚYfÚYf_hÚYbÚYb_hs          r,   ÚstepzRNNHelper.step_   s:  € ØŒ>˜YÒ&Ð&Ø×&Ò&Ø”Ø”�q”	Ø”�q”	Ø”�q”	Ø”˜”ñô ‰FˆAˆsõ ”˜q !Ñ$Ô$ˆAÝ”.  aÑ(Ô(ˆC‰CØŒ^˜yÒ(Ð(Ø×&Ò&Ý”˜œ QÐ'Ñ'Ô'Ø”�q”	Ø”�q”	Ø”�q”	Ø”˜”ñô ‰FˆAˆsõ ”˜ Ð"Ñ"Ô"ˆAÝ”˜q !Ñ$Ô$ˆAÝ”.  aÑ(Ô(ˆC‰Cà”> _Ò4Ð4Ð4Ð4Ø×(Ò(Ø”Ø”�q”	Ø”�q”	Ø”�q”	Ø”˜”ñô ‰HˆB�ð ×(Ò(Ý”˜œ QÐ'Ñ'Ô'Ø”�q”	Ø”�q”	Ø”�q”	Ø”˜”ñô ‰HˆB�õ ”˜ !Ð$Ñ$Ô$ˆBÝ”˜"˜b˜¨Ð*Ñ*Ô*ˆAÝ”(˜D $˜<¨aÐ0Ñ0Ô0ˆCàŒ;ð 	/Ý”˜Q   Ñ-Ô-ˆAÝ”,˜s I I IÑ.Ô.ˆCà�#ˆvˆr.   N)r	   r   r
   r   )r(   r/   r
   r/   )r   r/   r   r/   r   r/   r   r/   r!   r/   r
   r3   )r
   r3   )Ú__name__Ú
__module__Ú__qualname__r-   r2   rB   rM   © r.   r,   r   r      se   € € € € € ð-ð -ð -ð -ð^ð ð ð ðð ð ð ð:/ð /ð /ð /ð /ð /r.   r   c                  óž   — e Zd Zed
d„¦   «         Zed
d„¦   «         Zed
d„¦   «         Zed
d„¦   «         Zed
d„¦   «         Zed
d„¦   «         Z	d	S )ÚRNNr
   r   c                 ól  — t          j        ddgddgddggg¦  «                             t           j        ¦  «        } d}d}d	}t          j                             d
g d¢ddg|¬¦  «        }|t          j        d||f¦  «                             t           j        ¦  «        z  }|t          j        d||f¦  «                             t           j        ¦  «        z  }t          | ||¬¦  «        }| 	                    ¦   «         \  }}	t          || ||g|	                     t           j        ¦  «        gd¬¦  «         d S )Nç      ð?ç       @ç      @ç      @ç      @ç      @r   é   çš™™™™™¹?rS   ©r   r   r   Ú rA   ©ÚinputsÚoutputsr'   r   Útest_simple_rnn_defaults©r`   ra   Úname©r   ÚarrayÚastypeÚfloat32ÚonnxÚhelperÚ	make_nodeÚonesr   rM   r   ©
ÚinputÚ
input_sizer'   Úweight_scaleÚnoder   r   ÚrnnÚ_rA   s
             r,   Úexport_defaultszRNN.export_defaults’   s4  € å”˜C ˜:¨¨S z°C¸°:Ð>Ð?Ñ@Ô@×GÒGÍÌ
ÑSÔSˆàˆ
ØˆØˆåŒ{×$Ò$Ø˜/˜/˜/°B¸°;ÈKð %ñ 
ô 
ˆð �2œ7 A {°JÐ#?Ñ@Ô@×GÒGÍÌ
ÑSÔSÑSˆØ�2œ7 A {°KÐ#@ÑAÔA×HÒHÍÌÑTÔTÑTˆå˜% 1¨Ð*Ñ*Ô*ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø+ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r.   c                 óv  — t          j        g d¢g d¢g d¢gg¦  «                             t           j        ¦  «        } d}d}d}d}t          j                             dg d¢d	d
g|¬¦  «        }|t          j        d||f¦  «                             t           j        ¦  «        z  }|t          j        d||f¦  «                             t           j        ¦  «        z  }|t          j        d|f¦  «                             t           j        ¦  «        z  }t          j        d|f¦  «                             t           j        ¦  «        }	t          j	        ||	fd¬¦  «        }
t          | |||
¬¦  «        }|                     ¦   «         \  }}t          || |||
g|                     t           j        ¦  «        gd¬¦  «         d S )N©rU   rV   rW   ©rX   rY   rZ   ©g      @g       @g      "@rF   é   r\   rS   ©r   r   r   r   r^   rA   r_   r   r5   Ú!test_simple_rnn_with_initial_biasrc   )r   rf   rg   rh   ri   rj   rk   rl   r    Úconcatenater   rM   r   )rn   ro   r'   Úcustom_biasrp   rq   r   r   ÚW_BÚR_Br   rr   rs   rA   s                 r,   Úexport_initial_biaszRNN.export_initial_biasª   s±  € å”˜?˜?˜?¨O¨O¨O¸_¸_¸_ÐMÐNÑOÔO×VÒVÝŒJñ
ô 
ˆð ˆ
ØˆØˆØˆåŒ{×$Ò$ØØ'Ð'Ð'Ø˜�KØ#ð	 %ñ 
ô 
ˆð �2œ7 A {°JÐ#?Ñ@Ô@×GÒGÍÌ
ÑSÔSÑSˆØ�2œ7 A {°KÐ#@ÑAÔA×HÒHÍÌÑTÔTÑTˆð �BœG Q¨Ð$4Ñ5Ô5×<Ò<½R¼ZÑHÔHÑHˆÝŒh˜˜;Ð'Ñ(Ô(×/Ò/µ´
Ñ;Ô;ˆÝŒN˜C ˜:¨AÐ.Ñ.Ô.ˆå˜% 1¨¨QÐ/Ñ/Ô/ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a Ð#Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø4ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r.   c                 óÀ  — t          j        g d¢g d¢g d¢gg d¢g d¢g d¢gg¦  «                             t           j        ¦  «        } d}d}t          j                             d	g d
¢ddg|¬¦  «        }t           j                             d||¦  «                             t           j        ¦  «        }t           j                             d||¦  «                             t           j        ¦  «        }t           j                             d|¦  «                             t           j        ¦  «        }t           j                             d|¦  «                             t           j        ¦  «        }t          j	        ||fd¬¦  «        }t          | |||¬
¦  «        }	|	                     ¦   «         \  }
}t          || |||g|                     t           j        ¦  «        gd¬¦  «         d S )Nrv   rw   rx   )g      $@g      &@g      (@)g      *@g      ,@g      .@)g      0@g      1@g      2@rF   ry   rS   rz   r^   rA   r_   r   r5   Útest_rnn_seq_lengthrc   )r   rf   rg   rh   ri   rj   rk   ÚrandomÚrandnr|   r   rM   r   )rn   ro   r'   rq   r   r   r~   r   r   rr   rs   rA   s               r,   Úexport_seq_lengthzRNN.export_seq_lengthÍ   sÀ  € å”à �� / / /°?°?°?ÐCØ#Ð#Ð#Ð%7Ð%7Ð%7Ð9KÐ9KÐ9KÐLðñ
ô 
÷
 Š&•”Ñ
Ô
ð 	ð ˆ
ØˆåŒ{×$Ò$ØØ'Ð'Ð'Ø˜�KØ#ð	 %ñ 
ô 
ˆõ ŒI�OŠO˜A˜{¨JÑ7Ô7×>Ò>½r¼zÑJÔJˆÝŒI�OŠO˜A˜{¨KÑ8Ô8×?Ò?ÅÄ
ÑKÔKˆõ Œi�oŠo˜a Ñ-Ô-×4Ò4µR´ZÑ@Ô@ˆÝŒi�oŠo˜a Ñ-Ô-×4Ò4µR´ZÑ@Ô@ˆÝŒN˜C ˜:¨AÐ.Ñ.Ô.ˆå˜% 1¨¨QÐ/Ñ/Ô/ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a Ð#Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø&ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r.   c                 ó´  — t          j        ddggddggddggg¦  «                             t           j        ¦  «        } d}d}d	}d
}t          j                             dg d¢ddg||¬¦  «        }|t          j        d
||f¦  «                             t           j        ¦  «        z  }|t          j        d
||f¦  «                             t           j        ¦  «        z  }t          | |||¬¦  «        }| 	                    ¦   «         \  }	}
t          || ||g|	                     t           j        ¦  «        |
                     t           j        ¦  «        gd¬¦  «         d S )NrU   rV   rW   rX   rY   rZ   r   r[   ç      à?r   rS   r]   r@   rA   )r`   ra   r'   r   )r   r   r   r   Útest_simple_rnn_batchwiserc   re   )rn   ro   r'   rp   r   rq   r   r   rr   r@   rA   s              r,   Úexport_batchwisezRNN.export_batchwiseñ   sT  € å”˜C ˜:˜,¨#¨s¨¨¸¸S°z°lÐCÑDÔD×KÒKÍBÌJÑWÔWˆàˆ
ØˆØˆØˆåŒ{×$Ò$ØØ"�?�?Ø˜%�LØ#Øð %ñ 
ô 
ˆð �2œ7 A {°JÐ#?Ñ@Ô@×GÒGÍÌ
ÑSÔSÑSˆØ�2œ7 A {°KÐ#@ÑAÔA×HÒHÍÌÑTÔTÑTˆå˜% 1¨°&Ð9Ñ9Ô9ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—X’X�bœjÑ)Ô)¨3¯:ª:µb´jÑ+AÔ+AÐBØ,ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r.   c                 ót  — t          j        ddggddggddggg¦  «                             t           j        ¦  «        } d}d}d	}t          j                             d
g d¢ddg|d¬¦  «        }|t          j        d||f¦  «                             t           j        ¦  «        z  }|t          j        d||f¦  «                             t           j        ¦  «        z  }t          | ||d¬¦  «        }| 	                    ¦   «         \  }}	t          || ||g|	                     t           j        ¦  «        gd¬¦  «         d S )NrU   rV   rW   rX   rY   rZ   r   r[   r\   rS   r]   r^   rA   rD   ©r`   ra   r'   r   r   ©r   r   r   r   Útest_simple_rnn_reverserc   re   rm   s
             r,   Úexport_reversezRNN.export_reverse  s?  € å”˜C ˜:˜,¨#¨s¨¨¸¸S°z°lÐCÑDÔD×KÒKÍBÌJÑWÔWˆàˆ
ØˆØˆåŒ{×$Ò$ØØ"�?�?Ø˜�KØ#Øð %ñ 
ô 
ˆð �2œ7 A {°JÐ#?Ñ@Ô@×GÒGÍÌ
ÑSÔSÑSˆØ�2œ7 A {°KÐ#@ÑAÔA×HÒHÍÌÑTÔTÑTˆå˜% 1¨°YÐ?Ñ?Ô?ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø*ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r.   c                 ó¼  — t          j        ddggddggddggg¦  «                             t           j        ¦  «        } d}d}t          j        d	ggdgggt           j        ¬
¦  «        }t          j                             dg d¢ddg|d¬¦  «        }|t          j        d||f¦  «                             t           j        ¦  «        z  }|t          j        d||f¦  «                             t           j        ¦  «        z  }t          | ||d¬¦  «        }| 	                    ¦   «         \  }}	t          || ||g|	                     t           j        ¦  «        gd¬¦  «         d S )NrU   rV   rW   rX   rY   rZ   r   r[   r‡   r   rS   r]   r^   rA   rE   r‹   r   rŒ   Útest_simple_rnn_bidirectionalrc   re   )
rn   ro   r'   Úweight_scalesrq   r   r   rr   rs   rA   s
             r,   Úexport_bidirectionalzRNN.export_bidirectional*  s]  € å”˜C ˜:˜,¨#¨s¨¨¸¸S°z°lÐCÑDÔD×KÒKÍBÌJÑWÔWˆàˆ
ØˆÝœ C 5 '¨S¨E¨7Ð!3½2¼:ÐFÑFÔFˆåŒ{×$Ò$ØØ"�?�?Ø˜�KØ#Ø%ð %ñ 
ô 
ˆð �BœG Q¨°ZÐ$@ÑAÔA×HÒHÍÌÑTÔTÑTˆØ�BœG Q¨°[Ð$AÑBÔB×IÒIÍ"Ì*ÑUÔUÑUˆå˜% 1¨°_ÐEÑEÔEˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø0ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r.   N)r
   r   )
rN   rO   rP   Ústaticmethodrt   r€   r…   r‰   rŽ   r’   rQ   r.   r,   rS   rS   ‘   sÔ   € € € € € Øð
ð 
ð 
ñ „\ð
ð. ð 
ð  
ð  
ñ „\ð 
ðD ð!
ð !
ð !
ñ „\ð!
ðF ð
ð 
ð 
ñ „\ð
ð8 ð
ð 
ð 
ñ „\ð
ð6 ð
ð 
ð 
ñ „\ð
ð 
ð 
r.   rS   )Ú
__future__r   Útypingr   Únumpyr   ri   Úonnx.backend.test.case.baser   Úonnx.backend.test.case.noder   r   rS   rQ   r.   r,   ú<module>r™      sÓ   ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ñ ô ð ðDu
ð u
ð u
ð u
ð u
ˆ$ñ u
ô u
ð u
ð u
ð u
r.   