
    kh              
           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	            b/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/models/optical_flow/_utils.pyr   r      s    99RS>DAq &&1v2&6LE5IQ!#E1uE	QU#a'iiB7O==oD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^^ELL6:ELLSY<ZeijF[["1-335F$<z1a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     &*ZZ"Jav:q6z5Ed%j`deeell:q!VVQBGmmG+GXXftmAFKKJXdfgijlmoprstNYYw7Q?N!!!Q1a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[cdh[i W4 4 4 4c 4d&!1 d# dr   