
    3jN!                        S SK JrJrJrJr  S SKrSSKJrJrJ	r	J
r
Jr  S\R                  S\R                  S\\R                  \R                  4   4S jr SS	\R                  S
\R                  S\\R                  \S4   S\\R                  \\R                  S4   4   4S jjrS\R                  S\R                  S\R                  S\R                  S\R                   S\R                  S\\R                  \R                  \R                  \R                  \R                  4   4S jrS\R                  S\R                  S\R                  S\R                  S\R                  S\S\R                   S\\R                  \R                  4   4S jr  SS\R                  S\R                  S\R                  S\\\4   S\S\S\\R                  \R                  \R                  \R                  4   4S jjrg)    )AnyDictTupleUnionN   )arange_sequencebatch_2x2_ellipsebatch_2x2_invdraw_first_k_couplespiecewise_arange	residualsransidxreturnc                    [         R                  " U S-   5      n[         R                  " U5      n[         R                  " U5      nUR	                  S5      R                  5       SX#-
  -  XC-
  -  -   n[         R                  " USS9n[         R                  " U R                  S   U R                  S9nXR	                  S5      U4   U4$ )zSort residuals.g|=r   gGz?dimdevice)
torchlogminmax	unsqueezefloatargsortarangeshaper   )r   r   logres	minlogres	maxlogressorting_scoresorting_idxesiters_ranges           V/home/wildlama/miniconda3/lib/python3.13/site-packages/kornia/feature/adalam/ransac.pystable_sort_residualsr&      s    YYy5()F		&!I		&!I%%a(..046;M3NR[Rg3hhMMM-R8M,,yq1):J:JKK**2.=>MM    
scores_matend_group_idx	group_idxc                    [         R                  " U SS9nUSS2U4   n[         R                  " [         R                  " UR                  S   S4UR
                  U R                  S9USS2SS24   /SS9nXE-
  nUb  X5SS2U4   -
  nXg4$ US4$ )z$Calculate cumulative sum over group.r   r   Nr   )sizedtyper   r   )r   cumsumcatzerosr   r-   r   )r(   r)   r*   cumulative_scoresending_cumusumsshifted_ending_cumusumsgrouped_sumsgrouped_cumsumss           r%   group_sum_and_cumsumr6   (   s     ZQ7'=(89O#iiKKo33A6:/BWBW`j`q`qrAssF#	
  #<L+al.SS,,r'   rdims
idxoffsetsdvmin_confidencec                    UR                   S   nU R                   S   n[        X5      u  pUS-  n
U
S:*  n[        R                  " USS9S-
  n[        R                  " U
R                  5       R                  5       SSSS9u  pnX   nSU-  R                  US5      nS	UU'   [        UX5      u  nn[        U[        R                  5      (       d  [        S
5      eUR                  5       UR                  USS9R                  5       -  nX-  U:*  U-  nS	UU) '   [        UU5      u  nn[        R                  " UR                  5       SS9u  nn[        U5      n[        R                   " XdS9R                  U5      nU	UR                  U5      UU   U-   4   nU
UUU-   S-
  4   nUU[        R                   " XdS94   R                  5       U-  nUUUUUR                  5       U-  4$ )z&Select inliers from confidence scores.r      g:0yE>r   r   T)r   return_countsreturn_inverseg      ?g        z4Expected the `weights_cumsums` to be a torch.Tensor!r   )r   r&   r   r.   unique_consecutivehalfr   repeatr6   
isinstanceTensor	TypeErrorrepeat_interleaver   longr   r   )r   r   r7   r8   r9   r:   
numransacsnumiters
sorted_resr#   sorted_res_sqrtoo_perfect_fitsend_rans_indexing_inv_indicesres_dup_countsduplicates_per_sampleinlier_weightsbalanced_rdimsweights_cumsumsprogressive_inl_ratesgood_inl_maskinlier_counts_matrix
inl_counts	inl_itersrelative_inl_idxesinl_ransidxinl_sampleidxhighest_accepted_sqr_residualsexpected_extra_inls                                 r%   !confidence_based_inlier_selectionr^   =   s    QJq!H 5i IJ]N%-U2Q6%*%=%=##%1DQU&"AN +71199(AFN'*N#$&:>K\&f#NOou||44NOO+113~7W7WX]cd7W7e6l6l6nn#48MMQaaM%(NM>"2>CTU!!II&:&?&?&AqIJ	(4,,z5GG
SK!)"="=j"I:VaKbewKw"wxM%3IzJ?VYZ?Z4Z%["y%,,z"EEFLLNQoo  z9j>N>N>PSe>eeer'   xsamplesysamplesinlier_countsrZ   r[   rG   c                    [        [        R                  " U5      R                  5       5      nU R                  n[        R
                  " XWS4XhS9n	[        R
                  " XWS4XhS9n
X   X[        U5      4'   X   X[        U5      4'   X4$ )zSample from padded inliers.r<   )r,   r   r-   )intr   r   itemr-   r0   r   )r_   r`   ra   rZ   r[   rG   r9   
maxinliersr-   padded_inlier_xpadded_inlier_ys              r%   sample_padded_inliersrh   n   s     UYY}-2245JNNEkk
'B2[Okk
'B2[OBJBYO!1+!>>?BJBYO!1+!>>?++r'   configitersrefitc           	      r   US   nUS   nUS   nUR                   S   n	[        R                  " XS9R                  U5      n
[        R                  " [        R
                  " S/US9[        R                  " USS SS9/SS9n[        XBU5      nX-   n[        R                  " X   S	S
S9n[        R                  " X   S	S
S9n[        R                  " [        USS9U-  SS5      nU(       d@  [        U5      u  nnUS   S	US
-  -  :  US   US
-  :  -  n[        R                  " S
US9UU'   USS2U
4   U R                  S5      -  R                  S5      n[        R                  " UU-
  SS9n[        UXXUS9u  nnnnn[!        U5      S:X  a  SnU(       d+  UUU[        R                  " UR                   S   US94   UU4$ [#        XUUUX5      u  nnUR                  SS5      U-  [        UR                  SS5      U-  SS9-  n[        U5      u  nnUS   S	US
-  -  :  US   US
-  :  -  n[        R                  " S
UUR$                  S9UU'   UU
   U R                  S5      -  R                  S5      n[        R                  " UU-
  SS9n[        UR                  S5      XXUS9u  nnnnnUUUU4$ )zRun ransac.detected_scale_rate_thresholdr:   r   r   r   Nr   r   r   r<   )dim0dim1T)
check_dets).r   ).r   )r9   r:   F)r   r-   )r   r   r   rE   r/   tensorr.   r   	transposer
   r	   eyer   squeezenormr^   lenrh   r-   )r_   r`   r7   ri   rj   rk   DET_THRMIN_CONFIDENCEr9   rG   r   r8   rand_samples_relrand_samples_abs	sampled_x	sampled_yaffinities_fit	eigenvals
_eigenvecsbad_onesy_predr   rZ   r[   rW   rX   inl_confidencerf   rg   refit_affinitys                                 r%   ransacr      s    45G,-Nh'BQJll:1CCEJGELL!R8%,,uSbzWX:YZ`abJ+E"='4"I  :KI __]9%NQZ%Z\^`bcN 1. A	:f%GQJ69V;LwXYz;YZ#(99Qr#:x QZ(8+=+=b+AAJJ2NF

6H,"5IHi7:^IEK
I~ =Q9ell9??13Eb&QQR	
 	
 (=J]J($O_ 	!!"b)
	
11"b9OKX\
]	^  .n=Iz&!A
N2y7H7TU:7UVH$yy2^=Q=QRN8W%(:(:2(>>GGKF

6H,"5IHiA
R`IEK
I~ ..*DDr'   )N)   T)typingr   r   r   r   r   utilsr   r	   r
   r   r   rC   r&   slicer6   r   r^   rc   rh   strboolr    r'   r%   <module>r      sN  $ + *  l lNU\\ NELL NUSXS_S_afamamSmMn N  jn-2\\FKELLZ_aeLeFf
5<<u||T1223*.f||.f\\.f <<.f 	.f
 	.f LL.f 5<<u||U\\5<<OP.fb,ll,ll, <<, 	,
 <<, , 	, 5<<%&,4 KEllKEllKE <<KE cN	KE
 KE KE 5<<u||U\\ABKEr'   