
    gL                        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, 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    6/home/cameronsmith/repos/contrastive_pointrack/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<   d| v rrt        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   #   sh   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6!vVfOgOoOopqrsOtuvw{u{O|  PC  PC  PE  FM  S\  B]  Be  Be  fg  Bh  Br  Br  st  u{  |L  uM  uS  uS  TV  UV  uW  BX+.>"? $*=$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)	PointTrackFolderrY   c                 v    |dz
  | _         || _        || _        t        j                  |      | _        || _        y Nr   )r\   r]   r^   r   r=   rL   r_   rc   s          r   rh   zPointTrackFolder.__init__   s4     QJ\\'*r   c                     t        d      S Ng    .Ar4   rj   s    r   rk   zPointTrackFolder.__len__   
    c#hr   c                     |d   j                         }t        t              }|D ]   }|D ]  }||   j                  ||           " |D ]  }t	        j
                  ||   d      ||<   ! |S #  Y (xY wrm   ro   rs   s         r   rx   zPointTrackFolder.collate_fn   ry   rz   Nc                 D   t         j                  j                  t        j                  d      D cg c]	  }d|vs| c}      }d}	 t        t        t        d|z                    | _        t         j                  j                  t        | j                              t         j                  j                  t        | j                              }}|r&t        t        j                  d|z              | _        t        j                  | j                  |   | j                  |   fD cg c]L  }t        j                   t#        j$                  |            j'                  ddd	      d    j)                         N c}      }	|	j+                         dkD  r|	d
z  }	|r=t-        | j                  d   d      ||g   }
t-        | j                  d	   d      ||g   }n|	d d	 }	|	d   j/                  d      |	d   j/                  d      z  }d\  }}ddg}d|	dz  d	z
  i}|r

|d<   |d<   d	dgd   }t1        |d	|z  |dd|z  z  t3        d| j4                  z        t3        d| j4                  z        gd d |   |d d d         S c c}w #  t        d|       | d   cY S xY wc c}w )Nz"/data/cameron/monocular_ests/davis2Tz/data/DAVIS/1080p/%s/*.jpgz4/data/cameron/monocular_ests/davis/%s/pred_tracks.ptzbad load for r   r   r      zs 1 t xy c -> t (xy s) czs 1 t xy -> t (xy s)r      r        r    r(   r)              rJ   rI   rL   rM   )r2   r~   r   oslistdirsortedra   r   	img_pathsr   rE   r   r}   tracksr`   r   r9   pltimreadpermuter7   maxr	   sizerV   r4   r_   )rd   r   r   r   scene
use_tracksidx1idx2img_pathframesr(   r)   r1   hsrM   rG   switchs                     r   r   zPointTrackFolder.__getitem__   s   ii2::6Z+[la_bjk_klm
	#D.J5.P)Q$RSDNii''DNN(;<RYY=N=NsSWSaSaOb=cDUZZ8not8t-u(v$+
 quqq  AE  rF  GK  GU  GU  VZ  G[  q\  ]dlE,,SZZ-ABJJ1QqQRVW]]_  ]  ^::<>&*6#T[[^4NOQUVZP[\K'Q8NOQUVZP[\OBQZf)..$VAY^^B%77	!T{faik "-F=!&5F$%"vay61Y;AWaQRd^S[)#c$''k*:;HfHEdd| 	;  m	/%(7N ]s   	J J 	B1J )AJJr   r   r   r   r   r   r   r      s-    Y , '!r   r   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        t        d            | _	        t        j                  | j                         | j                  d d | _	        y )Nr   z"/data/pets_co3d/dog/*/images/*.jpgi'  )r\   r]   r^   r   r=   rL   r_   ra   r   r   r~   shufflerc   s          r   rh   zImageFolder.__init__   sl     QJ\\'* d#GHI 	t~~&~~fu-r   c                     t        d      S r   r   rj   s    r   rk   zImageFolder.__len__   r   r   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}t         j                  j                  | j                        }t	        j
                  t        j                  |            j                  ddd      d    j                         }|j                  d      dk7  r| d   S |j                         dkD  r|dz  }|d   j                  d      |d   j                  d      z  }d\  }}d	d
g}d|d | j                  | j                  z  | j                     dz  dz
  i}	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 #  | d   cY S xY w)Nr   r   r   r   r   r   r   r   r   r   r    r   r   r   r   r   )r2   r~   r   r   r   r9   r   r   r   r7   r   r   r\   r^   rV   r4   r_   )rd   r   r   r   r   r1   r   r   rM   rG   r   s              r   r   zImageFolder.__getitem__  se   99##DNN3&&szz(';<DDQqKDQWWYV;;q>17N::<>&*6)..$VAY^^B%77	!T{ fEdkk$--7EFI!K "vay61Y;AWaQRd^S[)#c$''k*:;HfHEdd| 	 	d1g~s   A
E% %E.r   r   r   r   r   r   r   r      s-    Y .2 'r   r   c                   8    e Zd ZdZ	 	 	 	 	 	 ddZd Zd ZddZy)	ImageFolder_rY   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         | _        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 x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/video_depth_ests.ptz/depth_ests.ptzDone loading dataz	/poses.ptz/intrinsics.pt)r\   r]   r^   r   r=   rL   r_   r`   rg   ra   r}   r   imgsr/   
dino_featsr%   r&   r	   depthsmdepthsposesr   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jj&<!<=zz$'7"78 LLO!"
77>>${*+%**T+EU:VTZ

4 001=	Huzz$/E*EFGDK 	tts$   &H I ,I (IIIc                      yr   r   rj   s    r   rk   zImageFolder_.__len__S  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_fnU  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                     | 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   r   r   zi j -> b i j)br+   r   r   r   r   r   @   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$   r.   r1   r%   r&   r(   r)   r0   r   r   r   r   r   )r   r   r   r
   r   eyerE   cloner   r   r   r\   r^   r	   r/   r   r%   r&   r   rV   r4   r_   )rd   r   r   contexttrgt
post_inputr   r   depth_framesr,   r1   r   r   rM   r(   r)   gstrack_slrG   r   s                       r   r   zImageFolder_.__getitem__b  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==)Q$++dmm*CDMM)QR??+SDKK,Edmm+ST()Q$++dmm*CDMM)QR_h==)Q$++dmm*CDMM)QRSVTVW!%!4!45]dkk$--6OPTP]P]5]!^_b`b!c)"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  5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__  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pyplotr   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   r   r   <module>r      s      
 	          #   "    " 
  	    $	:U3j/EKK$$,, /bIu{{''// IZB%++""** BJ|5;;##++ |z>u{{''// >r   