
    :Shj                        U d dl Z d dlZd dlmZmZmZmZmZ d dlZ	d dl
mZ d dlmZmZ  e j        e j                    e j        e          Ze j        ed<   dZdZ G d	 d
e          Z G d de          Z G d de          ZdS )    N)ListOptionalTupleTypeUnion)gss)PipelineTransformerMixin)levelloggerg?g?c                       e Zd ZdS )FailedToFindAlignmentExceptionN)__name__
__module____qualname__     X/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/ffsubsync/aligners.pyr   r      s        Dr   r   c                       e Zd Zddee         ddfdZdej        dej        dej        fdZdej        dej        ddfdZ	dd
e
dd fdZdeeeeef         f         fdZdS )
FFTAlignerNmax_offset_samplesreturnc                 >    || _         d | _        d | _        d| _        d S )NF)r   best_offset_best_score_
get_score_)selfr   s     r   __init__zFFTAligner.__init__   s%    1C+/,0 %r   convolve	substringc                     t          j                  | j        S fd}t          d          d  || j                   <   t          d           || j                  d <   S )Nc                 N    t                    dz
  | z   t                    z
  S N   )len)offsetr   r    s    r   _offset_to_indexzNFFTAligner._eliminate_extreme_offsets_from_solutions.<locals>._offset_to_index&   s$    x==1$v-I>>r   z-inf)npcopyr   float)r   r   r    r'   s    `` r   )_eliminate_extreme_offsets_from_solutionsz4FFTAligner._eliminate_extreme_offsets_from_solutions   s     78$$"*O	? 	? 	? 	? 	? 	? BGv=##T%<$<===>@Ef!!$"9::<<=r   c                     t          t          j        |                    }t          |          dz
  |z
  t          |          z
  | _        ||         | _        d S r#   )intr(   argmaxr%   r   r   )r   r   r    best_idxs       r   _compute_argmaxzFFTAligner._compute_argmax-   sO    ry**++MMA-83y>>I#H-r   F	get_scorec                    d ||fD             \  }}t          d ||g          \  }}t          j        t          |          t          |          z   d          }t	          dt          j        |          z            }|t          |          z
  t          |          z
  }t          j                            t          j        t          j	        |t          |          z             |                    }t          j                            t          j
        t          j        |t          j	        t          |          |z                       d                    }t          j        t          j                            ||z                      }	|                     |                     |	|          |           || _        | S )Nc                     g | ];}t          |t                    r"t          t          t          |                    n|<S r   )
isinstancestrlistmapr-   ).0ss     r   
<listcomp>z"FFTAligner.fit.<locals>.<listcomp>3   sL      
  
  
 ",As!3!3:DS! 
  
  
r   c                 f    dt          j        |                               t                    z  dz
  S )N   r$   )r(   arrayastyper*   )r9   s    r   <lambda>z FFTAligner.fit.<locals>.<lambda>8   s&    a"(1++,,U333a7 r   r<   r   )r7   mathlogr%   r-   ceilr(   fftappendzerosfliprealifftr0   r+   r   )
r   	refstringr    r1   
total_bitstotal_lengthextra_zerossubftrefftr   s
             r   fitzFFTAligner.fit2   s    
  
+ 
  
  
	9  #77)Y9O 
  
	9 Xc)nns9~~=qAA
1	* 5 5566"S^^3c)nnD

29RXkC	NN.J%K%KYWWXX

GBIi#i..;2N)O)OPPRSTT
 
 726;;uu}5566::8YOO	
 	
 	
 $r   c                 :    | j         r| j        | j        fS | j        S N)r   r   r   )r   _s     r   	transformzFFTAligner.transformI   s&    ? 	%#T%666$$r   rQ   )F)r   r   r   r   r-   r   r(   ndarrayr+   r0   boolrO   r   r   r*   rS   r   r   r   r   r      s        & &8C= &D & & & &
/1z	   .
 .rz .d . . . .
 4 L    .%uS%s
*;%;< % % % % % %r   r   c                       e Zd Z	 	 	 d
deeee         f         dee         ddfdZd Z	dee
ee
         f         dd fdZdeeeef         e
f         fd	ZdS )MaxScoreAlignerNbase_alignersrtinr   c                     || _         ||d | _        n$t          t          ||z                      | _        t	          |t
                    r || j                  | _        n|| _        || _        g | _        d S )N)r   )	rY   r   absr-   r4   typerX   max_offset_seconds_scores)r   rX   rY   sample_rater]   s        r   r   zMaxScoreAligner.__init__Q   s     %*
"4"<59D##&)#.@;.N*O*O&P&PD#lD)) 	-,8L#'#:- - -D !-D1CACr   c                 P      fd}t          |t          t                      S )Nc                 (    |           }|                     j                  }j                             |d          }t                              d|d         |d         |            |rj                            ||f           |d          S )NTr1   z)got score %.0f (offset %d) for ratio %.3fr   r$   )fit_transformrY   rX   r   infor^   rD   )framerate_ratiois_last_itersubpiper    scorerI   r   subpipe_makers        r   opt_funcz)MaxScoreAligner.fit_gss.<locals>.opt_funcg   s    #mO44G--dj99I%339 4  E KK;aa	    6##UG$4555!H9r   )r   MIN_FRAMERATE_RATIOMAX_FRAMERATE_RATIO)r   rI   ri   rj   s   ``` r   fit_gsszMaxScoreAligner.fit_gssf   sC    	 	 	 	 	 	 	  	H)+>???r   subpipesc                 T   t          |t                    s|g}|D ]}t          |          r|                     ||           (t	          |d          r|                    | j                  }n|}| j                            | j	        
                    ||d          |f           | S )NrS   Trb   )r4   r6   callablerm   hasattrrS   rY   r^   rD   rX   rc   )r   rI   rn   rg   r    s        r   rO   zMaxScoreAligner.fitz   s     (D)) 	" zH 	 	G   $Y000+.. $#--dj99		#	L%33!9 4   	    r   c                      j         } j         t          t           fd|                    }t	          |          dk    r't          d                     j                            t          |d           \  \  }}}||f|fS )Nc                 L    t          | d         d                   j        k    S )Nr   r$   )r[   r   )r9   r   s    r   r?   z+MaxScoreAligner.transform.<locals>.<lambda>   s    QqT!W1H!H r   r   zZSynchronization failed; consider passing --max-offset-seconds with a number larger than {}c                     | d         d         S )Nr   r   )xs    r   r?   z+MaxScoreAligner.transform.<locals>.<lambda>   s    QqT!W r   )key)	r^   r   r6   filterr%   r   formatr]   max)r   rR   scoresrh   r&   rg   s   `     r   rS   zMaxScoreAligner.transform   s    ".HHHH&QQ F v;;!0VD344  
 $'v3D3D#E#E#E v''r   )NNN)r   r   r   r   r   r   r   r5   r   rm   r	   r   rO   r   r*   rS   r   r   r   rW   rW   P   s          $D DJZ(889D }D 
D D D D*  (#(4>)A#B	   .(uU5%<%8(%BC ( ( ( ( ( (r   rW   )loggingr@   typingr   r   r   r   r   numpyr(   ffsubsync.golden_section_searchr   ffsubsync.sklearn_shimr	   r
   basicConfigINFO	getLoggerr   r   Logger__annotations__rk   rl   	Exceptionr   r   rW   r   r   r   <module>r      sU     5 5 5 5 5 5 5 5 5 5 5 5 5 5     / / / / / / = = = = = = = =  ', ' ' ' '**844 4 4 4   	 	 	 	 	Y 	 	 	5% 5% 5% 5% 5%! 5% 5% 5%pN( N( N( N( N(& N( N( N( N( N(r   