
    j'iV                        d dl Z d dlZd dl mZ d dlZd dlZd dlmZm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Zd dlmZ d dlmZ d dlZd dlmZ d dlmZmZmZmZmZmZ d d	lmZ ej@                  jC                  d
       d dl"m#Z#m$Z$ d dl%Z%d dl&Z&d dl&m'Z' d Z(ddZ)d Z*d Z+d Z,ddZ-d Z.d Z/d Z0d Z1dZ2dZ3dZ4 G d dejj                        Z6 G d dejj                        Z7y)    N)nn)	rearrangerepeat)
functional)deepcopy)cm)tqdm)CallableListOptionalTuple	GeneratorDict)defaultdictz./third_party/co-tracker/)
Visualizerread_video_from_path)KMeansc                     t        | d      S )Nz... c x y -> ... (x y) c)r   xs    '/home/cameronsmith/repos/sire/models.py<lambda>r      s    9Q :;     c           	      f    t        | d|"t        | j                  d      dz              S |      S )Nz... (x y) c -> ... c x y      ?r   )r   intsize)srcr   s     r   r   r      s2    Y-Gijir3sxxXZ|`cOdKez xyz r   c                 d    t        j                  | t        j                  | ddgf         fd      S )N.r   )torchcat	ones_liker   s    r   r   r      s)    		1eooaaSk:;R@ r   c                 .    | dd df   d| ddd f   z   z  S )N.r!   gh㈵> r   s    r   r   r      s&    !C"H+#rs(!34 r   c                 @    t        j                  | |dz  dz
  ||      S )N      )modepadding_mode)Fgrid_sampler   ypadr*   s       r   r   r      s    AMM1a!eaidY\$] r   c                     t        | j                        dk(  rt        | |||      S t        | j                  dd      |j                  dd      ||      j	                  d| j                  d d       S )N   r   r)   r(   )lenshape
grid_samp_flatten	unflattenr.   s       r   r   r       s    WZ[\[b[bWcghWhAq#d9S nxyz  zC  zC  DE  GH  zI  KL  KT  KT  UV  XY  KZ  [^  _c  od  on  on  op  rs  ry  ry  z|  {|  r}  o~ r   c                 B    t        t        j                  d||             S )Nb...cij,b...ckj->b...cki)unhomr"   einsum)crdsKs     r   r   r   !   s    %-GD QR r   c           	      d    t        t        j                  d|t        |             dd df   |      S )Nr9   .   )projectr"   r;   hom)r<   posesr=   s      r   r   r   "   s6    gu||4NPUWZ[_W`'abegihigibi'jlmn r   c                 b    | t        j                  t        |             j                  |          S N)r"   randpermr3   tor   s    r   r   r   #   s#    AennSV,//23 r   c           	      6   d }g }t        t        |       dz
        D ]S  }|j                  t        j                  | |   | |dz                   |j                  t        j
                                U t        j                  |d d  }|j                  |       |S )Nc                     t        |       t        j                  k(  r;t        | d      r.t        j                  j                  | j                  ddd       y y y )Nweightg        relufan_in)anonlinearityr*   )typer   Linearhasattrinitkaiming_normal_rI   )ms    r   init_weights_normalz%make_net.<locals>.init_weights_normal&   sD    7biiq(#RWW%<%<ahh#\biq%<%r#  r   r)   r!   )ranger3   appendr   rO   ReLU
Sequentialapply)dimsrT   layersinets        r   make_netr^   %   s    s F3t9q=! !biiQa!e56bggi ! --
%CII!"Jr   Tc                   8     e Zd Zd fd	Zdi fdZdi fdZ xZS )SIRENc                    t         |           || _        d| _        d}t	        ||dg      | _        t        j                  |ddd      | _        d}t        j                  ||dd      | _	        t        j                  |ddd      | _
        t        j                  |ddd      | _        t	        |dz  ddg      | _        t        dt        dz  z   | j                  z  d	
      | _        d| _        y )Nr)   @   r?   )padding   r(      r   F)in_chuse_first_pool)super__init__argstime_strider^   	depth_estr   Conv2d
depth_convaffinities_convgeneral_confidence_convgeneral_confidence_conv_staticcorr_weighter_perpoint	ResnetFPNuse_depth_inpimg_encstep)selfrj   fdimaffinity_dim	__class__s       r   ri   zSIRE.__init__6   s    	 !4q/2))D!Q:!yy|QJ')yyq!Q'G$.0iiaA.N+&.q"a/@&A# !-/(9T=M=M'M^cd 	r   c                 F   t        j                  |d   j                  d            }g }t        d       t	        t        |j                  t        |      dz        dd            D ]  \  }} | ||      }t        |      r-|j                         D 	ci c]  \  }}	|g dd d  v s||	 }}}	d	|v r`|t        j                  d
t        |j                  t        |      dz              d      j                         v r|d	   d d d df   |d	<   n|d	= |j                  |        t        d       |d
   }d	|v rt        j                  |D 
cg c]  }
|
d   	 c}
d      |d<   t        j                  |D 
cg c]  }
d	|
v s|
d	    c}
d      |d	<   t        j                  |D 
cg c]  }
|
d   	 c}
d      |d<   t        j                  |D 
cg c]  }
|
d   	 c}
d      |d<   t        j                  |d   d
   d      |d<   |S c c}	}w c c}
w c c}
w c c}
w c c}
w )Npred_tracksr   zcollecting perpoint queriesi,  F)leavedesc)
track_idxs)	poses_allpoint_track_reprojworldcrds_pertrackaff_simr   r   d   2   r)   z done collecting perpoint queriesr   r(   r   r      )
n_clusterspose_clusters)r"   aranger   print	enumerater	   chunkr3   itemslinspacelongrV   r#   geometrycluster_and_represent)rw   model_input
sample_ptsouttrack_idxs_alloutsr\   r   kvr   s              r   forward_allptszSIRE.forward_allptsP   sJ    k-&@&E&Eb&IJ+,&n.B.B3~CVZ]C].^fk  sP  )R  S 	MAz{z:C4y#&99;}CAa!7yz{7|2|AaC}s}Cq#n.B.B3~CVX[C[.\*]_abggii|  AJ  }K  LM  NP  OP  NP  LP  }Qknoxkyi.KK	 	011g(-		UY2[PQA6J4K2[]^(_C$%"YYt'V!yTU~9'VXYZC	N$yy4)Ia1[>)I1MC(-		UY2[PQA6J4K2[\](^C$%#+#A#A#kBRSTBUac#dC 
 ~ 3\'V)I2[s*   H	'H	H7	HH&HHc                 8   t        j                         r| xj                  dz  c_        |d   j                  dd  }|d   j                  d d |d   j	                  d      c\  }}}|d   |d   z  }t        j
                  d|d   j	                  d      dz
  |      j                         }	d}
t        |d   d d d d dgf   |d   d d dd f   j                  d            j                  d      j                  d	      j                         }t        j                  |d
   d d dd f   |t        j                  |            x}}|j                  d      d   }|*t        j                  |d   j	                  d            d d }|d   }t        |d| j                         }d|vst        j                         rYt#        j$                  | j'                  |j)                  dd      dz  dz         |d      }t        |d| j                   |      |d<   t#        j*                  | j-                  |d   j)                  dd            j/                  d||f      dz         dz   x}}t1        j2                  |d   |d   d       d   }|t        ||d   j                  d            j                  d      z  }| j5                  |d   j)                  dd            j/                  d||f      j7                         j9                  d      }t        ||d   j                  d            j                  d      |d
   j                  d	      z  }t1        j:                  |d d d dd |	f   |d d d d d	|	f   |d d d d d	|	f   j9                  d            d   }t=        |dz
  dd	      D ]C  }t        j>                  |d d d d d |f   |d d d d |dz
  gf   |d d d d |d f   z  fd      }E t        j>                  t        j@                  d      jC                  |      d   jE                  |j	                  d      |j	                  d      d	d	d	      |fd      }|jE                  d	tG        |      d	d	d	      }tI        |jK                         d|      tI        |d|      z  }t        jL                  d|tO        tI        |d d d d |f   d|                  dd d f   }tQ        ||d         j9                  dd      }|d
   t        j>                  t        j                  |d d d df         |fd      z  }||d   d d d d d |f   z
  |d d d d d |d f   z  jS                         j)                         jU                         }||||d d df   |d d df   tW        |      tW        |      d!z  }| jY                  |d   j)                  dd            j/                  d||f      }t#        jZ                  |d      }tW        t        ||d   j                  d                  }||d
   j                  d	      z  j]                  d      |d
   j                  d	      j]                  d      j9                  d      z  }t        jL                  d"|d d |f   |      } | j_                  |d   j)                  dd            j/                  d||f      j7                         j9                  d      }!t        |!|d   j                  d            j                  d      |d
   j                  d	      z  }"|d   j	                  d      d#z  }#t        j                  |ja                         d d |d f   jE                  d	d	| j	                  d	            t        j                  |       |       }$t1        j:                  |d d d dd d d |#f   jE                  d	| j	                  d      d	d	d	      |d d d d d	d d |#f   jE                  d	| j	                  d      d	d	d	      |"d d d d d	d d |#f   jE                  d	| j	                  d      d	d	d	      |$d d d d d d d |#d f   z  j9                  d            d   }%t=        |dz
  dd	      D ]C  }t        j>                  |%d d d d d |f   |%d d d d |dz
  gf   |%d d d d |d f   z  fd      }%E t        j>                  t        j@                  d      jC                  |%      d   jE                  |%j	                  d      |%j	                  d      d	d	d	      |%fd      }%tI        |%jK                         d|      tI        |%d|      z  }&t        jL                  d|&tO        tI        |d d d d |f   d|                  dd d f   }'tQ        |'|d         j9                  dd      }(|(|d   d d d d d |f   z
  |d
   d d d d d |d f   z  jS                         j)                         jU                         })t        jb                         5  |d   j	                  d      d$z  dk(  rd%nd&\  }*}+t        |d'|*|*(      d d df   },t        jL                  d"tW        |,dd d |+d d |+f         tW        |,            j/                  d|*|+z  |*|+z  f      j/                  d	|*|*f      }-tW        t        |d   |d   j                  d                  }.|.|d
   j                  d	      z  j]                  d      |d
   j                  d	      j]                  d      j9                  d      z  }.t        jL                  d)|%tO        |d d d d |f               dd d f   }/|/|d
   d d d d |f   j                  d	      z  j]                  d      |d
   d d d d |f   j                  d	      j]                  d      j9                  d      z  }/d d d        |/.||%|)|(d d df   |!| -|||tW        |      d*z  S # 1 sw Y   ,xY w)+Nr)   rgbr   r(   r   r|   rb   rb   rig_flow_masksr!   pred_visibilitydim   zb (t s) c x y -> b t (s c) x y)sfmapr   bilinearr*   z (b t) (s c) x y -> b (t s) c x y)r   b
intrinsicsg-C6?)minr2   )NNNzb p t x y -> b p s t x yzb p t x y -> b p t s x yzbpstij,bstpj->bstpizb t p c -> b t s p c.r?   )corr_weights_staticpoint_track_loss_staticpoint_track_reproj_staticrB   	res_depthdepthzb p c, b q c -> b p qi  i   )rb   r2   )*   r?   zb (x y s) c -> b s c x y)r/   r   zbptij,btpj->btpi)r   rgb_pertrackrig_pertrackr   point_track_lossr   corr_weightsr   aff_sim_gridaffinity_embaffinity_emb_unnormaff_emb_pertrackr   )2r"   is_grad_enabledrv   r4   r   r   r   	grid_samp	unsqueezesqueezeroundwherer$   r   rE   r   rk   r,   interpolateru   r6   softplusrn   r7   r   get_world_raysrq   sigmoidclipefficient_procrustesrU   r#   eyerF   expandr3   r   inverser;   rA   r@   squaremeanch_secro   	normalizesumrp   boolno_grad)0rw   r   r   r   imsizer   _n_trgtn_samprand_subset	low_imresrig_samprig_samp_allframeimg_inpfmap_outr   r   	rds_trackeye_surf_trackgeneral_conf_staticgeneral_conf_track_staticstatic_posesr\   static_poses_all_to_allstatic_point_track_surf_reprojstatic_point_track_reprojvis_and_rig_maskstatic_point_track_lossr   r   aff_emb_pertrack_allframer   r   general_confgeneral_conf_tracksolve_strideaff_sim_rigrB   poses_all_to_allpoint_track_surf_reprojr   r   track_sldslsrc_tracks_0r   r   r   s0                                                   r   forwardzSIRE.forwardn   s     "499a<9U#))"#.$U+11"15{57I7N7Nq7QAVAY&nnQM(B(G(G(KA(MvV[[]	 ,< =aQCi H+VcJdefhihjejJkJuJuvxJy{  E  E  FG  H  Q  Q  RT  U  \  \  ^',{{K@Q4RSTVWVXSX4Y[cejetetu}e~'$<<A<&q) ENN;};U;Z;Z[];^,_`dad,ez e$W&F$JZJZ[$(=(=(?}}dll7??1a3H33NQT3T&UW]dnpH"+X7Y]a]m]mqr"sKJJF8K8S8STUWX8Y(Z(d(defijlrhs(twx(xyz{{{	 ++[-GUaIbdhijkl	"Y{=7Q7[7[\^7_%`%h%hij%kk !% C CKPVDWD_D_`acdDe f q qrsvwy  vA  !B  !K  !K  !M  !S  !S  X\  !S  !]$-/BKP]D^DhDhikDl$m$u$uvw$x  |G  HY  |Z  |d  |d  eg  |h  %h!44nQabR]E]6^`noprvx{y{x{  ~I  pI  aJ  Le  fg  im  or  pr  or  t  f  L@  LE  LE  JN  LE  LO  Q  RS  Tvz1b)  	YA%))lSTVWY[Z[Y[S[F\^jklnorsvwrwqxkx^y  }I  JK  MN  PQ  PR  JR  }S  _S  FT  VX  ;Y<  	YyyEIIaLOOL$ABR$S$Z$Z[g[l[lmn[oq}  rC  rC  DE  rF  HJ  LN  PR  %S  Ua  #c  eg  i#**BJRL #),*>*>*@B\`f"gjpq}  @Z  ^d  ke  #e).7LNegjlr  uC  DE  GH  JT  DT  uU  Wm  qw  mx  hy  *{  |  AC  BC  AC  |C  *D&$+-K[YeMf$g$l$lmnpq$r!'(9:UYYXijklnmnlnjnXoHp  rC  HD  EF  >G  G(AKP]D^_`bfhiku_uDv(v  {K  LM  OS  UV  Xb  dh  Lh  {i  'i  %q  %q  %s  %{  %{  %}  %B  %B  %D#6'>)B1a4)H!!A#&	*E]
 	
 #22K4G4O4OPQST4UV``abefhndop {{#6A>$*IlKP]D^DhDhikDl,m$n!6EV9W9a9abd9eejjopjqt  AR  uS  u]  u]  ^`  ua  ue  ue  jk  ue  ul  uq  uq  wx  uq  uy  y,, 79I!Z-9XZjk 55k&6I6Q6QRSUV6WXccdehikqgrs||~  E  E  JN  E  O&k-6P6Z6Z[]6^_gghijmx  zK  nL  nV  nV  WY  nZ  Z$]388<Dkk8==?1j$3F#G#N#NrSUW^WcWcdfWg#hjojyjy  {B  kC  EL  N--~aqr>\>>Y/Z/a/abdfmfrfrstfuwy{}  @B  0C/=assNlN>Z/[/b/bcegngsgstugvxz|~  AC  0D0D#2#~~1MNUUVXZaZfZfghZikmoqsuv  zE  FG  IJ  LP  R`  T`  R`  bf  Ff  zg  g  m  m  rv  m  wy z{| vz1b)|A599uQ2A2XPUVWYZ]^ab]b\cVcPdglmnpqstsumugvPv>wy{3|5|		UYYq\__U34DELLUZZXY]\a\f\fgh\ikmoqsuvx}  BD  F "5==?4NRXY\bch  kE  IO  ]P  P"',,0EGWY\^dftuvxy  |F  vF  gG  I_  ci  _j  Zk  #m  nq  su  tu  su  nu  #v$&={<?XY^^_`bcd!3k-6PQRTXZ[]gQg6h!hlw  yJ  mK  LM  OS  UV  Xb  dh  Lh  mi   i  q  q  s  {  {  }  B  B  D]]_ 		L#.}#=#B#B2#Fu#La#OU[LHS"#34NQY\defghifijL <<)@&VYZ_\_Z_`ebe`eVeIfBgiop|i}~  I  I  JK  MU  WZ  MZ  [c  eh  [h  Li  j  t  t  uw  yA  BJ  xK  LL!9[-?]A[AeAefhAi#jkL)K8I,J,T,TUW,XX]]bc]dgr  tE  hF  hP  hP  QS  hT  hX  hX  ]^  hX  h_  hd  hd  jk  hd  hl  lL!&/A5#n]^`acm]mNnJo!pqtvxwxvxqx!y#5DU8VWXZ[]gWg8h8r8rsu8v#v&)cacj;?P3QRSUVXbRb3c3m3moq3r3v3v|}3v3~  4D  4D  JK  4D  4L"L		L "4($ 0"4QT":(((#6 0E]
 
 	
		L 		Ls   'F>pprD   )__name__
__module____qualname__ri   r   r   __classcell__rz   s   @r   r`   r`   5   s!    6 '+< 04 q
r   r`   c                   D     e Zd Z	 	 	 	 	 	 	 	 	 	 d fd	ZddZddZ xZS )rs   c                 t   t         |           dd}|| _        || _         ||	      }t	        d|d        t        t        j                  |      ||      | _        |
dk7  rt        j                  |
| j                  j                  j                  j                  d   | j                  j                  j                  | j                  j                  j                  | j                  j                  j                   | j                  j                  j"                        | j                  _        t        j$                         | j                  _        t        j$                         | j                  _        g d|   | _        || _        || _        || _        || _        | j5                  d	t7        j8                  d
d
d
d
      d       | j5                  dt7        j8                  dt6        j:                        d       t        j$                  t        j                  | j*                  dd
            | _        d| _        t        j@                  ddddd| j>                  ffD cg c]  \  }}t        j                  ||d
       c}}      jC                         | _"        t        j@                  dddd| j>                  fD cg c]  }t        j                  ||d
       c}      jC                         | _#        t        j                  |
| j>                  d
      jC                         | _$        y c c}}w c c}w )Nc                 :   | dk(  r(t        j                  t        j                  dd      }|S | dk(  r(t        j                  t        j                  dd      }|S | dk(  r&t        j                  t        j
                  |      }|S | dk(  rd}|S t        d	| z        )
ax  Return a normalization layer
            Parameters:
                norm_type (str) -- the name of the normalization layer: batch | instance | none
            For BatchNorm, we use learnable affine parameters and track running statistics (mean/stddev).
            For InstanceNorm, we do not use learnable affine parameters. We do not track running statistics.
            batchT)affinetrack_running_statsinstanceFgroupnoneNz%normalization layer [%s] is not found)	functoolspartialr   BatchNorm2dInstanceNorm2d	GroupNormNotImplementedError)	norm_typegroup_norm_groups
norm_layers      r   get_norm_layerz*ResnetFPN.__init__.<locals>.get_norm_layer   s     G#&..NN4T
  j(&..%%e
  g%&..r||=NO
  f$!

  *;iG r   zUsing torchvisionencoder)
pretrainedr  r?   r   )r+   )r   rb            i   latentr)   F)
persistentlatent_scalingr(   )dtyper	  rb   )r  r  )r  rb   r   r  )r       )%rh   ri   feature_scalerg   r   getattrtorchvisionmodelsmodelr   rm   conv1rI   r4   kernel_sizestriderc   r+   rX   fcavgpoollatent_size
num_layersindex_interpindex_paddingupsample_interpregister_bufferr"   emptyfloat32r   out_dim
ModuleListcudacombs_1combs_2last_conv_up)rw   backboner  r  r  r  r  r  rg   r  rf   r  r  d1d2drz   s                   r   ri   zResnetFPN.__init__   s    		2 +,#I.
!8Y7:W[//:j]gh
A:!yy

  ''--a0

  ,,

  ''

  ((!ZZ--:: DJJ 

]]_

7
C$(*.Xu{{1aA'>5Qekk!5==Ae 	 	
 ==IId&&Q/
 }})T\]delnpquq}q}m~I  &A2ryyR';  &A  B  G  G  I}}C2bQUQ]Q]C^%_aryyAq'9%_`eeg))E4<<;@@B &A%_s   $!L/
L5c           
         t        |j                        dkD  r6 | |j                  dd      |      j                  d|j                  d d       S | j                  dk7  rFt        j                  || j                  | j                  dkD  rdnd| j                  dkD  rdnd d	      }|g}| j                  j                  |      }| j                  j                  |      }| j                  j                  |      }|j                  |       | j                  dkD  rS| j                  r| j                  j                  |      }| j                  j                  |      }|j                  |       | j                  dkD  r,| j                  j!                  |      }|j                  |       | j                  d
kD  r,| j                  j#                  |      }|j                  |       | j                  dkD  r,| j                  j%                  |      }|j                  |       | j&                  dk(  rd nd}|d   j                  dd  } | j(                  d    | j*                  d   t        j                  |d   |d   j                  dd  d            |d   z   j                               } | j(                  d    | j*                  d   t        j                  ||d   j                  dd  d            |d   z   j                               } | j(                  d
    | j*                  d
   t        j                  ||d   j                  dd  d            |d   z   j                               } | j(                  d    | j*                  d   t        j                  ||d   j                  dd  d            | j-                  |d         z   j                               }|S )Nr2   r   r)   r(         ?r   areaTscale_factorr*   align_cornersrecompute_scale_factorr?   nearest r   r!   r   r   )r3   r4   r6   r7   r  r,   r   r  r  bn1rJ   rV   r  rg   maxpoollayer1layer2layer3layer4r  r%  r$  r&  )rw   r   custom_sizelatentsr0  	latent_sz	up_latents          r   r   zResnetFPN.forward3  s   qww<!D1a+$F$P$PQRTUT[T[\^]^T_$``$qt/A/A#'#5#5#;Z_c_q_qtw_wW[  ~B  [_aA#JJQJJNN1JJOOAq??Q""JJ&&q)

!!!$ANN1??Q

!!!$ANN1??Q

!!!$ANN1??Q

!!!$ANN1 $ 1 1Z ?TAJ$$RS)	#DLLOodll1oammGBKPWXZP[PaPabdbePflv6w&x  zA  BD  zE  'E  &K  &K  &M  O	#DLLOodll1oammIgVXkN_N_`b`cNdjt6u&vw~  @B  xC  'C  &I  &I  &K  M	#DLLOodll1oammIgVXkN_N_`b`cNdjt6u&vw~  @B  xC  'C  &I  &I  &K  M	#DLLOodll1oammIgVXkN_N_`b`cNdjt6u&vw{  xI  xI  JQ  RT  JU  xV  'V  &\  &\  &^  `	r   c                 :   t        |j                        dkD  r6 | |j                  dd      |      j                  d|j                  d d       S | j                  dk7  rFt        j                  || j                  | j                  dkD  rdnd| j                  dkD  rdnd d	      }| j                  j                  |      }| j                  j                  |      }| j                  j                  |      }|g}| j                  dkD  rS| j                  r| j                  j                  |      }| j                  j                  |      }|j                  |       | j                  dkD  r,| j                  j!                  |      }|j                  |       | j                  d
kD  r,| j                  j#                  |      }|j                  |       | j                  dkD  r,| j                  j%                  |      }|j                  |       | j&                  dk(  rd nd}|d   j                  dd  }t)        t        |            D ]/  }t        j                  ||   ||n|| j*                  |      ||<   1 t-        j.                  |d      | _        | j0                  j                  d   | j2                  d<   | j0                  j                  d   | j2                  d<   | j2                  | j2                  dz
  z  dz  | _        | j5                  | j0                        S )Nr2   r   r)   r(   r,  r   r-  Tr.  r?   r2  r   )r*   r0  r   r!   g       @)r3   r4   r6   r7   r  r,   r   r  r  r5  rJ   r  rg   r6  r7  rV   r8  r9  r:  r  rU   r  r"   r#   r
  r  r   )rw   r   r;  r<  r0  r=  r\   s          r   forward_zResnetFPN.forward_f  s   qww<!		!Q5??1772A;OO$!//#'#5#5#;Z&*&8&83&>dD'+A JJQJJNN1JJOOA #??Q""JJ&&q)

!!!$ANN1??Q

!!!$ANN1??Q

!!!$ANN1??Q

!!!$ANN1 $ 1 1Z ?TAJ$$RS)	s7|$ 	A
(0	k))+	GAJ	 iiQ/!%!2!22!6A!%!2!22!6A"11T5H5H15LMPSSxx$$r   )
resnet34Tr2   r   borderr   r,  Tr   r?   rD   )r   r   r   ri   r   r@  r   r   s   @r   rs   rs      s6     "OCb%f1%r   rs   rD   )rB  r   )8r"   r  r   korniar   einopsr   r   torch.nnr   r,   numpynpsysrandomtimeoscopyr   
matplotlibr   wandbr	   typingr
   r   r   r   r   r   collectionsr   pathrV   cotracker.utils.visualizerr   r   r   torch_kmeansr   r   ch_fstrA   r:   r5   r   r@   warpshuffler^   static_solvert   scratch_modelModuler`   rs   r&   r   r   <module>rZ     s        $ $        C C # + , G    
<	z@4]
 	
Rn
3
 j
299 j
Xv%		 v%r   