
    %`i              
           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dS )    )OptionalN)Tensorbilinearimgabsolute_gridmodealign_cornersc                    | j         dd         \  }}|                    ddgd          \  }}d|z  |dz
  z  dz
  }|dk    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	            z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchvision/models/optical_flow/_utils.pyr   r      s    9RSS>DAq &&1v2&66LE5IQ!#E1uuE	QU#a'iB777O=oDVVVV    cpu
batch_sizer   r   devicec                 F   t          j        |          }t          j        t          j        ||          t          j        ||          d          }t          j        |d d d         d                                          }|d                              | 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*      s    \&!!F^EL6:::ELSY<Z<Z<ZeijjjF["1---3355F$<z1a333r      up_maskfactorc           	         | j         \  }}}}||z  ||z  }}||t          j        | ||fdd          z  S |                    |dd||||          }t	          j        |d          }t          j        || z  d	d
                              ||ddd||          }	t	          j        ||	z  d          }	|	                    dddddd	          	                    ||||          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.
    Nr   T)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_flowrB      s    &*Z"Jav:q6z5Ed%j`deeeeell:q!VVQBBGmG+++GXftmAFFFKKJXdfgijlmoprsttNYw7Q???N!!!Q1a33;;JV[]bcccr   )r   N)r   )Nr+   )typingr   r   torch.nn.functionalnn
functionalr   r   strboolr   intr*   rB    r   r   <module>rK      s                        W WV WF W# W[cdh[i W W W W4 4 4 4 4c 4 4 4 4d d&!1 d# d d d d d dr   