§
    Ó˜ºh�d  ã                   ój  — d Z ddlZddlZddlmZmZmZmZm	Z	 ddl
mZ ddlZddlmZ g d¢Z ed¦  «        Z ed¦  «        Zed	         Zed
         Z	 d9dedededeej                 def
d„Z	 d9dedededeej                 def
d„Z	 d9dedededededeej                 defd„Zdededefd„Zdedefd„Z	 d9dedee	eef                  defd„Z	 	 	 d:dedededeej                 def
d„Z	 	 	 d:dedededeej                 def
d„Z	 	 	 	 	 d;dedededededeej                 defd!„Zdededefd"„Zdedefd#„Z dedefd$„Z!dedefd%„Z"d<ded'edefd(„Z#dede$eef         fd)„Z%	 	 d=ded*edeej                 defd+„Z&	 	 d=ded*edeej                 defd,„Z'ded-edefd.„Z(	 	 	 	 d>deded-ededeej                 defd1„Z)	 	 	 	 d>deded-ededeej                 defd2„Z*	 	 d?ded*edeej                 defd3„Z+	 	 d@ded5ededeej                 def
d6„Z,d7eeef         deeef         fd8„Z- e-e¦  «        Z. e-e¦  «        Z/ e-e¦  «        Z0 e-e"¦  «        Z1 e-e#¦  «        Z2 e-e&¦  «        Z3 e-e'¦  «        Z4 e-e)¦  «        Z5 e-e*¦  «        Z6 e-e+¦  «        Z7 e-e,¦  «        Z8dS )AzHThis file contains utilities for initializing neural network parameters.é    N)ÚCallableÚLiteralÚOptionalÚTypeVarÚUnion)Ú	ParamSpec)ÚTensor)Úcalculate_gainÚuniform_Únormal_Útrunc_normal_Ú	constant_Úones_Úzeros_Úeye_Údirac_Úxavier_uniform_Úxavier_normal_Úkaiming_uniform_Úkaiming_normal_Úorthogonal_Úsparse_ÚuniformÚnormalÚconstantÚeyeÚdiracÚxavier_uniformÚxavier_normalÚkaiming_uniformÚkaiming_normalÚ
orthogonalÚsparseÚ_RÚ_P)ÚlinearÚconv1dÚconv2dÚconv3dÚconv_transpose1dÚconv_transpose2dÚconv_transpose3dÚsigmoidÚtanhÚreluÚ
leaky_reluÚselu)Úfan_inÚfan_outÚtensorÚaÚbÚ	generatorÚreturnc                 óŒ   — t          j        ¦   «         5  |                      |||¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S ©N©r7   )ÚtorchÚno_gradr   ©r4   r5   r6   r7   s       úU/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/torch/nn/init.pyÚ_no_grad_uniform_r@   D   s‰   € õ 
Œ‰Œð :ð :Ø�Š˜q !¨yˆÑ9Ô9ð:ð :ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð :ð :ó   ”9¹=Á =ÚmeanÚstdc                 óŒ   — t          j        ¦   «         5  |                      |||¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S r:   )r<   r=   r   ©r4   rB   rC   r7   s       r?   Ú_no_grad_normal_rF   K   s‰   € õ 
Œ‰Œð >ð >Ø�~Š~˜d C°9ˆ~Ñ=Ô=ð>ð >ð >ð >ñ >ô >ð >ð >ð >ð >ð >ð >øøøð >ð >ð >ð >ð >ð >rA   c                 ó@  — dt           dt           fd„}||d|z  z
  k     s||d|z  z   k    rt          j        dd¬¦  «         t          j        ¦   «         5   |||z
  |z  ¦  «        } |||z
  |z  ¦  «        }|                      d|z  dz
  d|z  dz
  |¬¦  «         |                      ¦   «          |                      |t          j	        d	¦  «        z  ¦  «         |  
                    |¦  «         |                      ||¬
¦  «         | cd d d ¦  «         S # 1 swxY w Y   d S )NÚxr8   c                 ó`   — dt          j        | t          j        d¦  «        z  ¦  «        z   dz  S )Nç      ð?ç       @)ÚmathÚerfÚsqrt)rH   s    r?   Únorm_cdfz(_no_grad_trunc_normal_.<locals>.norm_cdf^   s)   € à•d”h˜q¥4¤9¨S¡>¤>Ñ1Ñ2Ô2Ñ2°cÑ9Ð9ó    é   zjmean is more than 2 std from [a, b] in nn.init.trunc_normal_. The distribution of values may be incorrect.©Ú
stacklevelé   r;   rK   )ÚminÚmax)ÚfloatÚwarningsÚwarnr<   r=   r   Úerfinv_Úmul_rL   rN   Úadd_Úclamp_)	r4   rB   rC   r5   r6   r7   rO   ÚlÚus	            r?   Ú_no_grad_trunc_normal_r`   U   sš  € ð:•Eð :�eð :ð :ð :ð :ð 	ˆq�1�s‘7‰{ÒÐ  q¨1¨s©7¡{Ò 2Ð 2ÝŒð;àð	
ñ 	
ô 	
ð 	
õ 
Œ‰Œð ð ð ˆH�a˜$‘h #Ñ%Ñ&Ô&ˆØˆH�a˜$‘h #Ñ%Ñ&Ô&ˆð 	�Š˜˜A™ ™	 1 q¡5¨1¡9¸	ˆÑBÔBÐBð 	�ŠÑÔÐð 	�Š�C�$œ) C™.œ.Ñ(Ñ)Ô)Ð)Ø�Š�DÑÔÐð 	�Š˜! ˆÑ#Ô#Ð#Øð+ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁB2DÄDÄDÚvalc                 ó†   — t          j        ¦   «         5  |                      |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S ©N)r<   r=   Úfill_©r4   ra   s     r?   Ú_no_grad_fill_rf   �   s�   € Ý	Œ‰Œð !ð !Ø�|Š|˜CÑ Ô ð!ð !ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð !ð !s   ”6¶:½:c                 ó„   — t          j        ¦   «         5  |                      ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S rc   )r<   r=   Úzero_©r4   s    r?   Ú_no_grad_zero_rj   †   s}   € Ý	Œ‰Œð ð Ø�|Š|‰~Œ~ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ”5µ9¼9ÚnonlinearityÚparamc                 ó–  — g d¢}| |v s| dk    rdS | dk    rdS | dk    rt          j        d¦  «        S | dk    rw|€d
}nUt          |t          ¦  «        st          |t          ¦  «        st          |t
          ¦  «        r|}nt          d|› d�¦  «        ‚t          j        dd|dz  z   z  ¦  «        S | dk    r	 dS t          d| › �¦  «        ‚)aü  Return the recommended gain value for the given nonlinearity function.

    The values are as follows:

    ================= ====================================================
    nonlinearity      gain
    ================= ====================================================
    Linear / Identity :math:`1`
    Conv{1,2,3}D      :math:`1`
    Sigmoid           :math:`1`
    Tanh              :math:`\frac{5}{3}`
    ReLU              :math:`\sqrt{2}`
    Leaky Relu        :math:`\sqrt{\frac{2}{1 + \text{negative\_slope}^2}}`
    SELU              :math:`\frac{3}{4}`
    ================= ====================================================

    .. warning::
        In order to implement `Self-Normalizing Neural Networks`_ ,
        you should use ``nonlinearity='linear'`` instead of ``nonlinearity='selu'``.
        This gives the initial weights a variance of ``1 / N``,
        which is necessary to induce a stable fixed point in the forward pass.
        In contrast, the default gain for ``SELU`` sacrifices the normalization
        effect for more stable gradient flow in rectangular layers.

    Args:
        nonlinearity: the non-linear function (`nn.functional` name)
        param: optional parameter for the non-linear function

    Examples:
        >>> gain = nn.init.calculate_gain(
        ...     "leaky_relu", 0.2
        ... )  # leaky_relu with negative_slope=0.2

    .. _Self-Normalizing Neural Networks: https://papers.nips.cc/paper/2017/hash/5d44ee6f2c3f71b73125876103c8f6c4-Abstract.html
    )r&   r'   r(   r)   r*   r+   r,   r-   rT   r.   g«ªªªªªú?r/   rK   r0   Nç{®Gáz„?znegative_slope z not a valid numberrQ   r1   g      è?zUnsupported nonlinearity )rL   rN   Ú
isinstanceÚboolÚintrW   Ú
ValueError)rk   rl   Ú
linear_fnsÚnegative_slopes       r?   r
   r
   ‹   s  € ðLð ð €Jð �zÐ!Ð! \°YÒ%>Ð%>ØˆqØ	˜Ò	Ð	ØˆwØ	˜Ò	Ð	ÝŒy˜‰~Œ~ÐØ	˜Ò	%Ð	%Øˆ=Ø!ˆNˆNå˜5¥$Ñ'Ô'ð	Kå˜5¥#Ñ&Ô&ð	Kõ ˜%¥Ñ'Ô'ð	Kð #ˆNˆNåÐI¨uÐIÐIÐIÑJÔJÐJÝŒy˜  N°AÑ$5Ñ 5Ñ6Ñ7Ô7Ð7Ø	˜Ò	Ð	àð	
ð 	
õ ÐC°\ÐCÐCÑDÔDÐDrP   ç        rJ   c                 óº   — t           j                             | ¦  «        r+t           j                             t          | f| |||¬¦  «        S t          | |||¦  «        S )a«  Fill the input Tensor with values drawn from the uniform distribution.

    :math:`\mathcal{U}(a, b)`.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        a: the lower bound of the uniform distribution
        b: the upper bound of the uniform distribution
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.uniform_(w)
    r>   )r<   Ú	overridesÚhas_torch_function_variadicÚhandle_torch_functionr   r@   r>   s       r?   r   r   Õ   s`   € õ( „×2Ò2°6Ñ:Ô:ð 
ÝŒ×4Ò4Ý�v�i¨°!°qÀIð 5ñ 
ô 
ð 	
õ ˜V Q¨¨9Ñ5Ô5Ð5rP   c                 óº   — t           j                             | ¦  «        r+t           j                             t          | f| |||¬¦  «        S t          | |||¦  «        S )aÁ  Fill the input Tensor with values drawn from the normal distribution.

    :math:`\mathcal{N}(\text{mean}, \text{std}^2)`.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        mean: the mean of the normal distribution
        std: the standard deviation of the normal distribution
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.normal_(w)
    rE   )r<   rw   rx   ry   r   rF   rE   s       r?   r   r   ð   s`   € õ( „×2Ò2°6Ñ:Ô:ð 
ÝŒ×4Ò4Ý�f�Y v°D¸cÈYð 5ñ 
ô 
ð 	
õ ˜F D¨#¨yÑ9Ô9Ð9rP   ç       ÀrK   c                 ó,   — t          | |||||¬¦  «        S )a  Fill the input Tensor with values drawn from a truncated normal distribution.

    The values are effectively drawn from the
    normal distribution :math:`\mathcal{N}(\text{mean}, \text{std}^2)`
    with values outside :math:`[a, b]` redrawn until they are within
    the bounds. The method used for generating the random values works
    best when :math:`a \leq \text{mean} \leq b`.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        mean: the mean of the normal distribution
        std: the standard deviation of the normal distribution
        a: the minimum cutoff value
        b: the maximum cutoff value
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.trunc_normal_(w)
    r;   )r`   )r4   rB   rC   r5   r6   r7   s         r?   r   r     s   € õ8 " &¨$°°Q¸ÀYÐOÑOÔOÐOrP   c                 ó²   — t           j                             | ¦  «        r)t           j                             t          | f| |¬¦  «        S t          | |¦  «        S )zþFill the input Tensor with the value :math:`\text{val}`.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        val: the value to fill the tensor with

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.constant_(w, 0.3)
    re   )r<   rw   rx   ry   r   rf   re   s     r?   r   r   *  sX   € õ „×2Ò2°6Ñ:Ô:ð 
ÝŒ×4Ò4Ý˜�y¨°Sð 5ñ 
ô 
ð 	
õ ˜& #Ñ&Ô&Ð&rP   c                 ó"   — t          | d¦  «        S )z¾Fill the input Tensor with the scalar value `1`.

    Args:
        tensor: an n-dimensional `torch.Tensor`

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.ones_(w)
    rJ   )rf   ri   s    r?   r   r   <  s   € õ ˜& #Ñ&Ô&Ð&rP   c                 ó    — t          | ¦  «        S )z¿Fill the input Tensor with the scalar value `0`.

    Args:
        tensor: an n-dimensional `torch.Tensor`

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.zeros_(w)
    )rj   ri   s    r?   r   r   I  s   € õ ˜&Ñ!Ô!Ð!rP   c                 óâ   — |                       ¦   «         dk    rt          d¦  «        ‚t          j        ¦   «         5  t          j        | j        | | j        dœŽ ddd¦  «         n# 1 swxY w Y   | S )a=  Fill the 2-dimensional input `Tensor` with the identity matrix.

    Preserves the identity of the inputs in `Linear` layers, where as
    many inputs are preserved as possible.

    Args:
        tensor: a 2-dimensional `torch.Tensor`

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.eye_(w)
    rQ   ú,Only tensors with 2 dimensions are supported)ÚoutÚrequires_gradN)Ú
ndimensionrr   r<   r=   r   Úshaperƒ   ri   s    r?   r   r   V  s½   € ð ×ÒÑÔ˜aÒÐÝÐGÑHÔHÐHå	Œ‰Œð Qð QÝŒ	�6”< V¸6Ô;OÐPÐPÐPÐPðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qà€Ms   »A$Á$A(Á+A(rT   Úgroupsc                 ó@  — |                       ¦   «         }|dvrt          d¦  «        ‚|                      ¦   «         }|d         |z  dk    rt          d¦  «        ‚|d         |z  }t          ||d         ¦  «        }t	          j        ¦   «         5  |                      ¦   «          t          |¦  «        D ]Ó}t          |¦  «        D ]Á}|dk    r%d| ||z  |z   ||                      d¦  «        dz  f<   Œ-|dk    r<d| ||z  |z   ||                      d¦  «        dz  |                      d¦  «        dz  f<   Œod| ||z  |z   ||                      d¦  «        dz  |                      d¦  «        dz  |                      d¦  «        dz  f<   ŒÂŒÔ	 d	d	d	¦  «         n# 1 swxY w Y   | S )
aF  Fill the {3, 4, 5}-dimensional input `Tensor` with the Dirac delta function.

    Preserves the identity of the inputs in `Convolutional`
    layers, where as many input channels are preserved as possible. In case
    of groups>1, each group of channels preserves identity

    Args:
        tensor: a {3, 4, 5}-dimensional `torch.Tensor`
        groups (int, optional): number of groups in the conv layer (default: 1)
    Examples:
        >>> w = torch.empty(3, 16, 5, 5)
        >>> nn.init.dirac_(w)
        >>> w = torch.empty(3, 24, 5, 5)
        >>> nn.init.dirac_(w, 3)
    )é   é   é   z5Only tensors with 3, 4, or 5 dimensions are supportedr   z!dim 0 must be divisible by groupsrT   rˆ   rQ   r‰   N)r„   rr   ÚsizerU   r<   r=   rh   Úrange)r4   r†   Ú
dimensionsÚsizesÚout_chans_per_grpÚmin_dimÚgÚds           r?   r   r   k  s  € ð  ×"Ò"Ñ$Ô$€JØ˜Ð"Ð"ÝÐPÑQÔQÐQà�KŠK‰MŒM€EàˆQ„x�&Ñ˜AÒÐÝÐ<Ñ=Ô=Ð=à˜aœ FÑ*ÐÝÐ# U¨1¤XÑ.Ô.€Gå	Œ‰Œð ð Ø�Š‰Œˆå�v‘”ð 	ð 	ˆAÝ˜7‘^”^ð ð �Ø ’?�?ØPQ�F˜1Ð0Ñ0°1Ñ4°a¸¿ºÀQ¹¼È1Ñ9LÐLÑMÐMØ 1’_�_ð ð ØÐ-Ñ-°Ñ1ØØŸš A™œ¨!Ñ+ØŸš A™œ¨!Ñ+ð-ñð ð ð ØÐ-Ñ-°Ñ1ØØŸš A™œ¨!Ñ+ØŸš A™œ¨!Ñ+ØŸš A™œ¨!Ñ+ð	-ñð ðð	ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð, €Ms   ÂC8FÆFÆFc                 ó&  — |                       ¦   «         }|dk     rt          d¦  «        ‚|                      d¦  «        }|                      d¦  «        }d}|                       ¦   «         dk    r| j        dd …         D ]}||z  }Œ||z  }||z  }||fS )NrQ   zNFan in and fan out can not be computed for tensor with fewer than 2 dimensionsrT   r   )Údimrr   r‹   r…   )r4   r�   Únum_input_fmapsÚnum_output_fmapsÚreceptive_field_sizeÚsr2   r3   s           r?   Ú_calculate_fan_in_and_fan_outr™      s±   € Ø—’‘”€JØ�A‚~€~ÝØ\ñ
ô 
ð 	
ð —k’k !‘n”n€OØ—{’{ 1‘~”~ÐØÐØ‡z‚z�|„|�aÒÐð ”˜a˜b˜bÔ!ð 	&ð 	&ˆAØ  AÑ%Ð Ð ØÐ3Ñ3€FØÐ!5Ñ5€Gà�7ˆ?ÐrP   Úgainc                 óÎ   — t          | ¦  «        \  }}|t          j        dt          ||z   ¦  «        z  ¦  «        z  }t          j        d¦  «        |z  }t	          | | ||¦  «        S )a³  Fill the input `Tensor` with values using a Xavier uniform distribution.

    The method is described in `Understanding the difficulty of training
    deep feedforward neural networks` - Glorot, X. & Bengio, Y. (2010).
    The resulting tensor will have values sampled from
    :math:`\mathcal{U}(-a, a)` where

    .. math::
        a = \text{gain} \times \sqrt{\frac{6}{\text{fan\_in} + \text{fan\_out}}}

    Also known as Glorot initialization.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        gain: an optional scaling factor
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.xavier_uniform_(w, gain=nn.init.calculate_gain("relu"))

    Note:
        Be aware that ``fan_in`` and ``fan_out`` are calculated assuming
        that the weight matrix is used in a transposed manner,
        (i.e., ``x @ w.T`` in ``Linear`` layers, where ``w.shape = [fan_out, fan_in]``).
        This is important for correct initialization.
        If you plan to use ``x @ w``, where ``w.shape = [fan_in, fan_out]``,
        pass in a transposed weight matrix, i.e. ``nn.init.xavier_uniform_(w.T, ...)``.
    rK   ç      @)r™   rL   rN   rW   r@   )r4   rš   r7   r2   r3   rC   r5   s          r?   r   r   µ  sd   € õD 4°FÑ;Ô;�O€FˆGØ
•”˜3¥ v°Ñ'7Ñ!8Ô!8Ñ8Ñ9Ô9Ñ
9€CÝŒ	�#‰Œ˜Ñ€Aå˜V a R¨¨IÑ6Ô6Ð6rP   c                 óž   — t          | ¦  «        \  }}|t          j        dt          ||z   ¦  «        z  ¦  «        z  }t	          | d||¦  «        S )aš  Fill the input `Tensor` with values using a Xavier normal distribution.

    The method is described in `Understanding the difficulty of training deep feedforward
    neural networks` - Glorot, X. & Bengio, Y. (2010). The resulting tensor
    will have values sampled from :math:`\mathcal{N}(0, \text{std}^2)` where

    .. math::
        \text{std} = \text{gain} \times \sqrt{\frac{2}{\text{fan\_in} + \text{fan\_out}}}

    Also known as Glorot initialization.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        gain: an optional scaling factor
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.xavier_normal_(w)

    Note:
        Be aware that ``fan_in`` and ``fan_out`` are calculated assuming
        that the weight matrix is used in a transposed manner,
        (i.e., ``x @ w.T`` in ``Linear`` layers, where ``w.shape = [fan_out, fan_in]``).
        This is important for correct initialization.
        If you plan to use ``x @ w``, where ``w.shape = [fan_in, fan_out]``,
        pass in a transposed weight matrix, i.e. ``nn.init.xavier_normal_(w.T, ...)``.
    rK   ru   )r™   rL   rN   rW   rF   )r4   rš   r7   r2   r3   rC   s         r?   r   r   Þ  sP   € õB 4°FÑ;Ô;�O€FˆGØ
•”˜3¥ v°Ñ'7Ñ!8Ô!8Ñ8Ñ9Ô9Ñ
9€Cå˜F C¨¨iÑ8Ô8Ð8rP   Úmodec                 óœ   — |                      ¦   «         }ddg}||vrt          d|› d|› �¦  «        ‚t          | ¦  «        \  }}|dk    r|n|S )Nr2   r3   zMode z" not supported, please use one of )Úlowerrr   r™   )r4   rž   Úvalid_modesr2   r3   s        r?   Ú_calculate_correct_fanr¢     sh   € Ø�:Š:‰<Œ<€DØ˜YÐ'€KØ�;ÐÐÝÐV ÐVÐVÈÐVÐVÑWÔWÐWå3°FÑ;Ô;�O€FˆGØ˜XÒ%Ð%ˆ6ˆ6¨7Ð2rP   r2   r0   c           	      óþ  — t           j                             | ¦  «        r,t           j                             t          | f| ||||¬¦  «        S d| j        v rt          j        d¦  «         | S t          | |¦  «        }t          ||¦  «        }|t          j        |¦  «        z  }t          j        d¦  «        |z  }t          j        ¦   «         5  |                      | ||¬¦  «        cddd¦  «         S # 1 swxY w Y   dS )a¸  Fill the input `Tensor` with values using a Kaiming uniform distribution.

    The method is described in `Delving deep into rectifiers: Surpassing
    human-level performance on ImageNet classification` - He, K. et al. (2015).
    The resulting tensor will have values sampled from
    :math:`\mathcal{U}(-\text{bound}, \text{bound})` where

    .. math::
        \text{bound} = \text{gain} \times \sqrt{\frac{3}{\text{fan\_mode}}}

    Also known as He initialization.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        a: the negative slope of the rectifier used after this layer (only
            used with ``'leaky_relu'``)
        mode: either ``'fan_in'`` (default) or ``'fan_out'``. Choosing ``'fan_in'``
            preserves the magnitude of the variance of the weights in the
            forward pass. Choosing ``'fan_out'`` preserves the magnitudes in the
            backwards pass.
        nonlinearity: the non-linear function (`nn.functional` name),
            recommended to use only with ``'relu'`` or ``'leaky_relu'`` (default).
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.kaiming_uniform_(w, mode="fan_in", nonlinearity="relu")

    Note:
        Be aware that ``fan_in`` and ``fan_out`` are calculated assuming
        that the weight matrix is used in a transposed manner,
        (i.e., ``x @ w.T`` in ``Linear`` layers, where ``w.shape = [fan_out, fan_in]``).
        This is important for correct initialization.
        If you plan to use ``x @ w``, where ``w.shape = [fan_in, fan_out]``,
        pass in a transposed weight matrix, i.e. ``nn.init.kaiming_uniform_(w.T, ...)``.
    )r4   r5   rž   rk   r7   r   ú,Initializing zero-element tensors is a no-oprœ   r;   N)r<   rw   rx   ry   r   r…   rX   rY   r¢   r
   rL   rN   r=   r   )	r4   r5   rž   rk   r7   Úfanrš   rC   Úbounds	            r?   r   r     sU  € õV „×2Ò2°6Ñ:Ô:ð 	
ÝŒ×4Ò4ÝØˆIØØØØ%Øð 5ñ 
ô 
ð 	
ð 	ˆFŒLÐÐÝŒÐDÑEÔEÐEØˆÝ
  ¨Ñ
.Ô
.€CÝ˜,¨Ñ*Ô*€DØ
•”˜3‘”Ñ
€CÝŒI�c‰NŒN˜SÑ €EÝ	Œ‰Œð Cð CØ�Š ˜v u¸	ˆÑBÔBðCð Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cs   ÃC2Ã2C6Ã9C6c                 ó8  — d| j         v rt          j        d¦  «         | S t          | |¦  «        }t	          ||¦  «        }|t          j        |¦  «        z  }t          j        ¦   «         5  |  	                    d||¬¦  «        cddd¦  «         S # 1 swxY w Y   dS )aŸ  Fill the input `Tensor` with values using a Kaiming normal distribution.

    The method is described in `Delving deep into rectifiers: Surpassing
    human-level performance on ImageNet classification` - He, K. et al. (2015).
    The resulting tensor will have values sampled from
    :math:`\mathcal{N}(0, \text{std}^2)` where

    .. math::
        \text{std} = \frac{\text{gain}}{\sqrt{\text{fan\_mode}}}

    Also known as He initialization.

    Args:
        tensor: an n-dimensional `torch.Tensor`
        a: the negative slope of the rectifier used after this layer (only
            used with ``'leaky_relu'``)
        mode: either ``'fan_in'`` (default) or ``'fan_out'``. Choosing ``'fan_in'``
            preserves the magnitude of the variance of the weights in the
            forward pass. Choosing ``'fan_out'`` preserves the magnitudes in the
            backwards pass.
        nonlinearity: the non-linear function (`nn.functional` name),
            recommended to use only with ``'relu'`` or ``'leaky_relu'`` (default).
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.kaiming_normal_(w, mode="fan_out", nonlinearity="relu")

    Note:
        Be aware that ``fan_in`` and ``fan_out`` are calculated assuming
        that the weight matrix is used in a transposed manner,
        (i.e., ``x @ w.T`` in ``Linear`` layers, where ``w.shape = [fan_out, fan_in]``).
        This is important for correct initialization.
        If you plan to use ``x @ w``, where ``w.shape = [fan_in, fan_out]``,
        pass in a transposed weight matrix, i.e. ``nn.init.kaiming_normal_(w.T, ...)``.
    r   r¤   r;   N)
r…   rX   rY   r¢   r
   rL   rN   r<   r=   r   )r4   r5   rž   rk   r7   r¥   rš   rC   s           r?   r   r   P  sÝ   € ðV 	ˆFŒLÐÐÝŒÐDÑEÔEÐEØˆÝ
  ¨Ñ
.Ô
.€CÝ˜,¨Ñ*Ô*€DØ
•”˜3‘”Ñ
€CÝ	Œ‰Œð ;ð ;Ø�~Š~˜a °	ˆ~Ñ:Ô:ð;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;ð ;ð ;s   Á*BÂBÂBc                 ó  — |                       ¦   «         dk     rt          d¦  «        ‚|                      ¦   «         dk    r| S |                      d¦  «        }|                      ¦   «         |z  }|                      ||f¦  «                             dd|¬¦  «        }||k     r|                     ¦   «          t          j         	                    |¦  «        \  }}t          j
        |d¦  «        }|                     ¦   «         }	||	z  }||k     r|                     ¦   «          t          j        ¦   «         5  |                      |¦  «                             |¦  «         |                      |¦  «         ddd¦  «         n# 1 swxY w Y   | S )a   Fill the input `Tensor` with a (semi) orthogonal matrix.

    Described in `Exact solutions to the nonlinear dynamics of learning in deep
    linear neural networks` - Saxe, A. et al. (2013). The input tensor must have
    at least 2 dimensions, and for tensors with more than 2 dimensions the
    trailing dimensions are flattened.

    Args:
        tensor: an n-dimensional `torch.Tensor`, where :math:`n \geq 2`
        gain: optional scaling factor
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_LAPACK)
        >>> w = torch.empty(3, 5)
        >>> nn.init.orthogonal_(w)
    rQ   z4Only tensors with 2 or more dimensions are supportedr   rT   r;   N)r„   rr   Únumelr‹   Ú	new_emptyr   Út_r<   ÚlinalgÚqrÚdiagÚsignr=   Úview_asÚcopy_r[   )
r4   rš   r7   ÚrowsÚcolsÚ	flattenedÚqÚrr’   Úphs
             r?   r   r   …  s•  € ð, ×ÒÑÔ˜QÒÐÝÐOÑPÔPÐPà‡|‚|�~„~˜ÒÐàˆØ�;Š;�q‰>Œ>€DØ�<Š<‰>Œ>˜TÑ!€DØ× Ò  $¨ Ñ.Ô.×6Ò6°q¸!ÀyÐ6ÑQÔQ€Iàˆd‚{€{Ø�Š‰Œˆõ Œ<�?Š?˜9Ñ%Ô%�D€A€qåŒ
�1�aÑÔ€AØ	
�Š‰Œ€BØˆ�G€Aàˆd‚{€{Ø	�Š‰Œˆå	Œ‰Œð ð Ø�Š�qÑÔ×Ò Ñ"Ô"Ð"Ø�Š�DÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð €Ms   Ä2>E<Å<F ÆF rn   Úsparsityc                 ó¦  — |                       ¦   «         dk    rt          d¦  «        ‚| j        \  }}t          t	          j        ||z  ¦  «        ¦  «        }t          j        ¦   «         5  |                      d||¬¦  «         t          |¦  «        D ]'}t          j
        |¦  «        }|d|…         }	d| |	|f<   Œ(	 ddd¦  «         n# 1 swxY w Y   | S )aŽ  Fill the 2D input `Tensor` as a sparse matrix.

    The non-zero elements will be drawn from the normal distribution
    :math:`\mathcal{N}(0, 0.01)`, as described in `Deep learning via
    Hessian-free optimization` - Martens, J. (2010).

    Args:
        tensor: an n-dimensional `torch.Tensor`
        sparsity: The fraction of elements in each column to be set to zero
        std: the standard deviation of the normal distribution used to generate
            the non-zero values
        generator: the torch Generator to sample from (default: None)

    Examples:
        >>> w = torch.empty(3, 5)
        >>> nn.init.sparse_(w, sparsity=0.1)
    rQ   r�   r   r;   N)r„   rr   r…   rq   rL   Úceilr<   r=   r   rŒ   Úrandperm)
r4   r¸   rC   r7   r²   r³   Ú	num_zerosÚcol_idxÚrow_indicesÚzero_indicess
             r?   r   r   ¸  s  € ð. ×ÒÑÔ˜aÒÐÝÐGÑHÔHÐHà”�J€Dˆ$Ý•D”I˜h¨™oÑ.Ô.Ñ/Ô/€Iå	Œ‰Œð .ð .Ø�Š�q˜#¨ˆÑ3Ô3Ð3Ý˜T‘{”{ð 	.ð 	.ˆGÝœ.¨Ñ.Ô.ˆKØ& z¨	 zÔ2ˆLØ,-ˆF�< Ð(Ñ)Ð)ð	.ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð €Ms   Á)ACÃC
ÃC
Úmethc                 ó¬   ‡ ‡‡— ‰ j         Š‰d d…         Šdt          j        dt          j        dt          fˆ ˆˆfd„}d‰› d‰› d‰› d	�|_        ‰|_         |S )
NéÿÿÿÿÚargsÚkwargsr8   c                  óZ   •— t          j        d‰› d‰› d�t          d¬¦  «          ‰| i |¤ŽS )Nz	`nn.init.z)` is now deprecated in favor of `nn.init.z`.rQ   rR   )rX   rY   ÚFutureWarning)rÃ   rÄ   rÀ   Únew_nameÚold_names     €€€r?   Údeprecated_initz(_make_deprecate.<locals>.deprecated_initã  sO   ø€ ÝŒØW˜ÐWÐWÈ8ÐWÐWÐWÝØð	
ñ 	
ô 	
ð 	
ð
 ˆt�TÐ$˜VÐ$Ð$Ð$rP   z
    z_(...)

    .. warning::
        This method is now deprecated in favor of :func:`torch.nn.init.z"`.

    See :func:`~torch.nn.init.z` for details.)Ú__name__r%   rÃ   rÄ   r$   Ú__doc__)rÀ   rÉ   rÇ   rÈ   s   ` @@r?   Ú_make_deprecaterÌ   ß  s¦   øøø€ ØŒ}€HØ˜˜˜Œ}€Hð%�rœwð %µ"´)ð %Åð %ð %ð %ð %ð %ð %ð %ð %ð:Øð:ð :ð IQð	:ð :ð  (ð:ð :ð :€OÔð  (€OÔØÐrP   rc   )ru   rJ   N)ru   rJ   r{   rK   N)rT   )rJ   N)r   r2   r0   N)rT   N)rn   N)9rË   rL   rX   Útypingr   r   r   Ú	_Optionalr   r   Útyping_extensionsr   r<   r	   Ú__all__r$   r%   Ú_NonlinearityTypeÚ_FanModerW   Ú	Generatorr@   rF   r`   rf   rj   rq   r
   r   r   r   r   r   r   r   r   Útupler™   r   r   r¢   r   r   r   r   rÌ   r   r   r   r   r   r   r   r    r!   r"   r#   © rP   r?   ú<module>rÖ      s£  ðØ NÐ Nà €€€Ø €€€Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 'Ð 'Ð 'Ð 'Ð 'Ð 'à €€€Ø Ð Ð Ð Ð Ð ðð ð €ð> €WˆT�]„]€Ø€Yˆt�_„_€àðôÐ ð Ð&Ô'€ð QUð:ð :Øð:Øð:Ø!&ð:Ø3<¸U¼_Ô3Mð:àð:ð :ð :ð :ð -1ð	>ð >Øð>à
ð>ð 
ð>ð ˜œÔ)ð	>ð
 ð>ð >ð >ð >ð  -1ð)ð )Øð)à
ð)ð 
ð)ð ð	)ð
 ð)ð ˜œÔ)ð)ð ð)ð )ð )ð )ðX!˜6ð !¨ð !°&ð !ð !ð !ð !ð
˜6ð  fð ð ð ð ð LPðGEð GEØ#ðGEØ,5°e¸CÀ¸JÔ6GÔ,HðGEà
ðGEð GEð GEð GEðX ØØ,0ð	6ð 6Øð6àð6ð ð6ð ˜œÔ)ð	6ð
 ð6ð 6ð 6ð 6ð: ØØ,0ð	:ð :Øð:à
ð:ð 
ð:ð ˜œÔ)ð	:ð
 ð:ð :ð :ð :ð: ØØØØ,0ðPð PØðPà
ðPð 
ðPð ð	Pð
 ðPð ˜œÔ)ðPð ðPð Pð Pð Pð>'�fð ' 5ð '¨Vð 'ð 'ð 'ð 'ð$
'�&ð 
'˜Vð 
'ð 
'ð 
'ð 
'ð
"�6ð 
"˜fð 
"ð 
"ð 
"ð 
"ð�ð ˜Fð ð ð ð ð*2ð 2�6ð 2 3ð 2¨vð 2ð 2ð 2ð 2ðj¨&ð °U¸3À¸8´_ð ð ð ð ð. Ø,0ð&7ð &7Øð&7à
ð&7ð ˜œÔ)ð&7ð ð	&7ð &7ð &7ð &7ðV Ø,0ð$9ð $9Øð$9à
ð$9ð ˜œÔ)ð$9ð ð	$9ð $9ð $9ð $9ðN3 6ð 3°ð 3¸cð 3ð 3ð 3ð 3ð ØØ&2Ø,0ð>Cð >CØð>Càð>Cð ð>Cð $ð	>Cð
 ˜œÔ)ð>Cð ð>Cð >Cð >Cð >CðF ØØ&2Ø,0ð2;ð 2;Øð2;àð2;ð ð2;ð $ð	2;ð
 ˜œÔ)ð2;ð ð2;ð 2;ð 2;ð 2;ðn Ø,0ð0ð 0Øð0à
ð0ð ˜œÔ)ð0ð ð	0ð 0ð 0ð 0ðl Ø,0ð	#ð #Øð#àð#ð 
ð#ð ˜œÔ)ð	#ð
 ð#ð #ð #ð #ðN˜( 2 r 6Ô*ð ¨x¸¸B¸Ô/?ð ð ð ð ð. ˆ/˜(Ñ
#Ô
#€Ø	ˆ˜Ñ	!Ô	!€Øˆ?˜9Ñ%Ô%€Ø€o�dÑÔ€Øˆ˜ÑÔ€Ø � Ñ1Ô1€Ø� Ñ/Ô/€Ø!�/Ð"2Ñ3Ô3€Ø � Ñ1Ô1€Øˆ_˜[Ñ)Ô)€
Ø	ˆ˜Ñ	!Ô	!€€€rP   