
     h                     :    d dl Zd dlZddZd ZddZddZddZy)	    Nc                 
   g }|dk(  rDt        t        |             D ]+  }t        |      D ]  }|j                  | |   | |   f        - n`|j                  d      r|j	                  d       }	 t        |j                  d      d         }t               }
t        t        |             D ]V  }t        d|dz         D ]B  }||z   }|r|t        |       z  }|t        |       k\  r'|
j                  ||k  r||fn||f       D X |
D ]  \  }}|j                  | |   | |   f         n|j                  d      r|j	                  d       }	 t        |j                  d      d         }t        |      D cg c]  }d|z  	 }}t               }
t        t        |             D ]u  }|D cg c]  }||z
  	 }}|D cg c]  }||z   	 }}||z   D ]G  }|r|t        |       z  }|d	k  s|t        |       k\  s||k(  r,|
j                  ||k  r||fn||f       I w |
D ]  \  }}|j                  | |   | |   f         nl|j                  d
      r[d|v rt        |j                  d      d         nd	}t        t        |             D ]!  }||k7  s	|j                  | |   | |   f       # |r||D cg c]	  \  }}||f c}}z  }t        |t              r)|j                  d      rt        |t        |dd              }t        |t              r+|j                  d      rt        |t        |dd        d      }|S # t        $ r}	d}Y d }	~	d }	~	ww xY w# t        $ r}	d}Y d }	~	d }	~	ww xY wc c}w c c}w c c}w c c}}w )Ncompleteswin	noncyclic-      logwin   r   onerefseqcycTcyclic)rangelenappend
startswithendswithintsplit	Exceptionsetadd
isinstancestrfilter_pairs_seq)imgsscene_graph	prefilter
symmetrizepairsijiscyclicwinsizeepairsididxoffsetsoffixs_lixs_rrefidimg1img2s                      @/home/cameronsmith/repos/controll3r/dust3r/dust3r/image_pairs.py
make_pairsr2      s   Ej s4y! 	1A1X 1d1gtAw/01	1 
			'"++K88	+++C034G %s4y! 	?A1gk* ?1uD	/C#d)#CQHc1X>?	?  	-DAqLL$q'47+,	-				)"++K88	+++C034G "'w0A1a400%s4y! 	9A(/0QW0E0(/0QW0E0U] 9CIAq5ATNa1fa!eQF!Q89	9  	-DAqLL$q'47+,	-				)252DK%%c*1-.!s4y! 	5AEzd5k4734	5 7:44,77 )S!i&:&:5&A IabM(:;)S!i&:&:5&A IabM(:4HL_  	G	"  	G	0 10 8sH   0L> M 8M0+M5=M:4M?>	MMM	M- M((M-c           	      d   t        | t              r.| j                         D ci c]  \  }}|t        ||       c}}S t        | t        j
                  t        j                  f      r| |   S t        | t        t        f      r" t        |       |D cg c]  }| |   	 c}      S y c c}}w c c}w N)r   dictitemsseltorchTensornpndarraytuplelisttype)xkeptkvs       r1   r7   r7   G   s    !T,-GGI6DAq3q$<66!ellBJJ/0w!eT]#tAwd+!+,, $ 7 ,s   B'B-c           	         t        d | D              dz   }g }t        |       D ]Z  \  }\  }}t        ||z
        }|r+t        |t        ||z   |z
        t        ||z
  |z
              }||k  sJ|j	                  |       \ |S )Nc              3   2   K   | ]  }t        |        y wr4   )max).0r'   s     r1   	<genexpr>z$_filter_edges_seq.<locals>.<genexpr>R   s     "qCF"s   r   )rE   	enumerateabsminr   )	edgesseq_dis_thrr   nr@   r'   r#   r$   diss	            r1   _filter_edges_seqrO   P   s    "E""Q&ADu% 	6Aq!a%jc3q1uqy>3q1uqy>:C+KKN K    c                     | D cg c]  \  }}|d   |d   f }}}t        |||      }|D cg c]  }| |   	 c}S c c}}w c c}w )Nr)   r   )rO   )r"   rL   r   r/   r0   rK   r@   r#   s           r1   r   r   ^   sR    :?@JD$d5k4;'@E@UK?D"#E!H## A#s	   >Ac           
      D   t        | d   |d         D cg c]  \  }}t        |      t        |      f }}}t        |||      }	t        d| dt	        |	       dt	        |       d       t        | |	      t        ||	      t        ||	      t        ||	      fS c c}}w )Nr)   r   z>> Filtering edges more than z frames apart: kept /z edges)zipr   rO   printr   r7   )
view1view2pred1pred2rL   r   r#   r$   rK   r@   s
             r1   filter_edges_seqrZ   d   s    *-eElE%L*IJ$!Qc!fc!fJEJUK?D	)+6J3t9+UVWZ[`WaVbbh
ijudS-s5$/?UDAQQQ Ks    B)r   NT)F)numpyr:   r8   r2   r7   rO   r   rZ    rP   r1   <module>r]      s(     9x-$RrP   