U
    §Ê¹jŸk  ã                   @   s  d dl Z d dlmZmZmZ d dlZd dlmZmZ d dlm	Z	 G dd„ dej
jƒZG dd„ dej
jƒZG d	d
„ d
ej
jƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZd!eeeedœdd„ZG dd„ dej
jƒZG dd„ deƒZG dd„ deƒZdd„ Zejfdd„Zejfdd „ZdS )"é    N)ÚListÚOptionalÚTuple)Ú_VFÚTensor)ÚPackedSequencec                       s\   e Zd ZddgZ‡ fdd„Zejjdd„ ƒZejjdd„ ƒZ	ejjd	d
„ ƒZ
dd„ Z‡  ZS )ÚQuantizedLinearÚscaleÚ
zero_pointc                    sÌ   t ƒ  ¡  t d¡ |j| _|j| _t |jj	tj
d� ¡ ¡\| _| _| _| _tjj| jdd�| _tjj| jdd�| _|jd k	sˆtdƒ‚tjj|jj	tj
d� ¡ dd�| _|  dt | jj	tj
d�¡¡ d S )Nz˜torch.jit.QuantizedLinear is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.Linear instead.©Zmemory_formatF©Zrequires_gradzQuantizedLinear requires a biasÚpacked_tensor_ptr)ÚsuperÚ__init__ÚwarningsÚwarnÚin_featuresÚout_featuresÚtorchÚfbgemm_linear_quantize_weightÚweightÚcloneÚcontiguous_formatÚfloatÚcol_offsetsr	   r
   ÚnnÚ	ParameterÚbiasÚAssertionErrorÚregister_bufferÚfbgemm_pack_quantized_matrix©ÚselfÚother©Ú	__class__© úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/jit/quantized.pyr      s6    
ÿÿûþÿþzQuantizedLinear.__init__c                 C   s   | j  t | j¡¡ d S ©N)r   Úset_r   r    r   ©r"   r&   r&   r'   Ú_unpack.   s    zQuantizedLinear._unpackc                 C   s.   | j  tjtj tt g ¡tjd� 	¡ ¡ d S ©N)Údtype)
r   r)   r   ÚzerosÚjitÚannotater   ÚintÚuint8Údetachr*   r&   r&   r'   Ú_pack2   s     ÿzQuantizedLinear._packc              	   C   s2   t  | ¡ | j| j| j| j| j| j¡}| 	|j
¡S r(   )r   Z)fbgemm_linear_int8_weight_fp32_activationr   r   r   r   r	   r
   r   Útor-   ©r"   ÚinputÚoutr&   r&   r'   Úforward8   s    ù	zQuantizedLinear.forwardc                 C   s   dj f | jŽ}|S )Nz^in_features={in_features}, out_features={out_features}, scale={scale}, zero_point={zero_point}©ÚformatÚ__dict__©r"   Úreprr&   r&   r'   Ú
extra_reprE   s
    ÿÿzQuantizedLinear.extra_repr)Ú__name__Ú
__module__Ú__qualname__Ú__constants__r   r   r/   Úscript_methodr+   r4   r9   r?   Ú__classcell__r&   r&   r$   r'   r   
   s   !


r   c                       sT   e Zd Z‡ fdd„Zejjdd„ ƒZejjdd„ ƒZejjdd„ ƒZ	d	d
„ Z
‡  ZS )ÚQuantizedLinearFP16c                    sŽ   t ƒ  ¡  t d¡ |j| _|j| _|j| _t 	|jj
tjd� ¡ ¡| _|jd k	sZtdƒ‚tjj|jj
tjd� ¡ dd�| _|  d| j¡ d S )Nzœtorch.jit.QuantizedLinearFP16 is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.Linear instead.r   z#QuantizedLinearFP16 requires a biasFr   Úpacked_weight)r   r   r   r   r   r   r   Úoriginal_weightr   Úfbgemm_pack_gemm_matrix_fp16r   r   r   r   r   r   r   r   r!   r$   r&   r'   r   O   s     
ÿÿþzQuantizedLinearFP16.__init__c                 C   s   | j  t | j¡¡ d S r(   )rG   r)   r   rI   rH   r*   r&   r&   r'   r+   b   s    
ÿzQuantizedLinearFP16._unpackc                 C   s.   | j  tjtj tt g ¡tjd� 	¡ ¡ d S r,   )
rG   r)   r   r.   r/   r0   r   r1   r2   r3   r*   r&   r&   r'   r4   h   s     ÿzQuantizedLinearFP16._packc                 C   s   t  | ¡ | j| j¡}|S r(   )r   Z)fbgemm_linear_fp16_weight_fp32_activationr   rG   r   r6   r&   r&   r'   r9   n   s      ÿzQuantizedLinearFP16.forwardc                 C   s   dj f | jŽ}|S )Nz8in_features={in_features}, out_features={out_features}, r:   r=   r&   r&   r'   r?   u   s    ÿzQuantizedLinearFP16.extra_repr)r@   rA   rB   r   r   r/   rD   r+   r4   r9   r?   rE   r&   r&   r$   r'   rF   N   s   


rF   c                       s„   e Zd ZdddddddgZ‡ fdd	„Zd
d„ Zejjdd„ ƒZ	ejjde
e
eddœdd„ƒZejjdd„ ƒZejjdd„ ƒZ‡  ZS )ÚQuantizedRNNCellBaseÚ
input_sizeÚhidden_sizer   Úscale_hhÚscale_ihÚzero_point_ihÚzero_point_hhc                    s.  t ƒ  ¡  t d¡ |j| _|j| _|j| _| js:tdƒ‚t 	|j
jtjd� ¡ ¡\}}| _| _|  d|¡ |  d|¡ t 	|jjtjd� ¡ ¡\}}| _| _|  d|¡ |  d|¡ t | j
¡}|  d|¡ t | j¡}|  d	|¡ tjj|jjtjd� ¡ d
d�| _tjj|jjtjd� ¡ d
d�| _d S )Nzžtorch.jit.QuantizedRNNCellBase is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.RNNCell instead.z&Quantized RNN cells require bias termsr   Ú	weight_ihÚcol_offsets_ihÚ	weight_hhÚcol_offsets_hhÚ	packed_ihÚ	packed_hhFr   )r   r   r   r   rK   rL   r   Ú
ValueErrorr   r   rQ   r   r   r   rN   rO   r   rS   rM   rP   r    r   r   Úbias_ihÚbias_hh)r"   r#   rQ   rR   rS   rT   rU   rV   r$   r&   r'   r   ˆ   sR    
ÿÿûÿûþþzQuantizedRNNCellBase.__init__c                 C   sJ   d}d| j kr | jdk	r |d7 }d| j kr<| jdkr<|d7 }|jf | j ŽS )Nz{input_size}, {hidden_size}r   Tz, bias={bias}ÚnonlinearityÚtanhz, nonlinearity={nonlinearity})r<   r   rZ   r;   )r"   Úsr&   r&   r'   r?   ¸   s    zQuantizedRNNCellBase.extra_reprc                 C   s0   |  d¡| jkr,td|  d¡› d| j› �ƒ‚d S )Né   z'input has inconsistent input_size: got ú, expected )ÚsizerK   ÚRuntimeError)r"   r7   r&   r&   r'   Úcheck_forward_inputÀ   s    ÿz(QuantizedRNNCellBase.check_forward_inputÚ N)r7   ÚhxÚhidden_labelÚreturnc              	   C   sp   |  d¡|  d¡kr:td|  d¡› d|› d|  d¡› �ƒ‚|  d¡| jkrltd|› d|  d¡› d| j› �ƒ‚d S )	Nr   zInput batch size z doesn't match hiddenz batch size r]   Úhiddenz# has inconsistent hidden_size: got r^   )r_   r`   rL   )r"   r7   rc   rd   r&   r&   r'   Úcheck_forward_hiddenÇ   s     ÿÿz)QuantizedRNNCellBase.check_forward_hiddenc                 C   s,   | j  t | j¡¡ | j t | j¡¡ d S r(   )rU   r)   r   r    rQ   rV   rS   r*   r&   r&   r'   r+   Ù   s    zQuantizedRNNCellBase._unpackc                 C   sX   | j  tjtj tt g ¡tjd� 	¡ ¡ | j
 tjtj tt g ¡tjd� 	¡ ¡ d S r,   )rU   r)   r   r.   r/   r0   r   r1   r2   r3   rV   r*   r&   r&   r'   r4   ß   s     ÿ ÿzQuantizedRNNCellBase._pack)rb   )r@   rA   rB   rC   r   r?   r   r/   rD   ra   r   Ústrrg   r+   r4   rE   r&   r&   r$   r'   rJ   }   s0   ù
0
 ÿ  þ
rJ   c                       sP   e Zd ZddddddddgZ‡ fd	d
„Zejjdee	e edœdd„ƒZ
‡  ZS )ÚQuantizedRNNCellrK   rL   r   rM   rN   rO   rP   rZ   c                    s"   t ƒ  |¡ t d¡ |j| _d S )Nzštorch.jit.QuantizedRNNCell is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.RNNCell instead.)r   r   r   r   rZ   r!   r$   r&   r'   r   õ   s
    ÿzQuantizedRNNCell.__init__N©r7   rc   re   c                 C   sæ   |   |¡ |d kr0tj| d¡| j|j|jd�}|  ||d¡ | jdkr†t	 
||| j| j| j| j| j| j| j| j| j| j| j| j¡}n\| jdkrÎt	 ||| j| j| j| j| j| j| j| j| j| j| j| j¡}n|}td| j› �ƒ‚|S )Nr   ©r-   Údevicerb   r[   ZreluzUnknown nonlinearity: )ra   r   r.   r_   rL   r-   rl   rg   rZ   r   Zquantized_rnn_tanh_cellrQ   rS   rX   rY   rU   rV   rR   rT   rN   rM   rO   rP   Zquantized_rnn_relu_cellr`   )r"   r7   rc   Úretr&   r&   r'   r9   ý   s\    
   ÿ
ò
òzQuantizedRNNCell.forward)N)r@   rA   rB   rC   r   r   r/   rD   r   r   r9   rE   r&   r&   r$   r'   ri   é   s   øri   c                       sL   e Zd Z‡ fdd„Zejjdeee	eef  e	eef dœdd„ƒZ
‡  ZS )ÚQuantizedLSTMCellc                    s   t ƒ  |¡ t d¡ d S )Nzœtorch.jit.QuantizedLSTMCell is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.LSTMCell instead.©r   r   r   r   r!   r$   r&   r'   r   .  s    ÿzQuantizedLSTMCell.__init__Nrj   c                 C   s˜   |   |¡ |d kr8tj| d¡| j|j|jd�}||f}|  ||d d¡ |  ||d d¡ t 	||| j
| j| j| j| j| j| j| j| j| j| j| j¡S )Nr   rk   z[0]r]   z[1])ra   r   r.   r_   rL   r-   rl   rg   r   Zquantized_lstm_cellrQ   rS   rX   rY   rU   rV   rR   rT   rN   rM   rO   rP   )r"   r7   rc   r.   r&   r&   r'   r9   5  s6    
   ÿòzQuantizedLSTMCell.forward)N)r@   rA   rB   r   r   r/   rD   r   r   r   r9   rE   r&   r&   r$   r'   rn   -  s    ÿ 
þrn   c                       s<   e Zd Z‡ fdd„Zejjdeee edœdd„ƒZ	‡  Z
S )ÚQuantizedGRUCellc                    s   t ƒ  |¡ t d¡ d S )Nzštorch.jit.QuantizedGRUCell is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.GRUCell instead.ro   r!   r$   r&   r'   r   T  s    ÿzQuantizedGRUCell.__init__Nrj   c                 C   sz   |   |¡ |d kr0tj| d¡| j|j|jd�}|  ||d¡ t 	||| j
| j| j| j| j| j| j| j| j| j| j| j¡S )Nr   rk   rb   )ra   r   r.   r_   rL   r-   rl   rg   r   Zquantized_gru_cellrQ   rS   rX   rY   rU   rV   rR   rT   rN   rM   rO   rP   ©r"   r7   rc   r&   r&   r'   r9   [  s2    
   ÿòzQuantizedGRUCell.forward)N)r@   rA   rB   r   r   r/   rD   r   r   r9   rE   r&   r&   r$   r'   rp   S  s   rp   r]   )ÚtensorÚpermutationÚdimre   c                 C   s   |   ||¡S r(   )Zindex_select)rr   rs   rt   r&   r&   r'   Úapply_permutationu  s    ru   c                	       sä   e Zd Zddddddddd	g	Zejf‡ fd
d„	Zejje	e
e	 ddœdd„ƒZejje	e
e	 eeeef dœdd„ƒZejjde	eeeef eddœdd„ƒZejje	e	e
e	 ddœdd„ƒZejje	e
e	 e	dœdd„ƒZ‡  ZS )ÚQuantizedRNNBaseÚmoderK   rL   Ú
num_layersr   Úbatch_firstÚdropoutÚbidirectionalr-   c                    s¼  t ƒ  ¡  t d¡ ˆj| _ˆj| _ˆj| _ˆj| _ˆj| _ˆj	| _	| jdkrX| j	rXt
‚ˆj| _ˆj| _| jrrdnd}|| _| js†t
‚| jdkr¢| jdkr¢tdƒ‚|tjkrÄ|tjkrÄtd|› �ƒ‚g | _t| jƒD ]â‰ t|ƒD ]Ô}ˆ dkrò| jn| j| }|dk�r
d	nd
‰‡ ‡‡fdd„}|dƒ\}}|dƒ\}	}
|tjk�rXtjj ||	||
¡}n8tjj | ¡ |¡}tjj |	 ¡ |
¡}tjj ||¡}t| dˆ › dˆ› �|ƒ | j |¡ qàqÔd S )Nz’torch.jit.QuantizedRNNBase is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic instead.ÚGRUé   r]   ÚLSTMz.Only LSTM or GRU is supported for QuantizedRNNúUnsupported dtype: r   Z_reverserb   c                    sD   d| › dˆ › ˆ› �}d| › dˆ › ˆ› �}t ˆ|ƒ}t ˆ|ƒ}||fS )NZweight_Z_lZbias_)Úgetattr)ZihhhZweight_nameZ	bias_namer   r   ©Úlayerr#   Úsuffixr&   r'   Úget_weight_bias«  s
    

z2QuantizedRNNBase.__init__.<locals>.get_weight_biasZihÚhhZcell_params_Ú_)r   r   r   r   rw   rK   rL   rx   r   ry   r   rz   r{   r-   r`   r   Úint8Úfloat16Úall_weightsÚrangeZopsZ	quantizedZmake_quantized_cell_paramsZlinear_prepack_fp16r   Zmake_quantized_cell_params_fp16ÚsetattrÚappend)r"   r#   r-   Únum_directionsÚ	directionZlayer_input_sizer„   rQ   rX   rS   rY   Zcell_paramsrU   rV   r$   r�   r'   r   †  sf    
ÿ


ÿ   ÿ ÿ ÿ ÿzQuantizedRNNBase.__init__N)r7   Úbatch_sizesre   c                 C   sd   |d k	rdnd}|  ¡ |kr4td|› d|  ¡ › �ƒ‚| j| d¡kr`td| j› d| d¡› �ƒ‚d S )Nr}   é   zinput must have z dimensions, got éÿÿÿÿz5input.size(-1) must be equal to input_size. Expected z, got )rt   r`   rK   r_   )r"   r7   r�   Zexpected_input_dimr&   r&   r'   Úcheck_inputÉ  s    ÿÿzQuantizedRNNBase.check_inputc                 C   sT   |d k	rt |d ƒ}n| jr&| d¡n| d¡}| jr:dnd}| j| || jf}|S )Nr   r]   r}   )r1   ry   r_   r{   rx   rL   )r"   r7   r�   Z
mini_batchr�   Úexpected_hidden_sizer&   r&   r'   Úget_expected_hidden_sizeÕ  s    ýz)QuantizedRNNBase.get_expected_hidden_sizeúExpected hidden size {}, got {})rc   r“   Úmsgre   c                 C   s(   |  ¡ |kr$t| |t|  ¡ ƒ¡ƒ‚d S r(   )r_   r`   r;   Úlist)r"   rc   r“   r–   r&   r&   r'   Úcheck_hidden_sizeå  s    z"QuantizedRNNBase.check_hidden_size©r7   rf   r�   re   c                 C   s,   |   ||¡ |  ||¡}| j||dd� d S )Nr•   )r–   ©r’   r”   r˜   ©r"   r7   rf   r�   r“   r&   r&   r'   Úcheck_forward_argsï  s      ÿz#QuantizedRNNBase.check_forward_args©rc   rs   re   c                 C   s   |d kr|S t ||ƒS r(   ©ru   ©r"   rc   rs   r&   r&   r'   Úpermute_hiddenù  s    zQuantizedRNNBase.permute_hidden)r•   )r@   rA   rB   rC   r   r‡   r   r/   rD   r   r   r’   r   r1   r”   rh   r˜   rœ   r    rE   r&   r&   r$   r'   rv   y  sD   ÷C þ üû	  þ	rv   c                       s<  e Zd ZdddgiZ‡ fdd„Zejjee	e
eef  e	e ee	e e
ee
eef f dœdd„ƒZejjdee	e
eef  e
ee
eef f d
œdd„ƒZejjdee	e
eef  e
ee
eef f d
œdd„ƒZejje
eef e	e e
eef dœdd„ƒZejjee
eef e	e d	dœdd„ƒZddd„Z‡  ZS )ÚQuantizedLSTMr9   Úforward_packedÚforward_tensorc                    s   t ƒ  ||¡ t d¡ d S )Nz”torch.jit.QuantizedLSTM is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.LSTM instead.ro   )r"   r#   r-   r$   r&   r'   r     s    ÿzQuantizedLSTM.__init__©r7   rc   r�   Úmax_batch_sizeÚsorted_indicesre   c                 C   s¶   |d kr@| j rdnd}tj| j| || j|j|jd�}||f}n|  ||¡}|  |||¡ |d ksft	‚tj
||| j| j| jt| jƒ| j| j | j| jdd�}|d }	|dd … }
|	|
fS )Nr}   r]   rk   F)r-   Zuse_dynamicr   )r{   r   r.   rx   rL   r-   rl   r    rœ   r   Zquantized_lstmr‰   r   r   rz   Útrainingry   )r"   r7   rc   r�   r¥   r¦   r�   r.   ÚresultÚoutputrf   r&   r&   r'   Úforward_impl
  s:    	û
õzQuantizedLSTM.forward_implNrj   c           	      C   sL   d }| j r| d¡n| d¡}d }d }|  |||||¡\}}||  ||¡fS ©Nr   r]   ©ry   r_   rª   r    ©	r"   r7   rc   r�   r¥   r¦   Úunsorted_indicesr©   rf   r&   r&   r'   r£   6  s        ÿzQuantizedLSTM.forward_tensorc           
      C   sL   |\}}}}t |d ƒ}|  |||||¡\}}	t||||ƒ}||  |	|¡fS ©Nr   ©r1   rª   r   r    ©
r"   r7   rc   Zinput_r�   r¦   r®   r¥   r©   rf   r&   r&   r'   r¢   E  s        ÿzQuantizedLSTM.forward_packedr�   c                 C   s(   |d kr|S t |d |ƒt |d |ƒfS r«   rž   rŸ   r&   r&   r'   r    S  s     ÿzQuantizedLSTM.permute_hiddenr™   c                 C   s@   |   ||¡ |  ||¡}|  |d |d¡ |  |d |d¡ d S )Nr   z"Expected hidden[0] size {}, got {}r]   z"Expected hidden[1] size {}, got {}rš   r›   r&   r&   r'   rœ   ]  s      ÿ  ÿz QuantizedLSTM.check_forward_argsc                 C   s&   t |tƒr|  ||¡S |  ||¡S d S r(   ©Ú
isinstancer   r¢   r£   rq   r&   r&   r'   r9   n  s    
zQuantizedLSTM.forward)N)N)N)r@   rA   rB   Ú__overloads__r   r   r/   rD   r   r   r   r1   rª   r£   r   r¢   r    rœ   r9   rE   r&   r&   r$   r'   r¡      sH   ù+ ÿ þ ÿ þ
 
þ	
ûr¡   c                	       s¶   e Zd ZdddgiZ‡ fdd„Zejjee	e e	e e
e	e eeef dœdd„ƒZejjdee	e eeef d
œdd„ƒZejjdee	e eeef d
œdd„ƒZddd„Z‡  ZS )ÚQuantizedGRUr9   r¢   r£   c                    s   t ƒ j||Ž t d¡ d S )Nz’torch.jit.QuantizedGRU is deprecated and will be removed in an upcoming PyTorch release. Please use the torch.ao.nn.quantized.dynamic.GRU instead.ro   )r"   ÚargsÚkwargsr$   r&   r'   r   x  s    ÿzQuantizedGRU.__init__r¤   c           
      C   sÊ   |d kr8| j rdnd}tj| j| || j|j|jd�}n|  ||¡}|  |||¡ |d krˆt 	||| j
| j| jt| jƒ| j| j | j¡	}n*t 	|||| j
| j| jt| jƒ| j| j ¡	}|d }|d }	||	fS )Nr}   r]   rk   r   )r{   r   r.   rx   rL   r-   rl   r    rœ   Zquantized_grur‰   r   r   rz   r§   ry   )
r"   r7   rc   r�   r¥   r¦   r�   r¨   r©   rf   r&   r&   r'   rª     sJ    	û
÷÷zQuantizedGRU.forward_implNrj   c           	      C   sL   d }| j r| d¡n| d¡}d }d }|  |||||¡\}}||  ||¡fS r«   r¬   r­   r&   r&   r'   r£   µ  s        ÿzQuantizedGRU.forward_tensorc           
      C   sL   |\}}}}t |d ƒ}|  |||||¡\}}	t||||ƒ}||  |	|¡fS r¯   r°   r±   r&   r&   r'   r¢   Ã  s        ÿzQuantizedGRU.forward_packedc                 C   s&   t |tƒr|  ||¡S |  ||¡S d S r(   r²   rq   r&   r&   r'   r9   Ñ  s    
zQuantizedGRU.forward)N)N)N)r@   rA   rB   r´   r   r   r/   rD   r   r   r1   r   rª   r£   r   r¢   r9   rE   r&   r&   r$   r'   rµ   u  s2   
ù5 ÿ 
þ ÿ 
þrµ   c                 C   s¦   t  d¡ i }|  ¡ D ]*\}}|| kr(qt|ƒ}||k	r|||< q| ¡ D ]\}}t| ||ƒ qJt| tjj	ƒrvt
| ƒS t| tjjƒrŒt| ƒS t| tjjƒr¢t| ƒS | S )Nzvquantize_rnn_cell_modules function has been deprecated. Please use torch.ao.quantization.quantize_dynamic API instead.)r   r   Únamed_modulesÚquantize_rnn_cell_modulesÚitemsr‹   r³   r   r   ZLSTMCellrn   ZGRUCellrp   ZRNNCellri   )ÚmoduleÚreassignÚnameÚmodÚnew_modr&   r&   r'   r¹   Ø  s&    ÿ
r¹   c                 C   s¦   t  d¡ i }|  ¡ D ],\}}|| kr(qt||ƒ}||k	r|||< q| ¡ D ]\}}t| ||ƒ qLt| tjj	ƒr¢|tj
kr‚t| ƒS |tjkr”t| ƒS td|› �ƒ‚| S )Nztquantize_linear_modules function has been deprecated. Please use torch.ao.quantization.quantize_dynamic API instead.r   )r   r   r¸   Úquantize_linear_modulesrº   r‹   r³   r   r   ZLinearr‡   r   rˆ   rF   r`   ©r»   r-   r¼   r½   r¾   r¿   r&   r&   r'   rÀ   ï  s&    ÿ



rÀ   c                 C   s¶   t  d¡ i }|  ¡ D ],\}}|| kr(qt||ƒ}||k	r|||< q| ¡ D ]\}}t| ||ƒ qLt| tjj	ƒrœ|tj
kr’|tjkr’td|› �ƒ‚t| |ƒS t| tjjƒr²t| ƒS | S )Nzqquantize_rnn_modules function has been deprecated. Please use torch.ao.quantization.quantize_dynamic API instead.r   )r   r   r¸   Úquantize_rnn_modulesrº   r‹   r³   r   r   r~   r‡   rˆ   r`   r¡   r|   rµ   rÁ   r&   r&   r'   rÂ   	  s&    ÿ


rÂ   )r]   )r   Útypingr   r   r   r   r   r   Ztorch.nn.utils.rnnr   r/   ZScriptModuler   rF   rJ   ri   rn   rp   r1   ru   rv   r¡   rµ   r¹   r‡   rÀ   rÂ   r&   r&   r&   r'   Ú<module>   s$   D/lD&" uc