
    DSj!                    2   d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlmZ ddlZde
j                   d<   ddlmZ ddlmZmZ ddlZddlmZ d	 Zd
 Zd Zd Zd Zd Z G d d      Z G d d      Z  G d d      Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(y)u  Meeting-mode tests — WAV recorder, multilingual STT selection/fallback,
transcript ordering, and the background transcription worker + backlog/finalize
logic. No real models, no audio devices, no Claude session (fakes throughout).

Run:  .venv/bin/python -m pytest test_meeting.py -q
    )annotationsN)Path0RESUME)MeetingSessionWavRecorder)VoiceAppc           
        | dz  }t        |      }t        j                  t        j                  dddt        j                              dz  }t        j
                  ddt        j                        }|j                  |       |j                  |       |j                  }d	}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}}|j                   }
d	}d}||z  }|
|z
  }t#        |      }d}||k  }|s2t        j                  d|fd||f      dt        j                         v st        j                  t"              rt        j                  t"              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |
      t        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}
x}x}x}x}x}x}}|j%                          t'        j(                  t+        |      d      5 }|j,                  } |       }d}||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            d x}x}x}}|j.                  } |       }d}||k(  }|st        j                  d
|fd ||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            d x}x}x}}|j0                  } |       }d}||k(  }|st        j                  d
|fd!||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            d x}x}x}}|j2                  } |       }d	}||k(  }|st        j                  d
|fd"||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }	dd|	iz  }t        t        j                  |            d x}x}x}}t        j4                  |j7                  d	      d#      j9                  t        j                        d$z  }d d d        t        j:                  }d d }d%} ||||&      }|sd'd(t        j                         v st        j                  t              rt        j                  t              nd(t        j                  |      t        j                  |      d)t        j                         v st        j                  |      rt        j                  |      nd)t        j                  |      t        j                  |      d*z  }t        t        j                  |            d x}x}x}}t        j:                  }|dd  }d%} ||||&      }|sd'd(t        j                         v st        j                  t              rt        j                  t              nd(t        j                  |      t        j                  |      d+t        j                         v st        j                  |      rt        j                  |      nd+t        j                  |      t        j                  |      d*z  }t        t        j                  |            d x}x}x}}y # 1 sw Y   _xY w),Nzclip.wavr      i@  dtypeg      ?i  g      ?i  ==)z/%(py2)s
{%(py2)s = %(py0)s.samples
} == %(py5)srecpy0py2py5assert %(py7)spy7i>  gư>)<)zg%(py11)s
{%(py11)s = %(py0)s((%(py3)s
{%(py3)s = %(py1)s.seconds
} - (%(py5)s / %(py7)s)))
} < %(py14)sabs)r   py1py3r   r   py11py14zassert %(py16)spy16rb   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.getnchannels
}()
} == %(py7)sw)r   r   py4r   assert %(py9)spy9   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.getsampwidth
}()
} == %(py7)s)zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.getframerate
}()
} == %(py7)s)zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.getnframes
}()
} == %(py7)s<i2g    @gMbP?)atolzaassert %(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.allclose
}(%(py4)s, %(py5)s, atol=%(py7)s)
}npa)r   r   r!   r   r   r#   b)r   r'   sinlinspacefloat32fullwritesamples
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationsecondsr   closewaveopenstrgetnchannelsgetsampwidthgetframerate
getnframes
frombuffer
readframesastypeallclose)tmp_pathpr   r(   r)   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert2@py_assert6@py_assert8@py_assert9@py_assert10@py_assert13@py_assert12@py_format15@py_format17r    @py_assert5@py_format10pcms                          :/Users/ahmed/devFolder/Ultron/claude-voice/test_meeting.pytest_wav_recorder_roundtriprY      s\   :A
a.C
r{{1b$bjj9:S@A
T,AIIaLIIaL;;$;$;$33;${{1T1E1TE\1{\)13)*1T1*T1111*T11111131113111111s111s111{111T111E111*111T11111111IIK	3q64	 A~~$~$1$1$$$$1$$$$$$q$$$q$$$~$$$$$$1$$$$$$$~~$~$1$1$$$$1$$$$$$q$$$q$$$~$$$$$$1$$$$$$$~~(~(5(5((((5((((((q(((q(((~((((((5(((((((||%|~%%~%%%%~%%%%%%q%%%q%%%|%%%~%%%%%%%%%%mmALL.e<CCBJJORYY 
! ;;0s5Dz040;z140000000020002000;000z0000001000100040000000000;;0s45z040;z140000000020002000;000z0000001000100040000000000 
!	 s   >Od66e c                   | dz  }t        |      }|j                  t        j                  g dt        j                               |j                          t        j                  t        |      d      5 }t        j                  |j                  d      d      }d d d        g }d   }d}||k(  }|}	|r|d	   }
d}| }|
|k(  }|}	|	st        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }|j                  |       |r_t        j                  d
fd
f      t        j                  |
      t        j                        dz  }dd|iz  }|j                  |       t        j                  |d      i z  }dd|iz  }t!        t        j"                  |            d x}	x}x}x}x}x}
x}x}}|d   }	d}|	|k(  }|slt        j                  d
|fd|	|f      t        j                  |	      t        j                  |      dz  }dd|iz  }t!        t        j"                  |            d x}	x}}y # 1 sw Y   xY w)Nzhot.wav)g       @g       g        g      ?r   r      r%   r   i  r   r   )z%(py3)s == %(py6)s)r   py6z%(py8)spy8)z%(py11)s == -%(py14)s)r   r   z%(py17)spy17zassert %(py20)spy20r$   z%(py1)s == %(py4)sr   r!   assert %(py6)sr\   )r   r.   r'   arrayr,   r9   r:   r;   r<   rA   rB   r0   r1   r5   append_format_boolopr6   r7   )rE   rF   r   r    rW   rG   rL   rU   rH   @py_assert0rP   rQ   @py_assert15rR   @py_format7@py_format9@py_format16@py_format18@py_format19@py_format21rI   @py_format5s                         rX   test_wav_recorder_clipsro   0   sv   9A
a.CIIbhh,BJJ?@IIK	3q64	 AmmALLO59 
!/3q6/U/6U?/s1v/%/%/v////6U///6///U///////v///v///%///////////////q6Q6Q;6Q6Q 
!	 s   6'II%c                    t         j                  } d}| |k(  }|st        j                  d|fd| |f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t         j                  } d }| |u }|st        j                  d|fd	| |f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |       t        j                  |      dz  }dd|iz  }t        t        j                  |            d x} x}}t         j                  d
   }t         j                  }||k(  }|st        j                  d|fd||f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d t         j                  D        } t        |       }|sddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |       t        j                  |      dz  }t        t        j                  |            d x} }d t         j                  D        } t        |       }|sddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |       t        j                  |      dz  }t        t        j                  |            d x} }y )N"mlx-community/whisper-large-v3-mlxr   )z9%(py2)s
{%(py2)s = %(py0)s.MEETING_STT_MODEL
} == %(py5)svmr   r   r   is)z8%(py2)s
{%(py2)s = %(py0)s.MEETING_STT_LANG
} is %(py5)sr   )z9%(py1)s == %(py5)s
{%(py5)s = %(py3)s.MEETING_STT_MODEL
})r   r   r   c              3  $   K   | ]  }d |v  
 yw)turboN .0rs     rX   	<genexpr>z,test_meeting_stt_defaults.<locals>.<genexpr>B        7%6w!|%6   ,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}anyr   r   r!   c              3  $   K   | ]  }d |v  
 yw)smallNrw   rx   s     rX   r{   z,test_meeting_stt_defaults.<locals>.<genexpr>C   r|   r}   )rr   MEETING_STT_MODELr0   r1   r2   r3   r4   r5   r6   r7   MEETING_STT_LANG_STT_FALLBACKSr   )rG   rH   rI   rJ   rK   rf   rL   rn   s           rX   test_meeting_stt_defaultsr   =   s4   G#GG#GGGGG#GGGGGGG2GGG2GGGGGG#GGGGGGGG&$&$&&&&$&&&&&&2&&&2&&&&&&$&&&&&&&Q72#7#77#77777#777777777727772777#777777777R%6%677377777777737773777777777777777R%6%67737777777773777377777777777777    c                  	 g 	 G 	fdd      }| j                  t        d|       t        j                         \  }}d}||v }|st        j                  d|fd||f      t        j
                  |      dt        j                         v st        j                  |      rt        j
                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}g d}	|k(  }|st        j                  d|fd	|f      dt        j                         v st        j                  	      rt        j
                  	      ndt        j
                  |      dz  }d	d
|iz  }t        t        j                  |            dx}}y)zDlarge-v3 + turbo fail to load -> loader degrades to the small model.c                      e Zd Z fdZy)6test_load_meeting_stt_fallback.<locals>.FakeMeetingSTTc                Z    j                  |       d|vrt        | d      || _        y )Nr   z not in cache)rd   RuntimeErrorrepo)selfr   attemptss     rX   __init__z?test_load_meeting_stt_fallback.<locals>.FakeMeetingSTT.__init__K   s0    OOD!d""dV=#9::DIr   N__name__
__module____qualname__r   )r   s   rX   FakeMeetingSTTr   J   s    	r   r   
MeetingSTTr   inz%(py1)s in %(py3)snamer   r   assert %(py5)sr   N)rq   z$mlx-community/whisper-large-v3-turbozmlx-community/whisper-small-mlxr   )z%(py0)s == %(py3)sr   )r   r   )setattrrr   load_meeting_sttr0   r1   r5   r2   r3   r4   r6   r7   )
monkeypatchr   sttr   rf   rL   @py_format4rJ   rG   r   s
            @rX   test_load_meeting_stt_fallbackr   F   s$   H  L.9##%IC7d?7d7dd 8    	8    	  	    	    	     	 r   c                6    G d d      }| j                  t        d|       	 t        j                          d}|sNt        j                  d      dz   dt        j
                  |      iz  }t        t        j                  |            d }y # t        $ r Y y w xY w)Nc                      e Zd Zd Zy),test_load_meeting_stt_all_fail.<locals>.Boomc                    t        d      )Nzno model)r   )r   r   s     rX   r   z5test_load_meeting_stt_all_fail.<locals>.Boom.__init__]   s    z**r   Nr   rw   r   rX   Boomr   \   s    	+r   r   r   Fz#should raise when every model failsz
>assert %(py1)sr   )	r   rr   r   r0   _format_assertmsgr5   r6   r7   r   )r   r   rf   @py_format2s       rX   test_load_meeting_stt_all_failr   [   sq    + + L$/
;u;;;;;;u;;;;;; s   A(B 	BBc                 &	   t        dd      } | j                  ddd       | j                  dd	d
       | j                         j                         dd  }|d   }|j                  }d} ||      }|stdt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}}|d   }|j                  }d} ||      }|stdt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }t        t        j                  |            d x}x}x}}| j                  } |       }|j                  }	| j                   d}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}x}	x}}
| j                   } |       }|j                  }	| j                   d}
|	|
k(  }|st        j                  d|fd|	|
f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}x}x}	x}}
| j                  }|j                  }d}	 ||	      }|sddt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |	      t        j                  |      dz  }t        t        j                  |            d x}x}x}	}y )NonlinezQ3 syncmodetitlethemsecond      Y@tsAhmedfirstg      I@r$   r   zAhmed: firstzLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
}r   r   r   r   r   zthem: secondz	_room.wavr   )zf%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.room_wav_path
}()
}.name
} == %(py9)smr   r   r!   r\   r#   assert %(py11)sr   z	_them.wav)zf%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.them_wav_path
}()
}.name
} == %(py9)smeeting_zfassert %(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.stem
}.startswith
}(%(py6)s)
})r   r   r!   r\   r]   )r   add	full_text
splitlines
startswithr0   r5   r6   r7   room_wav_pathr   stemr1   r2   r3   r4   them_wav_path)r   linesrf   rL   rH   rM   rK   rG   rI   rU   rN   @py_assert7rV   @py_format12ri   s                  rX   'test_meeting_session_ordering_and_pathsr   i   s   HI6AEE&(uE%EE'7tE$KKM$$&qr*E8.8.~.~.....8......~..........8.8.~.~.....8......~..........??9?9!!9xy%99!%99999!%999999919991999?999999!999%99999999??9?9!!9xy%99!%99999!%999999919991999?999999!999%9999999966(6(Z(Z((((((((1(((1(((6((((((Z((((((((((r   c                      e Zd ZdZd Zy)r   z~Transcribe returns a label derived from the audio's constant fill so a
    test can prove WHICH utterance produced WHICH line.c           	     N    dt        t        t        |d         dz               S )Nzsaid r   d   )introundfloat)r   audios     rX   
transcribezFakeMeetingSTT.transcribe{   s'    s5uQx3!6789::r   N)r   r   r   __doc__r   rw   r   rX   r   r   x   s    ;;r   r   c                      e Zd Zd Zd Zy)FakeTTSc                    g | _         y N)saidr   s    rX   r   zFakeTTS.__init__   s	    	r   c                    | j                   j                  |       t        j                  dt        j                        S )N   r   )r   rd   r'   zerosint16)r   texts     rX   synthzFakeTTS.synth   s)    		xx**r   N)r   r   r   r   r   rw   r   rX   r   r      s    +r   r   c                      e Zd Zd Zd Zy)FakeSpeakerc                     d| _         d| _        y )Nr   F)playedspeakingr   s    rX   r   zFakeSpeaker.__init__   s    r   c                .    | xj                   dz  c_         y )Nr   )r   )r   rW   s     rX   playzFakeSpeaker.play   s    qr   N)r   r   r   r   r   rw   r   rX   r   r      s    r   r   c                 V    t               } t               | _        t               | _        | S r   )r	   r   ttsr   speaker)apps    rX   _appr      s     
*CiCG-CKJr   c                n    | j                  t        dd        d }t        j                   |              y )Nr   c                     t               dfS )Nfake)r   rw   r   rX   <lambda>z;test_worker_transcribes_labels_and_orders.<locals>.<lambda>   s    9I68Rr   c                   K   t               } t        d      }t        j                  d      }|| _        t        j
                  | j                  ||            }| j                  dt        j                  ddt        j                        d	       | j                  d
t        j                  ddt        j                        d	       |j                  d        t        j                  |d       d {    |j                  } |       }|sddt        j                         v st!        j"                  |      rt!        j$                  |      ndt!        j$                  |      t!        j$                  |      dz  }t'        t!        j(                  |            d x}}|j+                         j-                         dd  }|d   }d}||k(  }	|	slt!        j.                  d|	fd||f      t!        j$                  |      t!        j$                  |      dz  }dd|iz  }
t'        t!        j(                  |
            d x}x}	}|d   }d}||k(  }	|	slt!        j.                  d|	fd||f      t!        j$                  |      t!        j$                  |      dz  }dd|iz  }
t'        t!        j(                  |
            d x}x}	}y 7 ͭw)Nr   r   
   maxsizer      g?g      i@r   r   g?r      )timeoutz?assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.done
}()
}workerr   r$   r   zAhmed: said 10r   r`   ra   rb   r\   r   zthem: said 90)r   r   asyncioQueue_meeting_stt_queuecreate_task_meeting_transcribe_worker_enqueue_meeting_audior'   r-   r,   
put_nowaitwait_fordoner2   r3   r0   r4   r5   r6   r7   r   r   r1   )r   sessionqr   rG   rI   rn   bodyrf   rL   rh   s              rX   goz5test_worker_transcribes_labels_and_orders.<locals>.go   s    f h/MM"%!"$$S%C%CGQ%OP""62773bjj+Ie"T""7BGGCrzz,Ju"U	Tvq111{{{}}vv{}  "--/3Aw***w*****w****w***********Aw)/)w/))))w/)))w)))/))))))) 	2s   C2K4K5GK)r   rr   r   runr   r  s     rX   )test_worker_transcribes_labels_and_ordersr     s+    .0RS*  KKr   c                 >    d } t        j                   |               y )Nc            	       K   t               } t        j                  d      | _        t	        d      D ]9  }| j                  dt        j                  ddt        j                        d       ; | j                  }|j                  } |       }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t!        t        j"                  |            d x}x}x}x}}y w)N   r   r   r   r   g?      ?r   r   )zl%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s._meeting_stt_queue
}.qsize
}()
} == %(py9)sr   r   r   r   )r   r   r   r   ranger   r'   r-   r,   qsizer0   r1   r2   r3   r4   r5   r6   r7   )	r   _rG   rI   rU   rN   r   rV   r   s	            rX   r  z=test_enqueue_backlog_never_raises_and_is_wav_safe.<locals>.go   s     f!(q!9rA&&vrwwsC/LQT&U %%2%++2+-22-2222-222222s222s222%222+222-22222222222s   E5E7r   r  r  s    rX   1test_enqueue_backlog_never_raises_and_is_wav_safer     s    3 KKr   c                     t               } t        d      | _        d | _        d | _        d | _        d | _        d | _        i fd}|| _        | fS )N	in_personr   c                   K   |d<   y w)Nwas_backlogrw   )r   r   r  captureds      rX   fake_finalizez)_prep_stopping_app.<locals>.fake_finalize   s     "-   
)	r   r   meeting	_room_wav	_them_wav_remote_capture_task	_sysaudio_meeting_worker_task_finalize_meeting)r   r  r  s     @rX   _prep_stopping_appr     sW    
&C k2CKCMCM#CCM#CH.)C=r   c                 >    d } t        j                   |               y )Nc                   K   t               \  } }t        j                  d      | _        | j	                          d {    t        j
                  d       d {    |d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}d | j                  j                  D        }t        |      }|sddt        j                         v st        j                   t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }t        t        j                  |            d x}}d | j                  j                  D        }t        |      }| }|sddt        j                         v st        j                   t              rt        j                  t              ndt        j                  |      t        j                  |      dz  }	t        t        j                  |	            d x}x}}y 7 -7 w)Nx   r   {Gz?r  Frs   z%(py1)s is %(py4)sra   rb   r\   c              3  $   K   | ]  }d |v  
 yw)StoppedNrw   ry   ss     rX   r{   z@test_stop_no_backlog_says_stopped.<locals>.go.<locals>.<genexpr>   s     8<a9><r}   r~   r   r   c              3  @   K   | ]  }d |j                         v   yw
processingNlowerr%  s     rX   r{   z@test_stop_no_backlog_says_stopped.<locals>.go.<locals>.<genexpr>   s     G,Q|qwwy0,   z0assert not %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
})r  r   r   r   _stop_meetingsleepr0   r1   r5   r6   r7   r   r   r   r2   r3   r4   )
r   r  rf   rI   rL   rn   rh   rG   rU   rJ   s
             rX   r  z-test_stop_no_backlog_says_stopped.<locals>.go   sy    *,X!(s!;!!!mmD!!!&/%/&%////&%///&///%///////8377<<88s888888888s888s88888888888888G#'',,GG3GGGGGGGGGGGG3GGG3GGGGGGGGGGGGGG	 	"!s"   <I1I+I1I.HI1.I1r  r  s    rX   !test_stop_no_backlog_says_stoppedr/     s    H KKr   c                 >    d } t        j                   |               y )Nc                   K   t               \  } }t        j                  d      }t        d      D ]8  }|j	                  dt        j                  dt
        j                        df       : || _        | j                          d {    t        j                  d       d {    |d   }d	}||u }|slt        j                  d
|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d | j                   j"                  D        }	t%        |	      }|sddt'        j(                         v st        j*                  t$              rt        j                  t$              ndt        j                  |	      t        j                  |      dz  }t        t        j                  |            d x}	}t        |j-                               D cg c]  }|j/                          }
}d }||
v }|st        j                  d|fd||
f      t        j                  |      dt'        j(                         v st        j*                  |
      rt        j                  |
      nddz  }dd|iz  }t        t        j                  |            d x}}y 7 >7 $c c}w w)Nr   r   r[   r   r   r  r!  r  Trs   r"  ra   rb   r\   c              3  @   K   | ]  }d |j                         v   ywr(  r*  r%  s     rX   r{   zKtest_stop_with_backlog_says_still_processing.<locals>.go.<locals>.<genexpr>   s     Cl<1779,lr,  r~   r   r   r   r   drainedr   r   r   )r  r   r   r	  r   r'   r   r,   r   r-  r.  r0   r1   r5   r6   r7   r   r   r   r2   r3   r4   r
  
get_nowait)r   r  r   r  rf   rI   rL   rn   rh   rG   r3  r   rJ   s                rX   r  z8test_stop_with_backlog_says_still_processing.<locals>.go   s    *,XMM#&qALL&"((3

";SAB !"!!!mmD!!!&.$.&$....&$...&...$.......CcggllCCsCCCCCCCCCsCCCsCCCCCCCCCCCCCC+0+;<+;a1<<>+;<twtwtww 	"! =s8   BKKK#K$E!KK
B)KK
Kr  r  s    rX   ,test_stop_with_backlog_says_still_processingr5     s     KKr   c                D      fd}t        j                   |              y )Nc                 |  K   t               } t        dd      }|j                  ddd       i j                  |dfd	       fd
}|| _        | j                  |d d       d {    j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                        rt        j                        ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            d x}x}x}x}}| j                  }|j                   } |       }| }|sddt        j                         v st        j                  |       rt        j                  |       ndt        j                  |      t        j                  |      t        j                  |      dz  }
t        t        j                  |
            d x}x}x}}| j                  j#                         }d}|j$                  } |       }||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}x}}y 7 έw)Nr  zfinalize testr   r   hellor  r   savec                 0     j                  dd      xs dS )NrF   zx.md)
setdefault)saveds   rX   r   zDtest_finalize_saves_and_notifies_inbox.<locals>.go.<locals>.<lambda>   s    u/?/?V/L/VPV/Vr   c                   K   dd<   y w)NT
summarizedrw   )mmr<  s    rX   
no_summaryzFtest_finalize_saves_and_notifies_inbox.<locals>.go.<locals>.no_summary   s     "&E,r  T)r  r>  rs   )zI%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get
}(%(py4)s)
} is %(py9)sr<  r   r   r   z_assert not %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.inbox
}.empty
}()
}r   )r   r   r!   r\   readyr   )zD%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
}msgr   r"   r#   )r   r   r   r   _summarize_meetingr  getr0   r1   r2   r3   r4   r5   r6   r7   inboxemptyr4  r+  )r   r   r@  rG   rI   rU   rN   r   rV   r   rK   rB  rf   rH   rM   rL   r<  r   s                   @rX   r  z2test_finalize_saves_and_notifies_inbox.<locals>.go   s    f?C	fg#&Av'VW	'!+##At#>>>yy..y&.$.&$....&$......u...u...y......&...$.......99$9??$?$$$$$$$$$$$3$$$3$$$9$$$?$$$$$$$$$$ii""$%#))%)+%w+%%%%w+%%%w%%%%%%#%%%#%%%)%%%+%%%%%%% 	?s   A'L<+L9,KL<r  r  s   ` rX   &test_finalize_saves_and_notifies_inboxrG     s    & KKr   ))r   
__future__r   builtinsr2   _pytest.assertion.rewrite	assertionrewriter0   r   osr:   pathlibr   numpyr'   environvoice.meetingr  rr   r   r   mainappmodr	   rY   ro   r   r   r   r   r   r   r   r   r  r  r  r/  r5  rG  rw   r   rX   <module>rT     s    #    	   

8   5  
1*8*	
); ;+ + ,	"r   