§
    fºÁjf'  ã                   óx  — d 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dl
mZ ddlmZmZ dd	lmZ  G d
„ dej        ¦  «        Zd„ Zdddddœd„Zej                             dg d¢¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zedk    r¢ddlZi Z dD ]]Z!ej"         #                    ¦   «         5 Z$ e ee!e$¦  «        ¦  «        \  Z%Z&ddd¦  «         n# 1 swxY w Y   de%e&dœe  e'e!¦  «        <   Œ^ eej(        d         ¦  «         )                     ej*        e d¬¦  «        dz   ¦  «         d„ Z+d „ Z,d!„ Z-dS )"z�Deterministic application backpressure at the real Starlette ASGI boundary.
No socket/ESP32 equivalence is assumed; the one-slot queue is an explicit model.
é    N)ÚPath)ÚSimpleNamespace)Ú	WebSocket)Úapp)Úspeech)ÚSpeechManagerÚCHUNK_BYTES)ÚSpeechTracec                   ó.   ‡ — e Zd Zˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚVirtualLoopc                 óV   •— d| _         t          ¦   «                              ¦   «          d S )Ng      Y@)ÚnowÚsuperÚ__init__©ÚselfÚ	__class__s    €úe/home/lighthouse/esp32-dev/.cache/speech-downlink-diagnostics-0.5.1/server/tests/test_speech_trace.pyr   zVirtualLoop.__init__   s&   ø€ ØˆŒÝ‰Œ×ÒÑÔÐÐÐó    c                 ó   — | j         S ©N)r   )r   s    r   ÚtimezVirtualLoop.time   s	   € ØŒxˆr   c                 ó¸   •— | j         s1| j        r*t          | j        | j        d         j        ¦  «        | _        t          ¦   «                              ¦   «          d S )Nr   )Ú_readyÚ
_scheduledÚmaxr   Ú_whenr   Ú	_run_oncer   s    €r   r   zVirtualLoop._run_once   sQ   ø€ ð Œ{ð 	?˜tœð 	?Ý˜4œ8 T¤_°QÔ%7Ô%=Ñ>Ô>ˆDŒHÝ‰Œ×ÒÑÔÐÐÐr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   Ú__classcell__)r   s   @r   r   r      s`   ø€ € € € € ðð ð ð ð ðð ð ðð ð ð ð ð ð ð ð r   r   c                 ó¤   — t          ¦   «         }	 |                     | ¦  «        |                     ¦   «          S # |                     ¦   «          w xY wr   )r   Úrun_until_completeÚclose)ÚcoroÚloops     r   Úvirtual_runr(   "   sB   € Ý‰=Œ=€DðØ×&Ò& tÑ,Ô,à�
Š
‰Œˆˆøˆ�
Š
‰Œˆˆøøøs	   �9 ¹Aé   TF)ÚframesÚcompetitorsÚburstÚproduction_cyclec          	   ƒ   ó²  ‡ ‡‡‡‡‡‡K  — t          j        ¦   «         Šg g c}Št          d‰j        |j        ¬¦  «        }|                     t          d|¦  «         |                     t          d|¦  «         t          j        d¬¦  «        Šd„ }ˆfd„}	t          dd	i||	¦  «        }
|
 
                    ¦   «         ƒ d {V —† t          j        d
dd|
dh¬¦  «        Šˆfd„}t          t          |¬¦  «        d d d„ t          j        d„ d„ ¦  «        }ˆˆ ˆˆˆfd„}ˆfd„}ˆfd„}t          j         |¦   «         ¦  «        }|                     ‰dd¦  «         |r<t          j         |dd¦  «        ¦  «        t          j         |dd¦  «        ¦  «        gng }|r/|                     t          j         |¦   «         ¦  «        ¦  «         t          j        g t%          |j        ¦  «        ¢|¢R Ž ƒ d {V —† ‰                     ¦   «         ƒ d {V —† |                     ¦   «          t          j        |d¬¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† |‰fS )NT©ÚclockÚsinkÚspeech_traceé   )Úmaxsizec               “   ó   K  — ddiS )NÚtypezwebsocket.connect© r7   r   r   Úreceivezexperiment.<locals>.receive1   s   è è € ØÐ+Ð,Ð,r   c              “   óŽ   •K  — | d         dk    r5‰                      t          j        | d         ¦  «        ¦  «        ƒ d {V —† d S d S )Nr6   zwebsocket.sendÚtext)ÚputÚjsonÚloads)ÚmessageÚqueues    €r   Ú	asgi_sendzexperiment.<locals>.asgi_send3   sW   øè è € Ø�6Œ?Ð.Ò.Ð.Ø—)’)�DœJ w¨v¤Ñ7Ô7Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð /Ð.r   r6   Ú	websocketzdiagnostic-deviceÚtestz0.5.1Úspeech_playback)Úcapabilitiesc               —   ó(   •K  — dt           dz  ‰z  z  S )Ns     é   )r	   )Ú_r*   s    €r   Ú
synthesizezexperiment.<locals>.synthesize9   s   øè è € Ø�+¨Ñ*¨VÑ3Ñ4Ð4r   )rH   c                 ó   — dS )NÚserverr7   ©rG   s    r   ú<lambda>zexperiment.<locals>.<lambda><   s   €  h€ r   c                 ó   — dS )NTr7   rK   s    r   rL   zexperiment.<locals>.<lambda><   s   € ÐRV€ r   c                 ó   — dS )NFr7   rK   s    r   rL   zexperiment.<locals>.<lambda><   s   € Ðbg€ r   c               “   ój  •K  — 	 ‰                      ¦   «         ƒ d {V —†} ‰                     ‰                     ¦   «         | d         |                       d¦  «        f¦  «         ‰r|                       d¦  «        dk    rdndn‰}t          j        |dz  ¦  «        ƒ d {V —† ‰                     ¦   «          Œ°)NTr6   Úsequencer3   éÐ  r   éè  )ÚgetÚappendr   ÚasyncioÚsleepÚ	task_done)ÚpayloadÚdelayr,   Údelay_msr'   r?   Úreceiveds     €€€€€r   Úconsumezexperiment.<locals>.consume=   sÀ   øè è € ð	Ø!ŸIšI™KœKÐ'Ð'Ð'Ð'Ð'Ð'ˆGØ�OŠO˜TŸYšY™[œ[¨'°&¬/¸7¿;º;ÀzÑ;RÔ;RÐSÑTÔTÐTàEJÐX˜WŸ[š[¨Ñ4Ô4¸Ò9Ð9�T�T¸q¸qÐPXˆEÝ”- ¨¡Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�OŠOÑÔÐð	r   c              “   óž   •K  — t          d¦  «        D ]9}t          j        |¦  «        ƒ d {V —† t          j        ‰d| i¦  «        ƒ d {V —† Œ:d S )Né   r6   )ÚrangerU   rV   ÚgatewayÚsend_to_device)ÚkindÚintervalrG   Údevices      €r   Úperiodiczexperiment.<locals>.periodicE   sx   øè è € Ý�q‘”ð 	Að 	AˆAÝ”- Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ÝÔ(¨°&¸$°Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ð	Að 	Ar   c               “   óØ   •K  — t          d¦  «        D ]V} t          j        ‰ddi¦  «        ƒ d {V —† t          j        ‰ddi¦  «        ƒ d {V —† t          j        d¦  «        ƒ d {V —† ŒWd S )Né   r6   Úserver_snapshotÚagent_staterF   )r_   r`   ra   rU   rV   )rG   rd   s    €r   Úsystem_monitor_cyclez(experiment.<locals>.system_monitor_cycleI   s    øè è € å�q‘”ð 	#ð 	#ˆAÝÔ(¨°&Ð:KÐ1LÑMÔMÐMÐMÐMÐMÐMÐMÐMÝÔ(¨°&¸-Ð1HÑIÔIÐIÐIÐIÐIÐIÐIÐIÝ”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ð	#ð 	#r   ÚscreenzFixed public test.rh   g{®GázÄ?ri   g¸…ëQ¸Î?©Úreturn_exceptions)rU   Úget_running_loopr
   r   rT   Úsetattrr`   Úspeech_moduleÚQueuer   ÚacceptÚDevicer   r   ra   Úcreate_taskÚstartÚgatherÚlistÚtasksÚjoinÚcancelr%   )rZ   Úmonkeypatchr*   r+   r,   r-   ÚrecordsÚtracer8   r@   ÚwsrH   Úmanagerr\   re   rj   ÚconsumerÚ
backgroundrd   r'   r?   r[   s   ` ` `             @@@@r   Ú
experimentr‚   *   s  øøøøøøøè è € ÝÔ#Ñ%Ô%€DØ˜BÐ€GˆXÝ˜ D¤I°G´NÐCÑCÔC€EØ×Ò� °Ñ7Ô7Ð7Ø×Ò� ~°uÑ=Ô=Ð=ÝŒM !Ð$Ñ$Ô$€Eð-ð -ð -ð9ð 9ð 9ð 9ð 9õ 
�F˜KÐ(¨'°9Ñ	=Ô	=€BØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐÝŒ^Ð/°¸À"ÐTeÐSfÐgÑgÔg€Fð5ð 5ð 5ð 5ð 5å�O°zÐBÑBÔBÀDÈ$Ø.Ð.µÔ0FÈÈÐXgÐXgñiô i€Gðð ð ð ð ð ð ð ð ðAð Að Að Að Að#ð #ð #ð #ð #õ Ô" 7 7¡9¤9Ñ-Ô-€HØ‡M‚M�&˜(Ð$8Ñ9Ô9Ð9àITð]•7Ô& x xÐ0AÀ3Ñ'GÔ'GÑHÔHÝÔ& x x°¸sÑ'CÔ'CÑDÔDðFð FØZ\ð àð GØ×Ò�'Ô-Ð.BÐ.BÑ.DÔ.DÑEÔEÑFÔFÐFÝ
Œ.Ð
;�$˜wœ}Ñ-Ô-Ð
;°
Ð
;Ð
;Ð
;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø
�*Š*‰,Œ,ÐÐÐÐÐÐÐØ‡O‚OÑÔÐÝ
Œ.˜°TÐ
:Ñ
:Ô
:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø
�-Š-‰/Œ/ÐÐÐÐÐÐÐØ�HÐÐr   rY   )r   éd   i,  rR   rQ   c           	      óî  — t          t          | |¦  «        ¦  «        \  }}d„ |D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         t          t          d¦  «        ¦  «        k    sJ ‚t	          d„ |D ¦   «         ¦  «        sJ ‚d„ |D ¦   «         t          t          d¦  «        ¦  «        k    sJ ‚t          d„ |D ¦   «         ¦  «        dk    sJ ‚t	          d	„ t          ||dd …         ¦  «        D ¦   «         ¦  «        sJ ‚| d
k    rt          d„ |D ¦   «         ¦  «        d
k    sJ ‚| dk    r>t          d„ |D ¦   «         ¦  «        dk    sJ ‚t          d„ |D ¦   «         ¦  «        dk    sJ ‚|d         d         sJ ‚d S )Nc                 ó*   — g | ]}|d          dk    ¯|‘ŒS )ÚeventÚsendr7   ©Ú.0Úrs     r   ú
<listcomp>zDtest_continuous_speech_with_constrained_receiver.<locals>.<listcomp>`   s&   € Ð8Ð8Ð8�1 1 W¤:°Ò#7Ð#7ˆQÐ#7Ð#7Ð#7r   c                 ó*   — g | ]}|d          dk    ¯|‘ŒS ©Úmessage_typeÚspeech_chunkr7   rˆ   s     r   r‹   zDtest_continuous_speech_with_constrained_receiver.<locals>.<listcomp>a   s'   € ÐFÐFÐF�A ! NÔ"3°~Ò"EÐ"EˆaÐ"EÐ"EÐ"Er   c                 ó   — g | ]
}|d          ‘ŒS )rP   r7   rˆ   s     r   r‹   zDtest_continuous_speech_with_constrained_receiver.<locals>.<listcomp>b   s   € Ð*Ð*Ð*˜aˆAˆjŒMÐ*Ð*Ð*r   r)   c              3   ó*   K  — | ]}|d          du V — ŒdS )ÚerrorNr7   rˆ   s     r   ú	<genexpr>zCtest_continuous_speech_with_constrained_receiver.<locals>.<genexpr>c   s+   è è € Ð1Ð1 aˆq�Œz˜TÐ!Ð1Ð1Ð1Ð1Ð1Ð1r   c                 ó&   — g | ]\  }}}|d k    ¯|‘ŒS )r�   r7   )r‰   rG   ÚtÚss       r   r‹   zDtest_continuous_speech_with_constrained_receiver.<locals>.<listcomp>d   s(   € Ð=Ð=Ð=‘'�!�Q˜¨¨nÒ)<Ð)<ˆAÐ)<Ð)<Ð)<r   c              3   ó*   K  — | ]\  }}}|d k    V — ŒdS ©Ú
speech_endNr7   ©r‰   rG   r•   s      r   r“   zCtest_continuous_speech_with_constrained_receiver.<locals>.<genexpr>e   ó-   è è € Ð9Ð9¡W Q¨¨1ˆq�LÒ Ð9Ð9Ð9Ð9Ð9Ð9r   r3   c              3   óF   K  — | ]\  }}|d          |d         z
  dk    V — ŒdS ©Úsend_attempt_msÚsend_complete_msg-²�ïÿS@Nr7   ©r‰   ÚaÚbs      r   r“   zCtest_continuous_speech_with_constrained_receiver.<locals>.<genexpr>f   sP   è è € ð 4ð 4Ù�1�að Ð"Ô# aÐ(:Ô&;Ñ;¸vÒEð 4ð 4ð 4ð 4ð 4ð 4r   r   c              3   ó&   K  — | ]}|d          V — ŒdS ©Údevice_lock_wait_msNr7   rˆ   s     r   r“   zCtest_continuous_speech_with_constrained_receiver.<locals>.<genexpr>i   s(   è è € Ð;Ð;°�1Ð*Ô+Ð;Ð;Ð;Ð;Ð;Ð;r   rR   c              3   ó&   K  — | ]}|d          V — ŒdS r¤   r7   rˆ   s     r   r“   zCtest_continuous_speech_with_constrained_receiver.<locals>.<genexpr>k   s(   è è € Ð<Ð<°�1Ð*Ô+Ð<Ð<Ð<Ð<Ð<Ð<r   c              3   ó>   K  — | ]}|d          dk    ¯|d         V — ŒdS )rŽ   rh   r¥   Nr7   rˆ   s     r   r“   zCtest_continuous_speech_with_constrained_receiver.<locals>.<genexpr>l   s8   è è € ÐeÐe°¸aÀÔ>OÐSdÒ>dÐ>d�1Ð*Ô+Ð>dÐ>dÐ>dÐ>dÐeÐer   éÿÿÿÿÚspeech_end_sent)r(   r‚   rw   r_   ÚallÚsumÚzipr   )rY   r{   r|   r[   ÚsendsÚchunkss         r   Ú0test_continuous_speech_with_constrained_receiverr¯   ]   sÖ  € å#¥J¨u°kÑ$BÔ$BÑCÔCÑ€GˆXØ8Ð8˜Ð8Ñ8Ô8€EØFÐF˜ÐFÑFÔF€FØ*Ð* 6Ð*Ñ*Ô*­dµ5¸±9´9©o¬oÒ=Ð=Ð=Ð=ÝÐ1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ø=Ð=˜XÐ=Ñ=Ô=ÅÅeÈBÁiÄiÁÄÒPÐPÐPÐPÝÐ9Ð9°Ð9Ñ9Ô9Ñ9Ô9¸QÒ>Ð>Ð>Ð>Ýð 4ð 4Ý˜v v¨a¨b¨b¤zÑ2Ô2ð4ñ 4ô 4ñ 4ô 4ð 4ð 4ð 4à�‚z€zÝÐ;Ð;°UÐ;Ñ;Ô;Ñ;Ô;¸qÒ@Ð@Ð@Ð@Ø�‚}€}ÝÐ<Ð<°VÐ<Ñ<Ô<Ñ<Ô<¸tÒCÐCÐCÐCÝÐeÐe°UÐeÑeÔeÑeÔeÐhlÒlÐlÐlÐlØ�2Œ;Ð(Ô)Ð)Ð)Ð)Ð)Ð)r   c           	      ó,  — t          t          d| dd¬¦  «        ¦  «        \  }}d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        dk    sJ ‚|d         d	         dk    sJ ‚t          d
„ t	          ||dd …         ¦  «        D ¦   «         ¦  «        sJ ‚d S )Nr   FT)r+   r,   c                 óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS r�   ©rS   rˆ   s     r   r‹   z@test_two_second_stall_drifts_without_catchup.<locals>.<listcomp>r   ó.   € ÐLÐLÐL�A A§E¢E¨.Ñ$9Ô$9¸^Ò$KÐ$KˆaÐ$KÐ$KÐ$Kr   c              3   ó&   K  — | ]}|d          V — ŒdS )Úwebsocket_send_msNr7   rˆ   s     r   r“   z?test_two_second_stall_drifts_without_catchup.<locals>.<genexpr>s   s(   è è € Ð6Ð6¨!ˆqÐ$Ô%Ð6Ð6Ð6Ð6Ð6Ð6r   i  r¨   Údrift_from_nominal_msc              3   óF   K  — | ]\  }}|d          |d         z
  dk    V — ŒdS r�   r7   r    s      r   r“   z?test_two_second_stall_drifts_without_catchup.<locals>.<genexpr>u   s<   è è € ÐhÐhÉÈÈ1ˆqÐ"Ô# AÐ&8Ô$9Ñ9¸VÒCÐhÐhÐhÐhÐhÐhr   r3   )r(   r‚   r   rª   r¬   )r{   r|   rG   r®   s       r   Ú,test_two_second_stall_drifts_without_catchupr¸   p   s½   € Ý�Z¨¨;ÀEÐQUÐVÑVÔVÑWÔW�J€GˆQØLÐL˜ÐLÑLÔL€FÝÐ6Ð6¨vÐ6Ñ6Ô6Ñ6Ô6¸Ò=Ð=Ð=Ð=Ø�"Œ:Ð-Ô.°Ò5Ð5Ð5Ð5ÝÐhÐhÕPSÐTZÐ\bÐcdÐceÐceÔ\fÑPgÔPgÐhÑhÔhÑhÔhÐhÐhÐhÐhÐhr   c                  ó:   — d„ } t           | ¦   «         ¦  «         d S )Nc               “   ó$  ‡K  — t          j        ¦   «         } g Št          d| j        ‰j        ¬¦  «        }d„ }t          j        dddt          |¬¦  «        ¦  «        }|                     |dd	¦  «         d
dddddœ}t          j
        t          ¦  «        5  |                     ||dd¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ‰d         d         dk    sJ ‚|j                             ¦   «         rJ ‚|j                             ¦   «         ƒ d {V —† t          j        |                     ||¦  «        ¦  «        }t          j        d¦  «        ƒ d {V —† |                     ¦   «          t          j        |d¬¦  «        ƒ d {V —† ‰d         d         dk    sJ ‚‰d         d         �J ‚‰d         d         dk    sJ ‚|j                             ¦   «          |                     |d¦  «         t-          ˆfd„dD ¦   «         ¦  «        sJ ‚d S )NTr/   c              “   ó>   K  — t          j        d¦  «        ƒ d {V —† d S )Né
   ©rU   rV   rK   s    r   Úblockedz\test_timeout_and_cancel_release_lock_without_leaking_payload.<locals>.check.<locals>.blocked}   s.   è è € Ý”- Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r   Údr¢   Úv©Ú	send_jsonr–   rk   r�   r   ÚPRIVATE_PCMÚSECRET)r6   Ú	speech_idrP   ÚaudioÚtokenrF   )Úscheduled_elapsed_msÚraw_pcm_bytesr¨   rµ   i¸  é   rl   r¥   iˆ  r’   ÚCancelledErrorc              3   óD   •K  — | ]}|t          j        ‰¦  «        vV — Œd S r   )r<   Údumps)r‰   Úxr|   s     €r   r“   z^test_timeout_and_cancel_release_lock_without_leaking_payload.<locals>.check.<locals>.<genexpr>�   s2   øè è € ÐeÐe°A�1�DœJ wÑ/Ô/Ð/ÐeÐeÐeÐeÐeÐer   )rÃ   rÄ   rÆ   rÇ   )rU   rn   r
   r   rT   r`   rs   r   ÚbeginÚpytestÚraisesÚTimeoutErrorr‡   Ú	send_lockÚlockedÚacquirert   rV   rz   rv   ÚreleaseÚfinishrª   )r'   r}   r¾   r¿   rX   Útaskr|   s         @r   ÚcheckzKtest_timeout_and_cancel_release_lock_without_leaking_payload.<locals>.checky   s¡  øè è € ÝÔ'Ñ)Ô)ˆØˆÝ˜D¨¬	¸¼ÐGÑGÔGˆð	$ð 	$ð 	$åŒN˜3  S­/ÀGÐ*LÑ*LÔ*LÑMÔMˆØ�Š�A�s˜HÑ%Ô%Ð%Ø)¸ÈÐUbÐmuÐvÐvˆÝŒ]�<Ñ(Ô(ð 	Rð 	RØ—*’*˜Q ¸aÈq�*ÑQÔQÐQÐQÐQÐQÐQÐQÐQð	Rð 	Rð 	Rñ 	Rô 	Rð 	Rð 	Rð 	Rð 	Rð 	Rð 	Røøøð 	Rð 	Rð 	Rð 	Rà�rŒ{Ð.Ô/°4Ò7Ð7Ð7Ð7Ø”;×%Ò%Ñ'Ô'Ð'Ð'Ð'ØŒk×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ÝÔ" 5§:¢:¨a°Ñ#9Ô#9Ñ:Ô:ˆÝŒm˜AÑÔÐÐÐÐÐÐÐØ�Š‰ŒˆÝŒn˜T°TÐ:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø�rŒ{Ð0Ô1°TÒ9Ð9Ð9Ð9Ø�rŒ{Ð.Ô/Ð7Ð7Ð7Ø�rŒ{˜7Ô#Ð'7Ò7Ð7Ð7Ð7Ø	Œ×ÒÑÔÐØ�Š�Q˜ÑÔÐÝÐeÐeÐeÐeÐ9dÐeÑeÔeÑeÔeÐeÐeÐeÐeÐes   Â CÃCÃC©r(   )rÙ   s    r   Ú<test_timeout_and_cancel_release_lock_without_leaking_payloadrÛ   x   s0   € ðfð fð fõ0 ��‘”ÑÔÐÐÐr   c                 óþ   ‡— |                       dd¬¦  «         t          j        ¦   «         j        rJ ‚ˆfd„}‰                     d¦  «        5  t           |¦   «         ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚGATEWAY_SPEECH_TRACEF)Úraisingc               “   óð  •K  — g } t          dt          j        ¦   «         j        | j        ¬¦  «        }d„ }t          j        dddt          |¬¦  «        ¦  «        }|                     |dd	¦  «         t          d
¦  «        D ]$}| 
                    |dd|dœd¬¦  «        ƒ d {V —† Œ%t          | ¦  «        dk    sJ ‚t          ‰j        ¦  «        dk    sJ ‚| d         d         t          d¦  «        k    sJ ‚d S )NTr/   c              “   ó
   K  — d S r   r7   rK   s    r   Úfastz:test_default_off_and_sampling.<locals>.check.<locals>.fastš   s
   è è € € € r   r¿   r¢   rÀ   rÁ   r–   rk   r¼   r�   )r6   rÅ   rP   r   )rÈ   é   é   r3   Úwire_payload_bytesz4{"type":"speech_chunk","speech_id":"s","sequence":0})r
   rU   rn   r   rT   r`   rs   r   rÏ   r_   r‡   Úlenr|   )r|   r}   rá   r¿   ÚiÚcaplogs        €r   rÙ   z,test_default_off_and_sampling.<locals>.check—   s  øè è € ØˆÝ˜D­Ô(@Ñ(BÔ(BÔ(GÈgÌnÐ]Ñ]Ô]ˆØÐÐÝŒN˜3  S­/ÀDÐ*IÑ*IÔ*IÑJÔJˆØ�Š�A�s˜HÑ%Ô%Ð%Ý�r‘”ð 	sð 	sˆAØ—*’*˜Q¨ÀcÐWXÐ YÐ YÐpq�*ÑrÔrÐrÐrÐrÐrÐrÐrÐrÐrÝ�7‰|Œ|˜rÒ!Ð!Ð!Ð!Ý�6”>Ñ"Ô" aÒ'Ð'Ð'Ð'Ø�qŒzÐ.Ô/µ3Ð7mÑ3nÔ3nÒnÐnÐnÐnÐnÐnr   ÚINFO)Údelenvr
   Úfrom_envÚenabledÚat_levelr(   )r{   rç   rÙ   s    ` r   Útest_default_off_and_samplingrí   ”   sß   ø€ Ø×ÒÐ-°uÐÑ=Ô=Ð=ÝÔ#Ñ%Ô%Ô-Ð-Ð-Ð-ð
oð 
oð 
oð 
oð 
oð 
�Š˜Ñ	 Ô	 ð ð Ý�E�E‘G”GÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÁA2Á2A6Á9A6Ú__main__z4one-slot ASGI queue; periodic snapshot + agent_state)Úmodelr}   r8   r3   rF   )Úindentú
c                 ó@   ‡ — ˆ fd„}t           |¦   «         ¦  «         d S )Nc            	   “   óF  •‡K  — t          j        ¦   «         } g g c}Št          d| j        |j        ¬¦  «        }‰                     t          d|¦  «         d„ }ˆfd„}t          j        dddt          ||¬	¦  «        ¦  «        }‰                     t          d
|j	        |i¦  «         | 
                    |dd¦  «         t          j        ddi¦  «        ƒ d {V —† |j        s|j        €	‰ddigk    sJ ‚|d         d         dk    sJ ‚|j                             ¦   «         rJ ‚d S )NTr/   r2   c              “   ó>   K  — t          j        d¦  «        ƒ d {V —† d S )Nrg   r½   rK   s    r   r¾   zVtest_snapshot_timeout_closes_device_and_cancels_stream.<locals>.check.<locals>.blocked·   s.   è è € Ý”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"r   c               ›   ó6   •K  — ‰                      | ¦  «         d S r   ©rT   )ÚkwargsÚclosess    €r   r%   zTtest_snapshot_timeout_closes_device_and_cancels_stream.<locals>.check.<locals>.close¹   s   øè è € Ø�MŠM˜&Ñ!Ô!Ð!Ð!Ð!r   zisolated-testr¢   rÀ   )rÂ   r%   ÚdevicesÚ	syntheticrk   r6   rh   Úcodeió  r¨   r’   rÒ   )rU   rn   r
   r   rT   ro   r`   rs   r   Ú	device_idrÏ   Úbroadcast_server_snapshotÚonlinerA   rÓ   rÔ   )r'   r|   r}   r¾   r%   r¿   rø   r{   s         @€r   rÙ   zEtest_snapshot_timeout_closes_device_and_cancels_stream.<locals>.check²   s[  øøè è € ÝÔ'Ñ)Ô)ˆØ˜bˆˆ�Ý˜D¨¬	¸¼ÐGÑGÔGˆØ×Ò�G ^°UÑ;Ô;Ð;ð	#ð 	#ð 	#ð	"ð 	"ð 	"ð 	"ð 	"åŒN˜?¨C°µoÐPWÐ_dÐ6eÑ6eÔ6eÑfÔfˆØ×Ò�G Y°´¸aÐ0@ÑAÔAÐAØ�Š�A�{ HÑ-Ô-Ð-ÝÔ/°Ð9JÐ0KÑLÔLÐLÐLÐLÐLÐLÐLÐLØ”8ÐR ¤Ð 3¸ÀFÈDÀ>ÐBRÒ8RÐ8RÐ8RÐ8RØ�rŒ{˜7Ô# ~Ò5Ð5Ð5Ð5Ø”;×%Ò%Ñ'Ô'Ð'Ð'Ð'Ð'Ð'r   rÚ   ©r{   rÙ   s   ` r   Ú6test_snapshot_timeout_closes_device_and_cancels_streamr   ±   s8   ø€ ð(ð (ð (ð (ð (õ  ��‘”ÑÔÐÐÐr   c                 ó.  — t          t          d| dd¬¦  «        ¦  «        \  }}d„ |D ¦   «         }d„ |D ¦   «         }t          d„ |D ¦   «         ¦  «        dk    sJ ‚t          d	„ |D ¦   «         ¦  «        dk    sJ ‚t          d
„ |D ¦   «         ¦  «        sJ ‚d S )NrQ   FT)r+   r-   c                 óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS r�   r²   rˆ   s     r   r‹   zGtest_actual_sequential_system_monitor_also_contends.<locals>.<listcomp>Ç   r³   r   c                 óD   — g | ]}|                      d ¦  «        dk    ¯|‘ŒS )rŽ   rh   r²   rˆ   s     r   r‹   zGtest_actual_sequential_system_monitor_also_contends.<locals>.<listcomp>È   s/   € ÐRÐRÐR�q q§u¢u¨^Ñ'<Ô'<Ð@QÒ'QÐ'Q�Ð'QÐ'QÐ'Qr   c              3   ó&   K  — | ]}|d          V — ŒdS r¤   r7   rˆ   s     r   r“   zFtest_actual_sequential_system_monitor_also_contends.<locals>.<genexpr>É   s(   è è € Ð8Ð8¨AˆqÐ&Ô'Ð8Ð8Ð8Ð8Ð8Ð8r   rR   c              3   ó&   K  — | ]}|d          V — ŒdS r¤   r7   rˆ   s     r   r“   zFtest_actual_sequential_system_monitor_also_contends.<locals>.<genexpr>Ê   s(   è è € Ð;Ð;¨AˆqÐ&Ô'Ð;Ð;Ð;Ð;Ð;Ð;r   c              3   ó*   K  — | ]\  }}}|d k    V — ŒdS r˜   r7   rš   s      r   r“   zFtest_actual_sequential_system_monitor_also_contends.<locals>.<genexpr>Ë   r›   r   )r(   r‚   r   Úany)r{   r|   r[   r   Ú	snapshotss        r   Ú3test_actual_sequential_system_monitor_also_contendsr	  Å   sÅ   € Ý#¥J¨t°[ÈeÐfjÐ$kÑ$kÔ$kÑlÔlÑ€GˆXØLÐL˜ÐLÑLÔL€FØRÐR˜GÐRÑRÔR€IÝÐ8Ð8°Ð8Ñ8Ô8Ñ8Ô8¸4Ò?Ð?Ð?Ð?ÝÐ;Ð;°Ð;Ñ;Ô;Ñ;Ô;¸dÒBÐBÐBÐBÝÐ9Ð9°Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9r   c                 ó@   ‡ — ˆ fd„}t           |¦   «         ¦  «         d S )Nc               “   óR  •‡K  — g Šˆfd„} t          j        dddt          | ¬¦  «        ¦  «        }t          dd„ ¬¦  «        }|                     |d	d
¦  «         d„ }‰                     d|¦  «         dddœ}|                     ||¦  «        ƒ d {V —† ‰d         |u r|j        rJ ‚d S )Nc              “   ó6   •K  — ‰                      | ¦  «         d S r   rö   )rX   Úobserveds    €r   r‡   zMtest_disabled_trace_does_not_serialize_or_mutate.<locals>.check.<locals>.sendÑ   s   øè è €  §¢°Ñ!9Ô!9Ð!9Ð!9Ð!9r   r¿   r¢   rÀ   rÁ   Fc                 ó*   — t          j        d¦  «        S )Nzdisabled trace emitted©rÐ   ÚfailrK   s    r   rL   zQtest_disabled_trace_does_not_serialize_or_mutate.<locals>.check.<locals>.<lambda>Ó   s   € µ&´+Ð>VÑ2WÔ2W€ r   )r1   r–   rk   c                  ó.   — t          j        d¦  «         d S )Nzdisabled trace serializedr  )rG   Ú__s     r   Ú	forbiddenzRtest_disabled_trace_does_not_serialize_or_mutate.<locals>.check.<locals>.forbiddenÕ   s   € ¥¤Ð-HÑ!IÔ!IÐ!IÐ!IÐ!Ir   z&device_gateway.speech_trace.json.dumpsr�   Ú	unchanged)r6   rÆ   r   )r`   rs   r   r
   rÏ   ro   r‡   Ústreams)r‡   r¿   r}   r  rX   r  r{   s        @€r   rÙ   z?test_disabled_trace_does_not_serialize_or_mutate.<locals>.checkÏ   sÝ   øøè è € ØˆØ9Ð9Ð9Ð9Ð9ÝŒN˜3  S­/ÀDÐ*IÑ*IÔ*IÑJÔJˆÝ˜EÐ(WÐ(WÐXÑXÔXˆØ�Š�A�s˜HÑ%Ô%Ð%ØIÐIÐIØ×ÒÐDÀiÑPÔPÐPØ)°KÐ@Ð@ˆØ�jŠj˜˜GÑ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø˜Œ{˜gÐ%Ð%¨e¬mÐ%Ð%Ð%Ð%Ð%r   rÚ   rÿ   s   ` r   Ú0test_disabled_trace_does_not_serialize_or_mutater  Î   s8   ø€ ð
<ð 
<ð 
<ð 
<ð 
<õ ��‘”ÑÔÐÐÐr   ).Ú__doc__rU   r<   Úpathlibr   Útypesr   rÐ   Ústarlette.websocketsr   Údevice_gatewayr   r`   r   rp   Údevice_gateway.speechr   r	   Údevice_gateway.speech_tracer
   ÚSelectorEventLoopr   r(   r‚   ÚmarkÚparametrizer¯   r¸   rÛ   rí   r   ÚsysÚresultsrY   ÚMonkeyPatchÚcontextÚpatchr|   r[   ÚstrÚargvÚ
write_textrÍ   r   r	  r  r7   r   r   ú<module>r)     sÒ  ððð ð €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø *Ð *Ð *Ð *Ð *Ð *à )Ð )Ð )Ð )Ð )Ð )Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð �'Ô+ñ ô ð ð ð ð ð 79ÀdÐRWÐjoð 0ð 0ð 0ð 0ð 0ðf „×Ò˜Ð";Ð";Ð";Ñ<Ô<ð*ð *ñ =Ô<ð*ð$ið ið iðð ð ð8ð ð ð$ ˆzÒÐØ€J€J€JØ€GØ*ð Fð FˆØÔ×'Ò'Ñ)Ô)ð 	F¨UØ + ¨J¨J°u¸eÑ,DÔ,DÑ EÔ EÑˆG�Xð	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Fà(^Ø(/¸HðFð Fˆ���E‘
”
ÑÐà€DˆŒ�!ŒÑÔ× Ò   ¤¨G¸AÐ!>Ñ!>Ô!>ÀÑ!EÑFÔFÐFðð ð ð(:ð :ð :ðð ð ð ð s   Â2CÃC	ÃC	