Ë
    [^(hù  ã            	       ó°   — d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZ g d¢Z G d„ d	«      Z ed
e
¬«      Zddedededefd„Zddededefd„Zy)z;Weight Normalization from https://arxiv.org/abs/1602.07868.é    )ÚAnyÚTypeVar)Ú
deprecated)Ú_weight_normÚnorm_except_dim)ÚModule)Ú	ParameterÚUninitializedParameter)Ú
WeightNormÚweight_normÚremove_weight_normc                   ó¢   — e Zd ZU eed<   eed<   dededdfd„Zdedefd„Z	e
 ede¬	«      dededd fd
„«       «       Zdeddfd„Zdededdfd„Zy)r   ÚnameÚdimÚreturnNc                 ó(   — |€d}|| _         || _        y )Néÿÿÿÿ)r   r   )Úselfr   r   s      úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/nn/utils/weight_norm.pyÚ__init__zWeightNorm.__init__   s   € Øˆ;ØˆCØˆŒ	Øˆ�ó    Úmodulec                 ó”   — t        || j                  dz   «      }t        || j                  dz   «      }t        ||| j                  «      S ©NÚ_gÚ_v)Úgetattrr   r   r   )r   r   ÚgÚvs       r   Úcompute_weightzWeightNorm.compute_weight   s?   € Ü�F˜DŸI™I¨Ñ,Ó-ˆÜ�F˜DŸI™I¨Ñ,Ó-ˆÜ˜A˜q $§(¡(Ó+Ð+r   ze`torch.nn.utils.weight_norm` is deprecated in favor of `torch.nn.utils.parametrizations.weight_norm`.)Úcategoryc           
      ó8  — | j                   j                  «       D ]0  }t        |t        «      sŒ|j                  |k(  sŒ$t        d|› �«      ‚ |€d}t        ||«      }t        | |«      }t        |t        «      rt        d«      ‚| j                  |= | j                  |dz   t        t        |d|«      j                  «      «       | j                  |dz   t        |j                  «      «       t        | ||j                  | «      «       | j!                  |«       |S )Nz<Cannot register two weight_norm hooks on the same parameter r   zŽThe module passed to `WeightNorm` can't have uninitialized parameters. Make sure to run the dummy forward before applying weight normalizationr   é   r   )Ú_forward_pre_hooksÚvaluesÚ
isinstancer   r   ÚRuntimeErrorr   r
   Ú
ValueErrorÚ_parametersÚregister_parameterr	   r   ÚdataÚsetattrr    Úregister_forward_pre_hook)r   r   r   ÚhookÚfnÚweights         r   ÚapplyzWeightNorm.apply   s  € ð ×-Ñ-×4Ñ4Ó6ò 	ˆDÜ˜$¤
Õ+°·	±	¸TÓ0AÜ"ØRÐSWÐRXÐYóð ð	ð ˆ;ØˆCä˜˜cÓ"ˆä˜ Ó&ˆÜ�fÔ4Ô5ÜðZóð ð
 ×Ñ˜tÐ$ð 	×!Ñ!Ø�4‰Kœ¤?°6¸1¸cÓ#B×#GÑ#GÓHô	
ð 	×!Ñ! $¨¡+¬y¸¿¹Ó/EÔFÜ�˜˜b×/Ñ/°Ó7Ô8ð 	×(Ñ(¨Ô,àˆ	r   c                 ó  — | j                  |«      }t        || j                  «       |j                  | j                  dz   = |j                  | j                  dz   = t	        || j                  t        |j                  «      «       y r   )r    Údelattrr   r)   r,   r	   r+   )r   r   r0   s      r   ÚremovezWeightNorm.removeE   sg   € Ø×$Ñ$ VÓ,ˆÜ�˜Ÿ	™	Ô"Ø×Ñ˜tŸy™y¨4Ñ/Ð0Ø×Ñ˜tŸy™y¨4Ñ/Ð0Ü�˜Ÿ	™	¤9¨V¯[©[Ó#9Õ:r   Úinputsc                 óP   — t        || j                  | j                  |«      «       y )N)r,   r   r    )r   r   r5   s      r   Ú__call__zWeightNorm.__call__L   s   € Ü�˜Ÿ	™	 4×#6Ñ#6°vÓ#>Õ?r   )Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úintr   r   r   r    Ústaticmethodr   ÚFutureWarningr1   r4   r7   © r   r   r   r      sª   … Ø
ƒIØ	ƒHð˜Sð  sð ¨tó ð, Vð ,°ó ,ð
 Ùð	Eàôð
˜Cð  cð ¨lò óó ððB;˜Vð ;¨ó ;ð@˜vð @¨sð @°tô @r   r   ÚT_module)Úboundr   r   r   r   c                 ó4   — t         j                  | ||«       | S )aE	  Apply weight normalization to a parameter in the given module.

    .. math::
         \mathbf{w} = g \dfrac{\mathbf{v}}{\|\mathbf{v}\|}

    Weight normalization is a reparameterization that decouples the magnitude
    of a weight tensor from its direction. This replaces the parameter specified
    by :attr:`name` (e.g. ``'weight'``) with two parameters: one specifying the magnitude
    (e.g. ``'weight_g'``) and one specifying the direction (e.g. ``'weight_v'``).
    Weight normalization is implemented via a hook that recomputes the weight
    tensor from the magnitude and direction before every :meth:`~Module.forward`
    call.

    By default, with ``dim=0``, the norm is computed independently per output
    channel/plane. To compute a norm over the entire weight tensor, use
    ``dim=None``.

    See https://arxiv.org/abs/1602.07868

    .. warning::

        This function is deprecated.  Use :func:`torch.nn.utils.parametrizations.weight_norm`
        which uses the modern parametrization API.  The new ``weight_norm`` is compatible
        with ``state_dict`` generated from old ``weight_norm``.

        Migration guide:

        * The magnitude (``weight_g``) and direction (``weight_v``) are now expressed
          as ``parametrizations.weight.original0`` and ``parametrizations.weight.original1``
          respectively.  If this is bothering you, please comment on
          https://github.com/pytorch/pytorch/issues/102999

        * To remove the weight normalization reparametrization, use
          :func:`torch.nn.utils.parametrize.remove_parametrizations`.

        * The weight is no longer recomputed once at module forward; instead, it will
          be recomputed on every access.  To restore the old behavior, use
          :func:`torch.nn.utils.parametrize.cached` before invoking the module
          in question.

    Args:
        module (Module): containing module
        name (str, optional): name of weight parameter
        dim (int, optional): dimension over which to compute the norm

    Returns:
        The original module with the weight norm hook

    Example::

        >>> m = weight_norm(nn.Linear(20, 40), name='weight')
        >>> m
        Linear(in_features=20, out_features=40, bias=True)
        >>> m.weight_g.size()
        torch.Size([40, 1])
        >>> m.weight_v.size()
        torch.Size([40, 20])

    )r   r1   )r   r   r   s      r   r   r   S   s   € ôx ×Ñ�V˜T 3Ô'Ø€Mr   c                 óì   — | j                   j                  «       D ]G  \  }}t        |t        «      sŒ|j                  |k(  sŒ'|j                  | «       | j                   |= | c S  t        d|› d| › �«      ‚)a  Remove the weight normalization reparameterization from a module.

    Args:
        module (Module): containing module
        name (str, optional): name of weight parameter

    Example:
        >>> m = weight_norm(nn.Linear(20, 40))
        >>> remove_weight_norm(m)
    zweight_norm of 'z' not found in )r$   Úitemsr&   r   r   r4   r(   )r   r   Úkr.   s       r   r   r   “   su   € ð ×,Ñ,×2Ñ2Ó4ò ‰ˆˆ4Ü�dœJÕ'¨D¯I©I¸Ó,=Ø�K‰K˜ÔØ×)Ñ)¨!Ð,ØŠMð	ô Ð'¨ v¨_¸V¸HÐEÓ
FÐFr   N)r0   r   )r0   )Ú__doc__Útypingr   r   Útyping_extensionsr   Útorchr   r   Útorch.nn.modulesr   Útorch.nn.parameterr	   r
   Ú__all__r   rA   r;   r=   r   r   r@   r   r   ú<module>rN      sy   ðá Bß Ý (ç /Ý #ß @ò >€÷?@ñ ?@ñD �: VÔ,€ñ=˜ð =¨ð =¸Sð =Èó =ñ@G˜xð G¨sð GÀ(ô Gr   