Ë
    éÓ^jX  ã                   óª   — d dl mZ d dlmZ d dlZ G d„ dee«      Zeeef   Zdefd„Zdefd„Z	d	ej                  defd
„Zd	ej                  defd„Zy)é    )ÚEnum)ÚUnionNc                   ó   — e Zd ZdZdZdZdZy)ÚFormatÚNCHWÚNHWCÚNCLÚNLCN)Ú__name__Ú
__module__Ú__qualname__r   r   r	   r
   © ó    ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/layers/format.pyr   r      s   „ Ø€DØ€DØ
€CØ
�Cr   r   Úfmtc                 ó¤   — t        | «      } | t         j                  u rd}|S | t         j                  u rd}|S | t         j                  u rd}|S d}|S )z»Return spatial dimension indices for a given tensor format.

    Args:
        fmt: Tensor format (NCHW, NHWC, NCL, or NLC).

    Returns:
        Tuple of spatial dimension indices.
    )é   )é   )r   r   )r   é   )r   r
   r	   r   ©r   Údims     r   Úget_spatial_dimr      se   € ô �‹+€CØ
Œf�j‰jÑØˆð €Jð 
”—
‘
Ñ	Øˆð
 €Jð	 
”—‘Ñ	Øˆð €Jð ˆØ€Jr   c                 óx   — t        | «      } | t         j                  u rd}|S | t         j                  u rd}|S d}|S )z®Return channel dimension index for a given tensor format.

    Args:
        fmt: Tensor format (NCHW, NHWC, NCL, or NLC).

    Returns:
        Channel dimension index.
    r   r   r   )r   r   r
   r   s     r   Úget_channel_dimr   &   sK   € ô �‹+€CØ
Œf�k‰kÑØˆð
 €Jð	 
”—
‘
Ñ	Øˆð €Jð ˆØ€Jr   Úxc                 ó  — |t         j                  k(  r| j                  dddd«      } | S |t         j                  k(  r#| j	                  d«      j                  dd«      } | S |t         j                  k(  r| j	                  d«      } | S )z·Convert tensor from NCHW format to specified format.

    Args:
        x: Input tensor in NCHW format.
        fmt: Target format.

    Returns:
        Tensor in target format.
    r   r   r   r   )r   r   Úpermuter
   ÚflattenÚ	transposer	   ©r   r   s     r   Únchw_tor!   9   sz   € ð Œf�k‰kÒØ�I‰I�a˜˜A˜qÓ!ˆð
 €Hð	 
”—
‘
Ò	Ø�I‰I�a‹L×"Ñ" 1 aÓ(ˆð €Hð 
”—
‘
Ò	Ø�I‰I�a‹LˆØ€Hr   c                 ó  — |t         j                  k(  r| j                  dddd«      } | S |t         j                  k(  r| j	                  dd«      } | S |t         j
                  k(  r"| j	                  dd«      j                  dd«      } | S )z·Convert tensor from NHWC format to specified format.

    Args:
        x: Input tensor in NHWC format.
        fmt: Target format.

    Returns:
        Tensor in target format.
    r   r   r   r   )r   r   r   r
   r   r	   r   r    s     r   Únhwc_tor#   L   s~   € ð Œf�k‰kÒØ�I‰I�a˜˜A˜qÓ!ˆð
 €Hð	 
”—
‘
Ò	Ø�I‰I�a˜‹Oˆð €Hð 
”—
‘
Ò	Ø�I‰I�a˜‹O×%Ñ% a¨Ó+ˆØ€Hr   )Úenumr   Útypingr   ÚtorchÚstrr   ÚFormatTr   r   ÚTensorr!   r#   r   r   r   ú<module>r*      sr   ðÝ Ý ã ôˆS�$ô ð ��V�Ñ
€ð˜ó ð*˜ó ð&ˆu�|‰|ð  &ó ð&ˆu�|‰|ð  &ô r   