Ë
    èÓ^j  ã            
       óˆ   — d dl mZ d dlZd dlmc mZ d dlmZ ddedededee	   fd„Z
dd	ed
ededefd„Zddee   defd„Zy)é    )ÚOptionalN)ÚTensorÚimgÚabsolute_gridÚmodeÚalign_cornersc                 óü   — | j                   dd \  }}|j                  ddgd¬«      \  }}d|z  |dz
  z  dz
  }|dkD  rd|z  |dz
  z  dz
  }t        j                  ||gd¬«      }t	        j
                  | |||¬«      S )z_Same as torch's grid_sample, with absolute pixel coordinates instead of normalized coordinates.éþÿÿÿNé   éÿÿÿÿ©Údimé   )r   r   )ÚshapeÚsplitÚtorchÚcatÚFÚgrid_sample)	r   r   r   r   ÚhÚwÚxgridÚygridÚnormalized_grids	            úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torchvision/models/optical_flow/_utils.pyr   r      s�   € à�9‰9�R�Sˆ>�D€A€qà ×&Ñ&¨¨1 v°2Ð&Ó6�L€Eˆ5Ø�‰I˜˜Q™Ñ !Ñ#€Eàˆ1‚uØ�E‘	˜Q ™UÑ# aÑ'ˆÜ—i‘i ¨ °BÔ7€Oä�=‰=˜˜o°DÈÔVÐVó    Ú
batch_sizer   r   Údevicec                 ó4  — t        j                  |«      }t        j                  t        j                  ||¬«      t        j                  ||¬«      d¬«      }t        j                  |d d d…   d¬«      j                  «       }|d    j                  | ddd«      S )N)r   Úij)Úindexingr   r   r   r   )r   r   ÚmeshgridÚarangeÚstackÚfloatÚrepeat)r   r   r   r   Úcoordss        r   Úmake_coords_gridr(      sv   € Ü�\‰\˜&Ó!€FÜ�^‰^œEŸL™L¨°6Ô:¼E¿L¹LÈÐSYÔ<ZÐeiÔj€FÜ�[‰[˜¡ " ™¨1Ô-×3Ñ3Ó5€FØ�$‰<×Ñ˜z¨1¨a°Ó3Ð3r   Úup_maskÚfactorc           	      ó¸  — | j                   \  }}}}||z  ||z  }}|€|t        j                  | ||fdd¬«      z  S |j                  |dd||||«      }t	        j
                  |d¬«      }t        j                  || z  dd¬	«      j                  ||ddd||«      }	t	        j                  ||	z  d¬«      }	|	j                  d
ddddd«      j                  ||||«      S )a,  Upsample flow by the input factor (default 8).

    If up_mask is None we just interpolate.
    If up_mask is specified, we upsample using a convex combination of its weights. See paper page 8 and appendix B.
    Note that in appendix B the picture assumes a downsample factor of 4 instead of 8.
    ÚbilinearT)Úsizer   r   r   é	   r   r   é   )Úkernel_sizeÚpaddingr   é   é   )
r   r   ÚinterpolateÚviewr   ÚsoftmaxÚunfoldÚsumÚpermuteÚreshape)
Úflowr)   r*   r   Únum_channelsr   r   Únew_hÚnew_wÚupsampled_flows
             r   Úupsample_flowr@      së   € ð &*§Z¡ZÑ"€J�˜a Ø�v‘:˜q 6™zˆ5€Eà€ØœŸ™ d°%¸°ÀjÐ`dÔeÑeÐeà�l‰l˜: q¨!¨V°V¸QÀÓB€GÜ�m‰m˜G¨Ô+€Gä—X‘X˜f t™m¸ÀAÔF×KÑKÈJÐXdÐfgÐijÐlmÐopÐrsÓt€NÜ—Y‘Y˜w¨Ñ7¸QÔ?€Nà×!Ñ! ! Q¨¨1¨a°Ó3×;Ñ;¸JÈÐV[Ð]bÓcÐcr   )r,   N)Úcpu)Né   )Útypingr   r   Útorch.nn.functionalÚnnÚ
functionalr   r   ÚstrÚboolr   Úintr(   r@   © r   r   ú<module>rK      s}   ðÝ ã ß Ð Ý ñW�Vð W¨Fð W¸#ð WÐ[cÐdhÑ[ió Wñ4 ð 4¨ð 4°ð 4¸có 4ñd ¨&Ñ!1ð dÀ#ô dr   