
    lj                        d dl m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 dZd	Z ej        d
          Z G d d          Z G d de          ZdS )    )annotationsN)	Generator)Path)
PixelArray   )show_diff_helperg)\(?gh㈵>manimc                  B    e Zd ZdddZej        dd
            ZddZdS )_FramesTesterF	file_pathr   	show_diffboolreturnNonec                B    || _         || _        |  d| _        d| _        d S )Nr   )
_file_path
_show_diff_number_frames_frames_compared)selfr   r   s      ^/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/utils/testing/_frames_testers.py__init__z_FramesTester.__init__   s,    ## #$ !    Generator[None, None, None]c              #     K   t          j        | j                  5 }|d         | _        t	          | j        j                  dk    r t          j        | j        d          | _        t                              | j        j                   t           j	        
                    | j        d          | _        d V  | j        | j        k    sJ d| j         d| j         d            	 d d d            d S # 1 swxY w Y   d S )N
frame_data   r   )axiszThe scene tested contained z frames, when there are z control frames for this test.)nploadr   _frameslenshapeexpand_dimsloggerdebugmasizer   r   )r   datas     r   testingz_FramesTester.testing   sC     WT_%% 	-DL4<%&&!++!~dlCCCLL+,,,"$%**T\*"B"BDEEE(D,????Vd.C V V"&"5V V V @???	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   C	C33C7:C7frame_numberintframer   c           
        || j         k     sJ d| d| j          d            	 t          j                            || j        |         t
          d| dd           | xj        dz  c_        d S # t          $ r}t          j        || j        |         t
          	          	                                }|j
        |z
  }||j
        z  t          k     r;| xj        dz  c_        t          j        d
| d| d| j         dd           Y d }~d S | j        r't!          ||| j        |         | j        j                   |d }~ww xY w)Nz$The tested scene is at frame number z when there are z control frames.z	Frame no z:. You can use --show_diff to visually show the difference.F)atolerr_msgverboser   )r/   zMismatch of z pixel values in frame z against control data in z&. Below error threshold, continuing...)
stacklevel)r   r   r*   assert_allcloser!   FRAME_ABSOLUTE_TOLERANCEr   AssertionErrorisclosesumr(   FRAME_MISMATCH_RATIO_TOLERANCEwarningswarnr   r   r   name)r   r+   r-   enumber_of_matchesnumber_of_mismatchess         r   check_framez_FramesTester.check_frame,   s   d1111D< D D"1D D D 211!	J&&\*-lLlll '    !!Q&!!!! 	 	 	 "
t|L18P! ! !cee  $):0A#A #ej03QQQ %%*%%$#7 $ $P\ $ $/3$ $ $  !	       L.O(	   G1	s   AA- -
D=7BD80D88D=N)F)r   r   r   r   r   r   r   r   )r+   r,   r-   r   r   r   )__name__
__module____qualname__r   
contextlibcontextmanagerr*   r?    r   r   r   r      se        " " " " "    & & & & & &r   r   c                  H    e Zd ZddZddZej        dd            ZddZdS )_ControlDataWriterr   r   
size_frametupler   r   c                `    || _         t          j        dg|dR           | _        d| _        d S )Nr   r   )r   r   emptyframes_number_frames_written)r   r   rI   s      r   r   z_ControlDataWriter.__init__V   s8    "h2J22233+,###r   indexr,   r-   r   c                    |t           j        df         }t          j        | j        |f          | _        | xj        dz  c_        d S )N.r   )r   newaxisconcatenaterM   rN   )r   rO   r-   s      r   r?   z_ControlDataWriter.check_frame\   sD    bj#o&ndk5%9::##q(####r   r   c              #  :   K   d V  |                                   d S )N)save_contol_datar   s    r   r*   z_ControlDataWriter.testinga   s'      r   c                    | j                             d          | _         t          j        | j        | j                    t
                              | j         d| j                    d S )Nuint8)r   z control frames saved in )rM   astyper   savez_compressedr   r%   inforN   rU   s    r   rT   z#_ControlDataWriter.save_contol_dataf   si    k((11
DNt{CCCC*UUT^UU	
 	
 	
 	
 	
r   N)r   r   rI   rJ   r   r   )rO   r,   r-   r   r   r   r@   )r   r   )	rA   rB   rC   r   r?   rD   rE   r*   rT   rF   r   r   rH   rH   U   st        - - - -) ) ) )
        
 
 
 
 
 
r   rH   )
__future__r   rD   loggingr9   collections.abcr   pathlibr   numpyr   manim.typingr   r   r   r4   r8   	getLoggerr%   r   rH   rF   r   r   <module>rb      s   " " " " " "       % % % % % %           # # # # # # ( ( ( ( ( ( !% 		7	#	#= = = = = = = =@
 
 
 
 
 
 
 
 
 
r   