
     h                     H    d dl Z d Zd Zd Zd Zd ZddZd Zdd	Zdd
Z	y)    Nc                     dd l }|j                  |      }|j                  j                         D ]D  \  }}|j                  |j
                  j                  u r)| j                  ||j                         F | S )Nr   )inspect	signature
parametersitemsdefault	Parameterempty
setdefault)kwargsfuncr   r   kvs         ?/home/cameronsmith/repos/controll3r/dust3r/dust3r/utils/misc.pyfill_default_argsr   
   sm    !!$'I$$**, (199))///!QYY'(
 M    c                 ~    | D ]"  }	 |j                         D ]  \  }}d|_         $ y # t        $ r
 d|_        Y 8w xY w)NF)named_parametersrequires_gradAttributeError)modulesmodulenparams       r   freeze_all_paramsr      sS     )	)"335 ,5&+#,)  	)#(F 	)s   )<<c                     | d   }|d   }t        |      t        |      k(  rt        |      dk(  ryd}t        dt        |      d      D ]$  }|xr ||   ||dz      k(  xr ||dz      ||   k(  }& |S )Ninstance   FTr      )lenrange)gt1gt2xyokis         r   is_symmetrizedr(       s    JAJA
1vQCFaK	B1c!fa  >=QqTQq1uX%=Aa!eH!,<>Ir   c                 l    t        j                  | ddd   | ddd   fd      j                  dd      S )z, flip so that tensor[0::2] <=> tensor[1::2] r   Nr   r   dimtorchstackflatten)tensors    r   flipr1   +   s9    ;;qt!tfQTTl3;CCAqIIr   c                     t        j                  | |fd      j                  dd      }t        j                  || fd      j                  dd      }||fS )Nr   r*   r   r,   )tensor1tensor2res1res2s       r   
interleaver7   0   sP    ;;)q199!Q?D;;)q199!Q?D:r   c                 $      fd} fd}|r|S |S )z Predict in the correct aspect-ratio,
        then transpose the result in landscape 
        and stack everything back together.
    c                     t        |      }|dd j                  |      sJ d       |d   j                         j                         \  }} | ||f      }|S )Nr   r   z true_shape must be all identical)r    allclosecputolist)decout
true_shapeBHWresheads         r   
wrapper_noz*transpose_to_landscape.<locals>.wrapper_no;   s]    
O!A''
3W5WW!}  "))+16Aq6"
r   c                     t        |      }t        |j                               t        |j                               }}|j                  \  }}||k\  }| }|j                         r  ||f      S |j                         rt          ||f            S  fd}	  |	|      ||f      }
t          |	|      ||f            }i }|
|z  D ]=  } |
|   j                  |g|
|   j                  dd   }|
|   ||<   ||   ||<   |||<   ? |S )Nc                 4    D cg c]  }||    	 c}S c c}w )N )ardr=   s     r   seloutz;transpose_to_landscape.<locals>.wrapper_yes.<locals>.seloutR   s    v6!"666s   r   )	r    intminmaxTall
transposednewshape)r=   r>   r?   r@   rA   heightwidthis_landscapeis_portraitrJ   l_resultp_resultresultr   r$   rC   s   `              r   wrapper_yesz+transpose_to_landscape.<locals>.wrapper_yesB   s,   
O:>>#$c*..*:&;1"#m A''??d6Aq6233 	7|,q!f5d6+#6A?@ H$ 	A:HQK$5$5ab$9:A&qkAlO%a[AkNF1I		 r   rG   )rC   activaterD   rZ   s   `   r   transpose_to_landscaper\   6   s    
< #;2
2r   c           	      v    | j                         D ci c]  \  }}||j                  dd       c}}S c c}}w )Nr   r   )r   swapaxes)dicr   r   s      r   rP   rP   c   s0    ,/IIK8DAqAqzz!Q888s   5c                     || j                         } t        d      | | <   | j                  |kD  r"| j                  d| j                  |z
  z
  d      } | S )Nnan)clonefloatndimr/   )arr
valid_maskre   s      r   invalid_to_nansrh   g   sP    iik <ZK
xx$kk"40"5Jr   c                 D   |A| j                         } d| | <   |j                  t        |      d      j                  d      }n)t        |       r| j	                         t        |       z  nd}| j
                  |kD  r"| j                  d| j
                  |z
  z
  d      } | |fS )Nr   r   rb   )rc   viewr    sumnumelre   r/   )rf   rg   re   nnzs       r   invalid_to_zerosro   p   s    iikZKooc*or266q9),SciikSX%q
xx$kk"40"58Or   )T)i  )
r-   r   r   r(   r1   r7   r\   rP   rh   ro   rG   r   r   <module>rp      s9    	)J
*3Z9	r   