§
    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                  ó4   — e Zd Zdd„Zdd„Zdd	„Zd
„ Zdd„ZdS )Ú	GRUHelperÚparamsr   ÚreturnÚNonec                ó<  — d}d}d}d}d}d}d}d}	d	}
|||g}|D ]}||v sJ d
|› �¦   «         ‚Œ||         j         d         | _        |                     |d¦  «        | _        ||         j         d         }|                     |	d¦  «        }||         }|                     |¦  «        }|dk    r.t	          j        |dd¦  «        }|�t	          j        |dd¦  «        }|j         d         }|                     |t	          j        | j        d|
z  |z  f|j        ¬¦  «        ¦  «        }|€#t	          j        | j        ||f|j        ¬¦  «        }|                     |d¦  «        }|| _        ||         | _	        ||         | _
        || _        || _        || _        || _        d S )NÚXÚWÚRÚBÚ	initial_hÚ	directionÚlinear_before_resetÚlayouté   zMissing Required Input: r   Úforwardéÿÿÿÿé   é   ©Údtype)ÚshapeÚnum_directionsÚgetr   ÚnpÚswapaxesÚzerosr   r   r   r   r   ÚH_0ÚLBRÚLAYOUT)Úselfr	   r   r   r   r   r"   Ú	DIRECTIONr#   r$   Únumber_of_gatesÚrequired_inputsÚiÚhidden_sizer   ÚxÚh_0Ú
batch_sizeÚbÚlbrs                       úPC:\Projects\Historical\venv\Lib\site-packages\onnx/backend/test/case/node/gru.pyÚ__init__zGRUHelper.__init__   sÎ  € àˆØˆØˆØˆØˆØˆ	Ø#ˆØˆØˆà˜a ˜)ˆØ ð 	?ð 	?ˆAØ˜�;�;�;Ð >¸1Ð >Ð >‘;”;�;�;à$ Qœiœo¨aÔ0ˆÔØŸš 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¨/Ñ&9¸KÑ&GÐHØ”gðñ ô ñ
ô 
ˆð ˆ;Ý”(ØÔ$ j°+Ð>Ø”gðñ ô ˆCð �jŠj˜˜aÑ Ô ˆàˆŒØ˜”ˆŒØ˜”ˆŒØˆŒØˆŒØˆŒØˆŒˆˆó    r+   ú
np.ndarrayc                ó8   — ddt          j        | ¦  «        z   z  S )Nr   )r   Úexp©r%   r+   s     r0   ÚfzGRUHelper.fD   s   € Ø�A�œ ˜r™
œ
‘NÑ#Ð#r2   c                ó*   — t          j        |¦  «        S )N)r   Útanhr6   s     r0   ÚgzGRUHelper.gG   s   € ÝŒw�q‰zŒzÐr2   c                óô  — g }t          j        |d¦  «        \  }}}	t          j        |d¦  «        \  }
}}t          j        |d¦  «        \  }}}}}}t          j        t          j        ||f¦  «        ¦  «        }t          j        t          j        |
|f¦  «        ¦  «        }t          j        t          j        ||f¦  «        t          j        ||f¦  «        ¦  «        }|}|D �]z}t          j        ||¦  «        t          j        ||¦  «        z   |z   }t          j        |dd¦  «        \  }}|                      |¦  «        }|                      |¦  «        }|                      t          j        |t          j        |	¦  «        ¦  «        t          j        ||z  t          j        |¦  «        ¦  «        z   |z   |z   ¦  «        }|                      t          j        |t          j        |	¦  «        ¦  «        |t          j        |t          j        |¦  «        ¦  «        |z   z  z   |z   ¦  «        }| j        r|n|}d|z
  |z  ||z  z   }| 	                    |¦  «         |}�Œ|t          j
        |d¬¦  «        }|} || fS )z©Run a single forward pass of the GRU.

        Assumes that the num_directions axis has been squeezed out of the
        inputs. (And returns Y, Yh without it.)
        r   é   r   r   r   r   ©Úaxis)r   ÚsplitÚ	transposeÚconcatenateÚaddÚdotr7   r:   r#   ÚappendÚstack)!r%   r   r   r   r   r"   Úh_listÚw_zÚw_rÚw_hÚr_zÚr_rÚr_hÚw_bzÚw_brÚw_bhÚr_bzÚr_brÚr_bhÚgates_wÚgates_rÚgates_bÚH_tr+   ÚgatesÚzÚrÚ	h_defaultÚh_linearÚhÚHÚYÚY_hs!                                    r0   Ú_run_forwardzGRUHelper._run_forwardJ   sG  € ð ˆåœ( 1 a™.œ.‰ˆˆc�3Ýœ( 1 a™.œ.‰ˆˆc�3Ý/1¬x¸¸1©~¬~Ñ,ˆˆt�T˜4  tå”,�rœ~¨s°C¨jÑ9Ô9Ñ:Ô:ˆÝ”,�rœ~¨s°C¨jÑ9Ô9Ñ:Ô:ˆÝ”&�œ¨¨t¨Ñ5Ô5µr´~ÀtÈTÀlÑ7SÔ7SÑTÔTˆàˆØð 	ñ 	ˆAÝ”F˜1˜gÑ&Ô&­¬°°WÑ)=Ô)=Ñ=ÀÑGˆEÝ”8˜E 1 bÑ)Ô)‰DˆAˆqØ—’�q‘	”	ˆAØ—’�q‘	”	ˆAØŸšÝ”�q�"œ, sÑ+Ô+Ñ,Ô,Ý”&˜˜S™¥"¤,¨sÑ"3Ô"3Ñ4Ô4ñ5àñð ññô ˆIð —v’vÝ”�q�"œ, sÑ+Ô+Ñ,Ô,Ø•r”v˜c¥2¤<°Ñ#4Ô#4Ñ5Ô5¸Ñ<Ñ=ñ>àññô ˆHð
 !œHÐ3��¨)ˆAØ�Q‘˜!‘˜a #™gÑ%ˆAØ�MŠM˜!ÑÔÐØˆC‰CåŒH�V !Ð$Ñ$Ô$ˆØˆØ�#ˆvˆr2   útuple[np.ndarray, np.ndarray]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   Úreverser=   Úbidirectional)r   r   r   r   )r   r   r   )r   r`   r   r   r   r   r"   r   Úexpand_dimsÚfliprE   r$   r@   )r%   r^   r_   ÚYfÚYf_hÚYbÚYb_hs          r0   ÚstepzGRUHelper.stept   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ˆr2   N)r	   r   r
   r   )r+   r3   r
   r3   )r
   ra   )Ú__name__Ú
__module__Ú__qualname__r1   r7   r:   r`   rk   © r2   r0   r   r      su   € € € € € ð2ð 2ð 2ð 2ðh$ð $ð $ð $ðð ð ð ð(ð (ð (ðT.ð .ð .ð .ð .ð .r2   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 )ÚGRUr
   r   c                 ó|  — t          j        ddgddgddggg¦  «                             t           j        ¦  «        } d}d}d	}d
}t          j                             dg d¢ddg|¬¦  «        }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }t          | ||¬¦  «        }| 	                    ¦   «         \  }	}
t          || ||g|
                     t           j        ¦  «        gd¬¦  «         d S )Nç      ð?ç       @ç      @ç      @ç      @ç      @r   é   çš™™™™™¹?r   rq   ©r   r   r   Ú r_   ©ÚinputsÚoutputsr*   r   Útest_gru_defaults©r~   r   Úname©r   ÚarrayÚastypeÚfloat32ÚonnxÚhelperÚ	make_nodeÚonesr   rk   r   )ÚinputÚ
input_sizer*   Úweight_scaler'   Únoder   r   ÚgruÚ_r_   s              r0   Úexport_defaultszGRU.export_defaults¦   sS  € å”˜C ˜:¨¨S z°C¸°:Ð>Ð?Ñ@Ô@×GÒGÍÌ
ÑSÔSˆàˆ
ØˆØˆØˆåŒ{×$Ò$Ø˜/˜/˜/°B¸°;ÈKð %ñ 
ô 
ˆð �2œ7Ø� +Ñ-¨zÐ:ñ
ô 
ç
Š&•”Ñ
Ô
ñˆð �2œ7Ø� +Ñ-¨{Ð;ñ
ô 
ç
Š&•”Ñ
Ô
ñˆõ ˜% 1¨Ð*Ñ*Ô*ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø$ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r2   c                 ó’  — t          j        g d¢g d¢g d¢gg¦  «                             t           j        ¦  «        } d}d}d}d}d}t          j                             dg d¢dd	g|¬
¦  «        }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }|t          j        d||z  f¦  «                             t           j        ¦  «        z  }	t          j        d||z  f¦  «                             t           j        ¦  «        }
t          j	        |	|
fd¬¦  «        }t          | |||¬¦  «        }|                     ¦   «         \  }}t          || |||g|                     t           j        ¦  «        gd¬¦  «         d S )N©rs   rt   ru   ©rv   rw   rx   ©g      @g       @g      "@r   rz   rq   ©r   r   r   r   r|   r_   r}   r   r=   Útest_gru_with_initial_biasr�   )r   r„   r…   r†   r‡   rˆ   r‰   rŠ   r!   rA   r   rk   r   )r‹   rŒ   r*   r�   Úcustom_biasr'   rŽ   r   r   ÚW_BÚR_Br   r�   r�   r_   s                  r0   Úexport_initial_biaszGRU.export_initial_biasÃ   sá  € å”˜?˜?˜?¨O¨O¨O¸_¸_¸_ÐMÐNÑOÔO×VÒVÝŒJñ
ô 
ˆð ˆ
ØˆØˆØˆØˆåŒ{×$Ò$ØØ'Ð'Ð'Ø˜�KØ#ð	 %ñ 
ô 
ˆð �2œ7Ø� +Ñ-¨zÐ:ñ
ô 
ç
Š&•”Ñ
Ô
ñˆð �2œ7Ø� +Ñ-¨{Ð;ñ
ô 
ç
Š&•”Ñ
Ô
ñˆð
 �BœG Q¨¸+Ñ(EÐ$FÑGÔG×NÒNÝŒJñ
ô 
ñ 
ˆõ Œh˜˜?¨[Ñ8Ð9Ñ:Ô:×AÒAÅ"Ä*ÑMÔMˆÝŒN˜C ˜:¨AÐ.Ñ.Ô.ˆå˜% 1¨¨QÐ/Ñ/Ô/ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a Ð#Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø-ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r2   c                 óÜ  — t          j        g d¢g d¢g d¢gg d¢g d¢g d¢gg¦  «                             t           j        ¦  «        } d}d}d}t          j                             d	g d
¢ddg|¬¦  «        }t           j                             d||z  |¦  «                             t           j        ¦  «        }t           j                             d||z  |¦  «                             t           j        ¦  «        }t           j                             d||z  ¦  «                             t           j        ¦  «        }t           j                             d||z  ¦  «                             t           j        ¦  «        }t          j	        ||fd¬¦  «        }	t          | |||	¬
¦  «        }
|
                     ¦   «         \  }}t          || |||	g|                     t           j        ¦  «        gd¬¦  «         d S )Nr“   r”   r•   )g      $@g      &@g      (@)g      *@g      ,@g      .@)g      0@g      1@g      2@r   ry   rq   r–   r|   r_   r}   r   r=   Útest_gru_seq_lengthr�   )r   r„   r…   r†   r‡   rˆ   r‰   ÚrandomÚrandnrA   r   rk   r   )r‹   rŒ   r*   r'   rŽ   r   r   r™   rš   r   r�   r�   r_   s                r0   Úexport_seq_lengthzGRU.export_seq_lengthí   så  € å”à �� / / /°?°?°?ÐCØ#Ð#Ð#Ð%7Ð%7Ð%7Ð9KÐ9KÐ9KÐLðñ
ô 
÷
 Š&•”Ñ
Ô
ð 	ð ˆ
ØˆØˆåŒ{×$Ò$ØØ'Ð'Ð'Ø˜�KØ#ð	 %ñ 
ô 
ˆõ ŒI�OŠO˜A˜°Ñ<¸jÑIÔI×PÒPÝŒJñ
ô 
ˆõ ŒI�OŠO˜A˜°Ñ<¸kÑJÔJ×QÒQÝŒJñ
ô 
ˆõ
 Œi�oŠo˜a °;Ñ!>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝŒi�oŠo˜a °;Ñ!>Ñ?Ô?×FÒFÅrÄzÑRÔRˆÝŒN˜C ˜:¨AÐ.Ñ.Ô.ˆå˜% 1¨¨QÐ/Ñ/Ô/ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a Ð#Ø—Z’Z¥¤
Ñ+Ô+Ð,Ø&ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r2   c                 óÄ  — t          j        ddggddggddggg¦  «                             t           j        ¦  «        } d}d}d	}d
}d}t          j                             dg d¢ddg||¬¦  «        }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }t          | |||¬¦  «        }	|	 	                    ¦   «         \  }
}t          || ||g|
                     t           j        ¦  «        |                     t           j        ¦  «        gd¬¦  «         d S )Nrs   rt   ru   rv   rw   rx   r   r<   r   gš™™™™™É?r   rq   r{   r^   r_   )r~   r   r*   r   )r   r   r   r   Útest_gru_batchwiser�   rƒ   )r‹   rŒ   r*   r'   r�   r   rŽ   r   r   r�   r^   r_   s               r0   Úexport_batchwisezGRU.export_batchwise  ss  € å”˜C ˜:˜,¨#¨s¨¨¸¸S°z°lÐCÑDÔD×KÒKÍBÌJÑWÔWˆàˆ
ØˆØˆØˆØˆåŒ{×$Ò$ØØ"�?�?Ø˜%�LØ#Øð %ñ 
ô 
ˆð �2œ7Ø� +Ñ-¨zÐ:ñ
ô 
ç
Š&•”Ñ
Ô
ñˆð �2œ7Ø� +Ñ-¨{Ð;ñ
ô 
ç
Š&•”Ñ
Ô
ñˆõ ˜% 1¨°&Ð9Ñ9Ô9ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—X’X�bœjÑ)Ô)¨3¯:ª:µb´jÑ+AÔ+AÐBØ%ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r2   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|d¬¦  «        }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }t          | ||d¬¦  «        }| 	                    ¦   «         \  }	}
t          || ||g|	                     t           j        ¦  «        |
                     t           j        ¦  «        gd¬¦  «         dS )z*Test case for direction=reverse attribute.rs   rt   ru   rv   rw   rx   r   ry   rz   r   rq   r{   r^   r_   rc   ©r~   r   r*   r   r   ©r   r   r   r   Útest_gru_reverser�   Nrƒ   )r‹   rŒ   r*   r�   r'   rŽ   r   r   r�   r^   r_   s              r0   Úexport_reversezGRU.export_reverse8  sp  € õ ”˜C ˜:˜,¨#¨s¨¨¸¸S°z°lÐCÑDÔD×KÒKÍBÌJÑWÔWˆàˆ
ØˆØˆØˆåŒ{×$Ò$ØØ"�?�?à˜%�LØ#Øð %ñ 
ô 
ˆð �2œ7Ø� +Ñ-¨zÐ:ñ
ô 
ç
Š&•”Ñ
Ô
ñˆð �2œ7Ø� +Ñ-¨{Ð;ñ
ô 
ç
Š&•”Ñ
Ô
ñˆõ ˜% 1¨°YÐ?Ñ?Ô?ˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—X’X�bœjÑ)Ô)¨3¯:ª:µb´jÑ+AÔ+AÐBØ#ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r2   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        ¬
¦  «        }d}t          j                             dg d¢ddg|d¬¦  «        }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }|t          j        d||z  |f¦  «                             t           j        ¦  «        z  }t          | ||d¬¦  «        }| 	                    ¦   «         \  }	}
t          || ||g|	                     t           j        ¦  «        |
                     t           j        ¦  «        gd¬¦  «         dS )z0Test case for direction=bidirectional attribute.rs   rt   ru   rv   rw   rx   r   ry   g      à?r   r   rq   r{   r^   r_   rd   r¥   r   r¦   Útest_gru_bidirectionalr�   Nrƒ   )r‹   rŒ   r*   Úweight_scalesr'   rŽ   r   r   r�   r^   r_   s              r0   Úexport_bidirectionalzGRU.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ˆØˆåŒ{×$Ò$ØØ"�?�?Ø˜%�LØ#Ø%ð %ñ 
ô 
ˆð �BœGØ� +Ñ-¨zÐ:ñ
ô 
ç
Š&•”Ñ
Ô
ñˆð �BœGØ� +Ñ-¨{Ð;ñ
ô 
ç
Š&•”Ñ
Ô
ñˆõ ˜% 1¨°_ÐEÑEÔEˆØ—’‘”‰ˆˆ3ÝØØ˜1˜a�=Ø—X’X�bœjÑ)Ô)¨3¯:ª:µb´jÑ+AÔ+AÐBØ)ð		
ñ 	
ô 	
ð 	
ð 	
ð 	
r2   N)r
   r   )
rl   rm   rn   Ústaticmethodr‘   r›   r    r£   r¨   r¬   ro   r2   r0   rq   rq   ¥   sÖ   € € € € € Øð
ð 
ð 
ñ „\ð
ð8 ð'
ð '
ð '
ñ „\ð'
ðR ð&
ð &
ð &
ñ „\ð&
ðP ð
ð 
ð 
ñ „\ð
ðB ð!
ð !
ð !
ñ „\ð!
ðF ð"
ð "
ð "
ñ „\ð"
ð "
ð "
r2   rq   )Ú
__future__r   Útypingr   Únumpyr   r‡   Úonnx.backend.test.case.baser   Úonnx.backend.test.case.noder   r   rq   ro   r2   r0   ú<module>r³      sÓ   ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .ðSð Sð Sð Sð Sñ Sô Sð SðlZ
ð Z
ð Z
ð Z
ð Z
ˆ$ñ Z
ô Z
ð Z
ð Z
ð Z
r2   