U
    <c                     @   sT   d dl Z d dlm  m  m  mZ d dlm  m  mZ	 G dd dej
ZdS )    Nc                       sj   e Zd ZdZejZdejf fdd	Z	ej
ej
dddZdd	 Ze fd
dZe fddZ  ZS )
LinearReLUa.  
    A LinearReLU module fused from Linear and ReLU modules that can be used
    for dynamic quantization.
    Supports both, FP16 and INT8 quantization.

    We adopt the same interface as :class:`torch.ao.nn.quantized.dynamic.Linear`.

    Attributes:
        Same as torch.ao.nn.quantized.dynamic.Linear

    Examples::

        >>> m = nn.intrinsic.quantized.dynamic.LinearReLU(20, 30)
        >>> input = torch.randn(128, 20)
        >>> # xdoctest: +SKIP
        >>> output = m(input)
        >>> print(output.size())
        torch.Size([128, 30])
    Tc                    s   t  |||| d S N)super__init__)selfZin_featuresZout_featuresZbiasdtype	__class__ \/tmp/pip-unpacked-wheel-gikjz4vx/torch/nn/intrinsic/quantized/dynamic/modules/linear_relu.pyr      s    zLinearReLU.__init__)xreturnc                 C   s`   | j jtjkr(tjjj|| j j dd}n,| j jtjkrLtjj|| j j }nt	d|
|jS )NT)Zreduce_rangez3Unsupported dtype on dynamic quantized linear relu!)Z_packed_paramsr   torchqint8ops	quantizedZlinear_relu_dynamicZfloat16Zlinear_relu_dynamic_fp16RuntimeErrorto)r   r   Yr
   r
   r   forward   s       zLinearReLU.forwardc                 C   s   dS )NZDynamicQuantizedLinearReLUr
   )r   r
   r
   r   	_get_name*   s    zLinearReLU._get_namec                    s   t t| |S r   )r   r   
from_float)clsmodr   r
   r   r   -   s    zLinearReLU.from_floatc                    s   t  |d S )Nr   )r   from_reference)r   Zref_qlinear_relur   r
   r   r   1   s    zLinearReLU.from_reference)__name__
__module____qualname____doc__nnir   Z_FLOAT_MODULEr   r   r   ZTensorr   r   classmethodr   r   __classcell__r
   r
   r   r   r      s   r   )r   Ztorch.ao.nn.quantized.dynamicZaonnr   ZdynamicZnnqdZtorch.ao.nn.intrinsicZ	intrinsicr   ZLinearr   r
   r
   r
   r   <module>   s   