
    ǳh7                        d dl mZ d dlZd dlZd dlZd dlZd dlm	c m
Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dlZd dlZd dl Z d dlZd dl!m"Z"m#Z# d	 Z$dd
Z%ddZ& G d dejN                  jP                  jR                        Z* G d dejN                  jP                  jR                        Z+ G d dejN                  jP                  jR                        Z,y)    N)glob)defaultdict)	set_trace)combinations)choice)
transforms)	rearrangerepeatc                     t        | d      S )Nz... c x y -> ... (x y) c)r	   xs    9/home/cameronsmith/repos/multivid_point_track_sfm/data.py<lambda>r       s    9Q9:     c                     t        j                  | t        j                  | j                  |      d   j	                  |            f|      S )Nr   )torchcat	ones_likeunbind	unsqueeze)r   is     r   r   r   !   s7    eiiEOOAHHQKN4L4LQ4O$P QSTU r   c           	         t        j                  ||z        }||z  }t        |      t        |      g}	d }
||	D cg c]
  } |
|       }}|!|	D cg c]  } |
t        ||z               }}|	D cg c]  } |
t        ||z               }}t         j                  d|d   d|d   f   j	                  t
              j                  ddd      }t        j                  t        j                  |d      j                               j                         }|t        j                  |d   dz
  |d   dz
  g      z  }t         j                  d|d   d|d   f   j	                  t
              j                  ddd      }t        j                  t        j                  |d      j                               j                         }|t        j                  |d   dz
  |d   dz
  g      z  }i i }}t        j                  | d   |dd	
      |d<   d| v rt        j                  | d   |dd	
      |d<   d| v rt        j                  | d   |dd	
      |d<   t        j                  | d   j                  dd      d d d f   j                         |d      j!                  d      j#                  d| d   j$                  d d       |d<   d| v r| d   |d<   | d   |d<   |d    j                  dd      j'                  t)        |d         dd      |d<   t+        |d         dz  dz   |d<   d| v r| d   x|d<   |d<   d| v r3t+        t        j                  | d   d d d f   |d            x|d<   |d<   d| v r:t+        t        j                  | d   j                         |d            x|d<   |d<   d| v r| d   |d<   d| v r| d   |d<   ||fS c c}w c c}w c c}w )Nc                     | | dz  z
  dz   S )N     r   s    r   r   zmake_sample.<locals>.<lambda>(   s    AqtHRK r   r         )axisrgbTbilinear)	antialiasmodedino_pcabwd_flowrig_flow_masksnearest)r#   pred_trackspred_visibilityx_pix      ?
intrinsicsgt_intrinsics	depth_inpseg_imgsc2w	org_ratio)npsqrtintmgridastypefloat	transposer   
from_numpyflipcopylongtensorFinterpolateflattensqueeze	unflattenshapeexpandlench_sec)sampleaspectbudgethires_factor
med_factorlow_reshi_resyr   low_res_mult32med_resuvuv_hiresmodel_inputgts                   r   make_samplerV   #   sC   ggfVmAQhA!fSV_HFH =q = =~HMqvc,q.&9:MvM0891VC
1%&9G9 
!gaj.!gaj.0	1	8	8	?	I	I!QPQ	RB			"''"2.335	6	;	;	=B	ellGAJqL'!*Q,78	8BxxF1Iq6!9}45<<UCMMaQRTUVHr : ? ? ABGGIH%,,q	!VAYq['ABBHbKfUmGdPZ[KVammF:DVW^ims}6~[4 VammF:DVW^ims}6~[4#$==8H1I1Q1QRSTU1VWXY]W]1^1d1d1fgnt}#~  $G  $G  HI  $J  $T  $T  UV  W]  ^n  Wo  Wu  Wu  vx  wx  Wy  $zK ! $*=$9M"(./@(A%& D))!A.55c+e:L6MbQSTK['(+B.BuIvV\]iVjj{?;K<Uf28vkGZ[\]a[aGbcjpy9z2{{;K0V06q}}VJEWE]E]E_`gmv7w0xx:{:. 6%=E*fvk7Jk+6r>[ !>M9s   OO5Oc                   8    e Zd ZdZ	 	 	 	 	 	 ddZd Zd ZddZy)	OptFlowFolderODataset for a class of objects, where each datapoint is a SceneInstanceDataset.c                     |dz
  | _         || _        || _        t        j                  |      | _        || _        t        d       t        t        d            | _
        y )Nr   Loading dataz1/data/cameron/monocular_ests/re10k/*/lowrespkg.pt)n_trgtvalnum_skipr   r=   rL   sfprintlistr   pathsselfn_skipnum_trgtrL   pathr]   r_   s          r   __init__zOptFlowFolder.__init__[   sP     QJ\\'* 	nPQR
r   c                      y)Ni r   rd   s    r   __len__zOptFlowFolder.__len__q   s    ir   c                     |d   j                         }t        t              }|D ]   }|D ]  }||   j                  ||           " |D ]  }t	        j
                  ||   d      ||<   ! |S #  Y (xY wNr   )dimkeysr   ra   appendr   stackrd   
batch_listrp   resultentrykeys         r   
collate_fnzOptFlowFolder.collate_fns       !}!!#T" 	<E;VC[//c
;;	<  	C${{6#;A>	  H   A..A2Nc                    t        t        j                  t        j                  | j
                                    }t        |d   d         dk  r| d   S t        j                  dt        |d   d         dz
        }|D cg c]B  }|j                         D ci c]$  \  }}||dv r	||dz
  g   n|dk(  r|n	||dz
  |g   & c}}D }}}}|S #  | d   cY S xY wc c}}w c c}}}w )Nr   r%      r   )r&   r%   r1   )	ra   r   loadrandomr   rb   rE   randintitems)rd   idx	seq_querydatar   r   kvs           r   __getitem__zOptFlowFolder.__getitem__   s   

6==#<=>TtAwz"#A%d1g~
..3tAwz23A5
6 LP  Q  Q  GHvwv}v}v  Boropqrqa#@@!QqSE(1k>a_`bcdebefgah_ii  B  Q  Q	 	tAw B  Qs#   ;C C")CC"CC"r   r   )`   p   .Fr   N__name__
__module____qualname____doc__rh   rk   rx   r   r   r   r   rX   rX   X   s.    Y S, (r   rX   c                   8    e Zd ZdZ	 	 	 	 	 	 ddZd Zd ZddZy)	ImageFolderrY   c                 |   |dz
  | _         || _        || _        t        j                  |      | _        || _        t        d       || _        t        t        j                  |dz               | _        t        j                  |dz         | _        t        j                  |dz         | _        t        j                  |dz   d	      | _        t        j                  |d
z         | _        t        j                  |dz         d d d df   | _        t#        | j                  d   d      d   | j                  d<   t#        | j                  d   d      d   | j                  d<   t        j                  |dz         | _        | j$                  d   | _        t        d       d | _        t*        j                  j-                  |dz         rt        j                  |dz         | _        t        j                  |dz         | _        y #  t        t        j                  |dz               | _        Y xY w#  Y xY w#  Y pxY w)Nr   r[   z/pred_tracks_offline.ptz/pred_tracks_more.ptz/imgs.ptz/seg_imgs.ptz/dino_feats.ptcpu)map_locationz/bwd_flow.ptz/rig_flow_masks.ptr   zg b t p c -> b t (p g) czg b t p -> b t (p g)z/depth_ests.ptzDone loading dataz	/poses.ptz/intrinsics.pt)r\   r]   r^   r   r=   rL   r_   r`   rg   ra   r}   tracksimgsr/   
dino_featsr%   r&   r	   mdepthsdepthsposesosexistsfrc   s          r   rh   zImageFolder.__init__   s    QJ\\'*n	  

40I+I JKT[ JJtJ/	!JJtN':;DM#jj.>)>ERDO

4#67#jj.B)BCAbqbDI"4;;q>2LMaPA"4;;q>2HI!LAzz$'7"78 LLO!"
77>>${*+%**T+EU:VTZ

4 001=	Huzz$/E*EFGDK 	tts$   &H  H. ,H6  (H+.H36H;c                      y)Nr   r   rj   s    r   rk   zImageFolder.__len__   s    ar   c                     |d   j                         }t        t              }|D ]   }|D ]  }||   j                  ||           " |D ]  }t	        j
                  ||   d      ||<   ! |S #  Y (xY wrm   ro   rs   s         r   rx   zImageFolder.collate_fn   ry   rz   Nc                 "   d}g }g }g }| j                   }| j                  d   }| j                  }|j                         dkD  r|dz  }t        t	        j
                  d      dt        |            j                         }	d|	d d d ddf<   | j                  }||	d d ddf<   ||j                  d	      z  |j                  d
      z  |	d d ddf<   |d   j                  d
      |d   j                  d	      z  }
d\  }}ddg}| j                  d   d | j                  | j                  z  | j                     }| j                  d   d | j                  | j                  z  | j                     }d}d}t        t        |d||      dd d |d d |f   d| j                        }t        t        |d||      dd d |d d |f   d| j                        }|	d | j                  | j                  z  | j                     |d | j                  | j                  z  | j                     dz  dz
  | j                  d | j                  | j                  z  | j                     |d | j                  | j                  z  | j                     |
| j                  d | j                  | j                  z  | j                     d d	 | j                   d | j                  | j                  z  | j                     d d	 ||d	}| j"                  6| j"                  d | j                  | j                  z  | j                     |d<   dd	gd   }t%        |d|
z  |dd|z  z  t'        d| j(                  z        t'        d| j(                  z        gd d |   |d d d	         S )Nr   r   r         zi j -> b i j)br+   r   )r   r   i  i   @   zt (x y s) c -> (t s) c x y)rN   r   .z(t s) c x y -> t (x y s) c)tzt (x y s) -> (t s) x yz(t s) x y -> t (x y s))	r,   r    r$   r.   r1   r%   r&   r(   r)   r0   i           )rJ   rI   rL   rM   )r   r   maxr
   r   eyerE   cloner   sizer   r\   r^   r	   r   r%   r&   r   rV   r4   r_   )rd   r   r   contexttrgt
post_inputframesr   depth_framesr,   r1   hsrM   r(   r)   gstrack_slrG   switchs                       r   r   zImageFolder.__getitem__   s   

++a.{{::<>&*6 EIIaL.C<MNTTV
"
1bqb!8
&&
1a7,"3"3B"77,:K:KB:OO
1a7)..$VAY^^B%77	!T{kk!n%Mdkk$--&?%MN++a.)Q$++dmm*CDMM)QR ;7SV^ai!jknosqsostxvxtxkx!y  |X  [_  [f  [f  g#Y?WZbem%norswuwswx|z|x|o|%}  @X  [_  [f  [f  g
 ((PT]])B4==(PQEdkk$--7EFI!K??+SDKK,Edmm+ST()Q$++dmm*CDMM)QR_h==)Q$++dmm*CDMM)QRSVTVW!%!4!45]dkk$--6OPTP]P]5]!^_b`b!cs~"1	 ::!<dT[[=VW[WdWd<d1e6%="vay61Y;AWaQRd^S[)#c$''k*:;HfHEdd| 	r   r   r   r   r   r   r   r   r      s.    Y 32j  4r   r   c                   8    e Zd ZdZ	 	 	 	 	 	 ddZd Zd ZddZy)	MultiImageFolderrY   c                 2    t        d      | _        d| _        y )Nz5/data/cameron/monocular_ests/pets_dogs/*/lowrespkg.ptr   )r   rb   steprc   s          r   rh   zMultiImageFolder.__init__  s     OP
( 	r   c                 ,    t        | j                        S r   )rE   rb   rj   s    r   rk   zMultiImageFolder.__len__'  s    c$**o-r   c                     |d   j                         }t        t              }|D ]   }|D ]  }||   j                  ||           " |D ]*  }t	        |       t        j                  ||   d      ||<   , |S #  Y 3xY wrm   )rp   r   ra   rq   r`   r   rr   rs   s         r   rx   zMultiImageFolder.collate_fn)  s    !}!!#T" 	<E;VC[//c
;;	<  	C#J${{6#;A>	  Hs   A99A=Nc                 J   | xj                   dz  c_         t        t        j                  | j                  |               }|D cg c]9  }|j                         D ci c]  \  }}t        |      t        k7  s|| c}}; }}}}t        dD cg c]  }|| j                  |   v  c}      r!t        j                  |d   d         |d   d<   |d   d   j                  d      dk7  r%| t        j                  dt        |       dz
           S |S c c}}w c c}}}w c c}w )Nr   )re10khydrantr   r&   	   )r   ra   r   r}   rb   r   typer7   anyr   r   r~   r   rE   )rd   r   r   r   r   r   r   s          r   r   zMultiImageFolder.__getitem__7  s   		1	5::djjo./DHIIqaggi:sq47E>qs:II .ABTZZ_$BC^c^m^mnrstnu  wG  oH  _IDGL\D]7#$))!,a/tFNN1SQUYWX[<Y7Z0Z ;I Cs$   DD:D?DD Dr   r   r   r   r   r   r   r     s-    Y > .r   r   )r   )g      @r   r   NN)-matplotlib.pyplotpyplotpltcv2r   
statisticsmultiprocessingmptorch.nn.functionalnn
functionalr>   r   r~   imageionumpyr2   r   collectionsr   pdbr   	itertoolsr   r   
imageio.v3v3iiotorchvisionr   sysgzipjsoneinopsr	   r
   rF   homrV   utilsr   DatasetrX   r   r   r   r   r   <module>r      s      
 	          #   "    " 
  	    $	:U3j/EKK$$,, /b{%++""** {x@u{{''// @r   